summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-04-13 21:56:22 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:27 +0200
commita83579b50a167ab9483e5058fd1c748018ef6d7c (patch)
treead924ec0219e4cbd6d2efae934061082751d9b27
parentshader: Document and relax cache control on surface instructions (diff)
downloadyuzu-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
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv.cpp3
-rw-r--r--src/shader_recompiler/profile.h1
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp1
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;
}