mirror of
https://github.com/KhronosGroup/glslang
synced 2024-09-18 19:59:54 +00:00
SPV: Fix issue #376; declare Geometry capability for fragment use of gl_Layer.
This commit is contained in:
parent
91e4aa5900
commit
78a4557621
@ -416,19 +416,19 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
|
||||
{
|
||||
switch (builtIn) {
|
||||
case glslang::EbvPointSize:
|
||||
// Defer adding the capability until the built-in is actually used.
|
||||
if (!memberDeclaration) {
|
||||
switch (glslangIntermediate->getStage()) {
|
||||
case EShLangGeometry:
|
||||
builder.addCapability(spv::CapabilityGeometryPointSize);
|
||||
break;
|
||||
case EShLangTessControl:
|
||||
case EShLangTessEvaluation:
|
||||
builder.addCapability(spv::CapabilityTessellationPointSize);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// Defer adding the capability until the built-in is actually used.
|
||||
if (! memberDeclaration) {
|
||||
switch (glslangIntermediate->getStage()) {
|
||||
case EShLangGeometry:
|
||||
builder.addCapability(spv::CapabilityGeometryPointSize);
|
||||
break;
|
||||
case EShLangTessControl:
|
||||
case EShLangTessEvaluation:
|
||||
builder.addCapability(spv::CapabilityTessellationPointSize);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return spv::BuiltInPointSize;
|
||||
|
||||
@ -440,12 +440,12 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
|
||||
//
|
||||
case glslang::EbvClipDistance:
|
||||
if (!memberDeclaration)
|
||||
builder.addCapability(spv::CapabilityClipDistance);
|
||||
builder.addCapability(spv::CapabilityClipDistance);
|
||||
return spv::BuiltInClipDistance;
|
||||
|
||||
case glslang::EbvCullDistance:
|
||||
if (!memberDeclaration)
|
||||
builder.addCapability(spv::CapabilityCullDistance);
|
||||
builder.addCapability(spv::CapabilityCullDistance);
|
||||
return spv::BuiltInCullDistance;
|
||||
|
||||
case glslang::EbvViewportIndex:
|
||||
@ -464,6 +464,10 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
|
||||
builder.addCapability(spv::CapabilitySampleRateShading);
|
||||
return spv::BuiltInSampleMask;
|
||||
|
||||
case glslang::EbvLayer:
|
||||
builder.addCapability(spv::CapabilityGeometry);
|
||||
return spv::BuiltInLayer;
|
||||
|
||||
case glslang::EbvPosition: return spv::BuiltInPosition;
|
||||
case glslang::EbvVertexId: return spv::BuiltInVertexId;
|
||||
case glslang::EbvInstanceId: return spv::BuiltInInstanceId;
|
||||
@ -477,7 +481,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
|
||||
return (spv::BuiltIn)spv::BadValue;
|
||||
case glslang::EbvPrimitiveId: return spv::BuiltInPrimitiveId;
|
||||
case glslang::EbvInvocationId: return spv::BuiltInInvocationId;
|
||||
case glslang::EbvLayer: return spv::BuiltInLayer;
|
||||
case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner;
|
||||
case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter;
|
||||
case glslang::EbvTessCoord: return spv::BuiltInTessCoord;
|
||||
|
54
Test/baseResults/spv.430.frag.out
Executable file
54
Test/baseResults/spv.430.frag.out
Executable file
@ -0,0 +1,54 @@
|
||||
spv.430.frag
|
||||
Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
|
||||
|
||||
|
||||
Linked fragment stage:
|
||||
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80001
|
||||
// Id's are bound by 24
|
||||
|
||||
Capability Shader
|
||||
Capability Geometry
|
||||
Capability MultiViewport
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 9 14 19
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source GLSL 430
|
||||
Name 4 "main"
|
||||
Name 9 "color"
|
||||
Name 14 "gl_Layer"
|
||||
Name 19 "gl_ViewportIndex"
|
||||
Decorate 14(gl_Layer) Flat
|
||||
Decorate 14(gl_Layer) BuiltIn Layer
|
||||
Decorate 19(gl_ViewportIndex) Flat
|
||||
Decorate 19(gl_ViewportIndex) BuiltIn ViewportIndex
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
7: TypeVector 6(float) 4
|
||||
8: TypePointer Output 7(fvec4)
|
||||
9(color): 8(ptr) Variable Output
|
||||
10: 6(float) Constant 1065353216
|
||||
11: 7(fvec4) ConstantComposite 10 10 10 10
|
||||
12: TypeInt 32 1
|
||||
13: TypePointer Input 12(int)
|
||||
14(gl_Layer): 13(ptr) Variable Input
|
||||
19(gl_ViewportIndex): 13(ptr) Variable Input
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
Store 9(color) 11
|
||||
15: 12(int) Load 14(gl_Layer)
|
||||
16: 6(float) ConvertSToF 15
|
||||
17: 7(fvec4) Load 9(color)
|
||||
18: 7(fvec4) VectorTimesScalar 17 16
|
||||
Store 9(color) 18
|
||||
20: 12(int) Load 19(gl_ViewportIndex)
|
||||
21: 6(float) ConvertSToF 20
|
||||
22: 7(fvec4) Load 9(color)
|
||||
23: 7(fvec4) VectorTimesScalar 22 21
|
||||
Store 9(color) 23
|
||||
Return
|
||||
FunctionEnd
|
10
Test/spv.430.frag
Normal file
10
Test/spv.430.frag
Normal file
@ -0,0 +1,10 @@
|
||||
#version 430 core
|
||||
|
||||
out vec4 color;
|
||||
|
||||
void main()
|
||||
{
|
||||
color = vec4(1.0);
|
||||
color *= gl_Layer;
|
||||
color *= gl_ViewportIndex;
|
||||
}
|
@ -126,6 +126,7 @@ INSTANTIATE_TEST_CASE_P(
|
||||
"spv.400.tesc",
|
||||
"spv.400.tese",
|
||||
"spv.420.geom",
|
||||
"spv.430.frag",
|
||||
"spv.430.vert",
|
||||
"spv.450.tesc",
|
||||
"spv.accessChain.frag",
|
||||
|
Loading…
Reference in New Issue
Block a user