shader: support fractional-even tessellation spacing

This commit is contained in:
Çağatay Güçlü authored and nmzik committed 2026-10-29 05:52:04 +01:00
1 parent 63207739bc
commit f71da54b9b
2 files changed
+11 -6

No files matched your search

@@ -130,9 +130,9 @@ void DefineTessellationInterfaces(EmitterState& state) {
void DefineTessellationExecutionModes(EmitterState& state) {
const auto& tess = state.input_info.vertex->tess;
// Triangle or quad domain, integer or fractional-odd partitioning, triangle output.
// Triangle or quad domain, integer or fractional partitioning, triangle output.
EXIT_NOT_IMPLEMENTED((tess.domain != 1u && tess.domain != 2u) ||
(tess.partitioning != 0u && tess.partitioning != 2u) ||
(tess.partitioning != 0u && tess.partitioning != 2u && tess.partitioning != 3u) ||
(tess.output_topology != 2u && tess.output_topology != 3u));
state.builder.RequireCapability(spv::CapabilityTessellation);
if (state.program.stage == ShaderType::TessellationControl) {
@@ -144,7 +144,8 @@ void DefineTessellationExecutionModes(EmitterState& state) {
: spv::ExecutionModeQuads);
state.builder.AddExecutionMode(
state.main_func, tess.partitioning == 0u ? spv::ExecutionModeSpacingEqual
: spv::ExecutionModeSpacingFractionalOdd);
: tess.partitioning == 2u ? spv::ExecutionModeSpacingFractionalOdd
: spv::ExecutionModeSpacingFractionalEven);
state.builder.AddExecutionMode(state.main_func, tess.output_topology == 2u
? spv::ExecutionModeVertexOrderCw
: spv::ExecutionModeVertexOrderCcw);