shader: Implement early Z tests

This commit is contained in:
ReinUsesLisp 2021-04-13 16:56:22 -03:00 committed by ameerj
parent 09165ae189
commit a83579b50a
3 changed files with 5 additions and 0 deletions

View file

@ -178,6 +178,9 @@ void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) {
if (program.info.stores_frag_depth) { if (program.info.stores_frag_depth) {
ctx.AddExecutionMode(main, spv::ExecutionMode::DepthReplacing); ctx.AddExecutionMode(main, spv::ExecutionMode::DepthReplacing);
} }
if (ctx.profile.force_early_z) {
ctx.AddExecutionMode(main, spv::ExecutionMode::EarlyFragmentTests);
}
break; break;
default: default:
throw NotImplementedException("Stage {}", program.stage); throw NotImplementedException("Stage {}", program.stage);

View file

@ -53,6 +53,7 @@ struct Profile {
std::array<AttributeType, 32> generic_input_types{}; std::array<AttributeType, 32> generic_input_types{};
bool convert_depth_mode{}; bool convert_depth_mode{};
bool force_early_z{};
InputTopology input_topology{}; InputTopology input_topology{};

View file

@ -934,6 +934,7 @@ Shader::Profile PipelineCache::MakeProfile(const GraphicsPipelineCacheKey& key,
profile.input_topology = Shader::InputTopology::TrianglesAdjacency; profile.input_topology = Shader::InputTopology::TrianglesAdjacency;
break; break;
} }
profile.force_early_z = key.state.early_z != 0;
return profile; return profile;
} }