Skip to content

Commit 56350ca

Browse files
authored
Support for CapabilityShaderViewportIndex and CapabilityShaderLayer (KhronosGroup#2432)
* When targeting SPIR-V 1.5, using gl_ViewportIndex will emit OpCapability ShaderViewportIndex and using gl_Layer will emit OpCapability CapabilityShaderLayer. OpCapability ShaderViewportIndexLayerEXT will only get emitted if the target < SPIR-V 1.5 * When using one of the viewport/layer arrays extensions, fallback to OpCapability ShaderViewportIndexLayerEXT, even when targeting SPIR-V 1.5 * Revert "When using one of the viewport/layer arrays extensions, fallback to OpCapability ShaderViewportIndexLayerEXT, even when targeting SPIR-V 1.5" This reverts commit dccca82. * Using gl_Layer and gl_ViewportIndex outside of the geometry shader stage still requires one of the viewport extensions even when targeting SPIR-V 1.5 (Fixes a problem introduced by 670536b)
1 parent ed8bd04 commit 56350ca

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

SPIRV/GlslangToSpv.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -714,8 +714,12 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
714714
glslangIntermediate->getStage() == EShLangTessControl ||
715715
glslangIntermediate->getStage() == EShLangTessEvaluation) {
716716

717-
builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
718-
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
717+
if (builder.getSpvVersion() < spv::Spv_1_5) {
718+
builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
719+
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
720+
}
721+
else
722+
builder.addCapability(spv::CapabilityShaderViewportIndex);
719723
}
720724
return spv::BuiltInViewportIndex;
721725

@@ -739,8 +743,11 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
739743
glslangIntermediate->getStage() == EShLangTessControl ||
740744
glslangIntermediate->getStage() == EShLangTessEvaluation) {
741745

742-
builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
743-
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
746+
if (builder.getSpvVersion() < spv::Spv_1_5) {
747+
builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
748+
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
749+
} else
750+
builder.addCapability(spv::CapabilityShaderLayer);
744751
}
745752
return spv::BuiltInLayer;
746753

0 commit comments

Comments
 (0)