diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-04-13 21:56:22 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:27 +0200 |
commit | a83579b50a167ab9483e5058fd1c748018ef6d7c (patch) | |
tree | ad924ec0219e4cbd6d2efae934061082751d9b27 /src | |
parent | shader: Document and relax cache control on surface instructions (diff) | |
download | yuzu-a83579b50a167ab9483e5058fd1c748018ef6d7c.tar yuzu-a83579b50a167ab9483e5058fd1c748018ef6d7c.tar.gz yuzu-a83579b50a167ab9483e5058fd1c748018ef6d7c.tar.bz2 yuzu-a83579b50a167ab9483e5058fd1c748018ef6d7c.tar.lz yuzu-a83579b50a167ab9483e5058fd1c748018ef6d7c.tar.xz yuzu-a83579b50a167ab9483e5058fd1c748018ef6d7c.tar.zst yuzu-a83579b50a167ab9483e5058fd1c748018ef6d7c.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/shader_recompiler/backend/spirv/emit_spirv.cpp | 3 | ||||
-rw-r--r-- | src/shader_recompiler/profile.h | 1 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 1 |
3 files changed, 5 insertions, 0 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp index 61a2018d7..7ad00c434 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp @@ -178,6 +178,9 @@ void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) { if (program.info.stores_frag_depth) { ctx.AddExecutionMode(main, spv::ExecutionMode::DepthReplacing); } + if (ctx.profile.force_early_z) { + ctx.AddExecutionMode(main, spv::ExecutionMode::EarlyFragmentTests); + } break; default: throw NotImplementedException("Stage {}", program.stage); diff --git a/src/shader_recompiler/profile.h b/src/shader_recompiler/profile.h index 06f1f59bd..919bec4e2 100644 --- a/src/shader_recompiler/profile.h +++ b/src/shader_recompiler/profile.h @@ -53,6 +53,7 @@ struct Profile { std::array<AttributeType, 32> generic_input_types{}; bool convert_depth_mode{}; + bool force_early_z{}; InputTopology input_topology{}; diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index f49add208..8a59a2611 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -934,6 +934,7 @@ Shader::Profile PipelineCache::MakeProfile(const GraphicsPipelineCacheKey& key, profile.input_topology = Shader::InputTopology::TrianglesAdjacency; break; } + profile.force_early_z = key.state.early_z != 0; return profile; } |