|
|
|
@ -169,15 +169,15 @@ ConfigureFuncPtr ConfigureFunc(const std::array<Shader::Info, 5>& infos, u32 ena |
|
|
|
} |
|
|
|
} // Anonymous namespace
|
|
|
|
|
|
|
|
GraphicsPipeline::GraphicsPipeline( |
|
|
|
const Device& device, TextureCache& texture_cache_, BufferCache& buffer_cache_, |
|
|
|
Tegra::MemoryManager& gpu_memory_, Tegra::Engines::Maxwell3D& maxwell3d_, |
|
|
|
ProgramManager& program_manager_, StateTracker& state_tracker_, ShaderWorker* thread_worker, |
|
|
|
VideoCore::ShaderNotify* shader_notify, std::array<std::string, 5> sources, |
|
|
|
std::array<std::vector<u32>, 5> sources_spirv, const std::array<const Shader::Info*, 5>& infos, |
|
|
|
const GraphicsPipelineKey& key_) |
|
|
|
: texture_cache{texture_cache_}, buffer_cache{buffer_cache_}, |
|
|
|
gpu_memory{gpu_memory_}, maxwell3d{maxwell3d_}, program_manager{program_manager_}, |
|
|
|
GraphicsPipeline::GraphicsPipeline(const Device& device, TextureCache& texture_cache_, |
|
|
|
BufferCache& buffer_cache_, ProgramManager& program_manager_, |
|
|
|
StateTracker& state_tracker_, ShaderWorker* thread_worker, |
|
|
|
VideoCore::ShaderNotify* shader_notify, |
|
|
|
std::array<std::string, 5> sources, |
|
|
|
std::array<std::vector<u32>, 5> sources_spirv, |
|
|
|
const std::array<const Shader::Info*, 5>& infos, |
|
|
|
const GraphicsPipelineKey& key_) |
|
|
|
: texture_cache{texture_cache_}, buffer_cache{buffer_cache_}, program_manager{program_manager_}, |
|
|
|
state_tracker{state_tracker_}, key{key_} { |
|
|
|
if (shader_notify) { |
|
|
|
shader_notify->MarkShaderBuilding(); |
|
|
|
@ -285,7 +285,7 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) { |
|
|
|
buffer_cache.runtime.SetBaseStorageBindings(base_storage_bindings); |
|
|
|
buffer_cache.runtime.SetEnableStorageBuffers(use_storage_buffers); |
|
|
|
|
|
|
|
const auto& regs{maxwell3d.regs}; |
|
|
|
const auto& regs{maxwell3d->regs}; |
|
|
|
const bool via_header_index{regs.sampler_index == Maxwell::SamplerIndex::ViaHeaderIndex}; |
|
|
|
const auto config_stage{[&](size_t stage) LAMBDA_FORCEINLINE { |
|
|
|
const Shader::Info& info{stage_infos[stage]}; |
|
|
|
@ -299,7 +299,7 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) { |
|
|
|
++ssbo_index; |
|
|
|
} |
|
|
|
} |
|
|
|
const auto& cbufs{maxwell3d.state.shader_stages[stage].const_buffers}; |
|
|
|
const auto& cbufs{maxwell3d->state.shader_stages[stage].const_buffers}; |
|
|
|
const auto read_handle{[&](const auto& desc, u32 index) { |
|
|
|
ASSERT(cbufs[desc.cbuf_index].enabled); |
|
|
|
const u32 index_offset{index << desc.size_shift}; |
|
|
|
@ -312,13 +312,13 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) { |
|
|
|
const u32 second_offset{desc.secondary_cbuf_offset + index_offset}; |
|
|
|
const GPUVAddr separate_addr{cbufs[desc.secondary_cbuf_index].address + |
|
|
|
second_offset}; |
|
|
|
const u32 lhs_raw{gpu_memory.Read<u32>(addr)}; |
|
|
|
const u32 rhs_raw{gpu_memory.Read<u32>(separate_addr)}; |
|
|
|
const u32 lhs_raw{gpu_memory->Read<u32>(addr)}; |
|
|
|
const u32 rhs_raw{gpu_memory->Read<u32>(separate_addr)}; |
|
|
|
const u32 raw{lhs_raw | rhs_raw}; |
|
|
|
return TexturePair(raw, via_header_index); |
|
|
|
} |
|
|
|
} |
|
|
|
return TexturePair(gpu_memory.Read<u32>(addr), via_header_index); |
|
|
|
return TexturePair(gpu_memory->Read<u32>(addr), via_header_index); |
|
|
|
}}; |
|
|
|
const auto add_image{[&](const auto& desc, bool blacklist) LAMBDA_FORCEINLINE { |
|
|
|
for (u32 index = 0; index < desc.count; ++index) { |
|
|
|
|