yuzu-emu
/
yuzu-android
Archived
1
0
Fork 0

Merge pull request #5796 from ReinUsesLisp/vertex-a-bypass-vk

vk_pipeline_cache: Properly bypass VertexA shaders
This commit is contained in:
bunnei 2021-01-24 11:22:58 -08:00 committed by GitHub
commit 19c14589d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 3 additions and 9 deletions

View File

@ -355,14 +355,12 @@ VKPipelineCache::DecompileShaders(const FixedPipelineState& fixed_state) {
SPIRVProgram program; SPIRVProgram program;
std::vector<VkDescriptorSetLayoutBinding> bindings; std::vector<VkDescriptorSetLayoutBinding> bindings;
for (std::size_t index = 0; index < Maxwell::MaxShaderProgram; ++index) { for (std::size_t index = 1; index < Maxwell::MaxShaderProgram; ++index) {
const auto program_enum = static_cast<Maxwell::ShaderProgram>(index); const auto program_enum = static_cast<Maxwell::ShaderProgram>(index);
// Skip stages that are not enabled // Skip stages that are not enabled
if (!maxwell3d.regs.IsShaderConfigEnabled(index)) { if (!maxwell3d.regs.IsShaderConfigEnabled(index)) {
continue; continue;
} }
const GPUVAddr gpu_addr = GetShaderAddress(maxwell3d, program_enum); const GPUVAddr gpu_addr = GetShaderAddress(maxwell3d, program_enum);
const std::optional<VAddr> cpu_addr = gpu_memory.GpuToCpuAddress(gpu_addr); const std::optional<VAddr> cpu_addr = gpu_memory.GpuToCpuAddress(gpu_addr);
Shader* const shader = cpu_addr ? TryGet(*cpu_addr) : null_shader.get(); Shader* const shader = cpu_addr ? TryGet(*cpu_addr) : null_shader.get();
@ -372,12 +370,8 @@ VKPipelineCache::DecompileShaders(const FixedPipelineState& fixed_state) {
const auto& entries = shader->GetEntries(); const auto& entries = shader->GetEntries();
program[stage] = { program[stage] = {
Decompile(device, shader->GetIR(), program_type, shader->GetRegistry(), specialization), Decompile(device, shader->GetIR(), program_type, shader->GetRegistry(), specialization),
entries}; entries,
};
if (program_enum == Maxwell::ShaderProgram::VertexA) {
// VertexB was combined with VertexA, so we skip the VertexB iteration
++index;
}
const u32 old_binding = specialization.base_binding; const u32 old_binding = specialization.base_binding;
specialization.base_binding = specialization.base_binding =