Commit f35d2569 by John Kessenich

SPV: Don't emit extensions for SPIR-V 1.3 incorporated extensions.

These are conditional now on which target environment is requested.
parent ae3be767
...@@ -194,6 +194,11 @@ protected: ...@@ -194,6 +194,11 @@ protected:
#ifdef AMD_EXTENSIONS #ifdef AMD_EXTENSIONS
spv::Id getExtBuiltins(const char* name); spv::Id getExtBuiltins(const char* name);
#endif #endif
void addPre13Extension(const char* ext)
{
if (builder.getSpvVersion() < 0x00010300)
builder.addExtension(ext);
}
glslang::SpvOptions& options; glslang::SpvOptions& options;
spv::Function* shaderEntry; spv::Function* shaderEntry;
...@@ -507,17 +512,17 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI ...@@ -507,17 +512,17 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case glslang::EbvInstanceIndex: return spv::BuiltInInstanceIndex; case glslang::EbvInstanceIndex: return spv::BuiltInInstanceIndex;
case glslang::EbvBaseVertex: case glslang::EbvBaseVertex:
builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters); addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
builder.addCapability(spv::CapabilityDrawParameters); builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInBaseVertex; return spv::BuiltInBaseVertex;
case glslang::EbvBaseInstance: case glslang::EbvBaseInstance:
builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters); addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
builder.addCapability(spv::CapabilityDrawParameters); builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInBaseInstance; return spv::BuiltInBaseInstance;
case glslang::EbvDrawId: case glslang::EbvDrawId:
builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters); addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
builder.addCapability(spv::CapabilityDrawParameters); builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInDrawIndex; return spv::BuiltInDrawIndex;
...@@ -654,12 +659,12 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI ...@@ -654,12 +659,12 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
#endif #endif
case glslang::EbvDeviceIndex: case glslang::EbvDeviceIndex:
builder.addExtension(spv::E_SPV_KHR_device_group); addPre13Extension(spv::E_SPV_KHR_device_group);
builder.addCapability(spv::CapabilityDeviceGroup); builder.addCapability(spv::CapabilityDeviceGroup);
return spv::BuiltInDeviceIndex; return spv::BuiltInDeviceIndex;
case glslang::EbvViewIndex: case glslang::EbvViewIndex:
builder.addExtension(spv::E_SPV_KHR_multiview); addPre13Extension(spv::E_SPV_KHR_multiview);
builder.addCapability(spv::CapabilityMultiView); builder.addCapability(spv::CapabilityMultiView);
return spv::BuiltInViewIndex; return spv::BuiltInViewIndex;
...@@ -847,7 +852,7 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T ...@@ -847,7 +852,7 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
} }
if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) { if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
builder.addExtension(spv::E_SPV_KHR_storage_buffer_storage_class); addPre13Extension(spv::E_SPV_KHR_storage_buffer_storage_class);
return spv::StorageClassStorageBuffer; return spv::StorageClassStorageBuffer;
} }
...@@ -2361,13 +2366,13 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* ...@@ -2361,13 +2366,13 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
node->getType().containsBasicType(glslang::EbtUint16); node->getType().containsBasicType(glslang::EbtUint16);
if (contains16BitType) { if (contains16BitType) {
if (storageClass == spv::StorageClassInput || storageClass == spv::StorageClassOutput) { if (storageClass == spv::StorageClassInput || storageClass == spv::StorageClassOutput) {
builder.addExtension(spv::E_SPV_KHR_16bit_storage); addPre13Extension(spv::E_SPV_KHR_16bit_storage);
builder.addCapability(spv::CapabilityStorageInputOutput16); builder.addCapability(spv::CapabilityStorageInputOutput16);
} else if (storageClass == spv::StorageClassPushConstant) { } else if (storageClass == spv::StorageClassPushConstant) {
builder.addExtension(spv::E_SPV_KHR_16bit_storage); addPre13Extension(spv::E_SPV_KHR_16bit_storage);
builder.addCapability(spv::CapabilityStoragePushConstant16); builder.addCapability(spv::CapabilityStoragePushConstant16);
} else if (storageClass == spv::StorageClassUniform) { } else if (storageClass == spv::StorageClassUniform) {
builder.addExtension(spv::E_SPV_KHR_16bit_storage); addPre13Extension(spv::E_SPV_KHR_16bit_storage);
builder.addCapability(spv::CapabilityStorageUniform16); builder.addCapability(spv::CapabilityStorageUniform16);
if (node->getType().getQualifier().storage == glslang::EvqBuffer) if (node->getType().getQualifier().storage == glslang::EvqBuffer)
builder.addCapability(spv::CapabilityStorageUniformBufferBlock16); builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
......
...@@ -5,7 +5,6 @@ spv.deviceGroup.frag ...@@ -5,7 +5,6 @@ spv.deviceGroup.frag
Capability Shader Capability Shader
Capability DeviceGroup Capability DeviceGroup
Extension "SPV_KHR_device_group"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 12 EntryPoint Fragment 4 "main" 9 12
......
...@@ -5,7 +5,6 @@ spv.drawParams.vert ...@@ -5,7 +5,6 @@ spv.drawParams.vert
Capability Shader Capability Shader
Capability DrawParameters Capability DrawParameters
Extension "SPV_KHR_shader_draw_parameters"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 10 13 16 21 EntryPoint Vertex 4 "main" 10 13 16 21
......
...@@ -10,7 +10,6 @@ spv.explicittypes.frag ...@@ -10,7 +10,6 @@ spv.explicittypes.frag
Capability Int16 Capability Int16
Capability Int8 Capability Int8
Capability StorageUniform16 Capability StorageUniform16
Extension "SPV_KHR_16bit_storage"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" EntryPoint Fragment 4 "main"
......
...@@ -5,7 +5,6 @@ spv.multiView.frag ...@@ -5,7 +5,6 @@ spv.multiView.frag
Capability Shader Capability Shader
Capability MultiView Capability MultiView
Extension "SPV_KHR_multiview"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 12 EntryPoint Fragment 4 "main" 9 12
......
...@@ -10,7 +10,6 @@ spv.vulkan110.int16.frag ...@@ -10,7 +10,6 @@ spv.vulkan110.int16.frag
Capability Int16 Capability Int16
Capability Int8 Capability Int8
Capability StorageUniform16 Capability StorageUniform16
Extension "SPV_KHR_16bit_storage"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" EntryPoint Fragment 4 "main"
......
spv.vulkan110.storageBuffer.vert
// Module Version 10300
// Generated by (magic number): 80004
// Id's are bound by 31
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 13
Source GLSL 450
Name 4 "main"
Name 11 "gl_PerVertex"
MemberName 11(gl_PerVertex) 0 "gl_Position"
MemberName 11(gl_PerVertex) 1 "gl_PointSize"
MemberName 11(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 11(gl_PerVertex) 3 "gl_CullDistance"
Name 13 ""
Name 16 "ub"
MemberName 16(ub) 0 "a"
Name 18 "ubi"
Name 22 "bb"
MemberName 22(bb) 0 "b"
Name 24 "bbi"
MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 11(gl_PerVertex) Block
MemberDecorate 16(ub) 0 Offset 0
Decorate 16(ub) Block
Decorate 18(ubi) DescriptorSet 0
MemberDecorate 22(bb) 0 Offset 0
Decorate 22(bb) Block
Decorate 24(bbi) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeInt 32 0
9: 8(int) Constant 1
10: TypeArray 6(float) 9
11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10
12: TypePointer Output 11(gl_PerVertex)
13: 12(ptr) Variable Output
14: TypeInt 32 1
15: 14(int) Constant 0
16(ub): TypeStruct 7(fvec4)
17: TypePointer Uniform 16(ub)
18(ubi): 17(ptr) Variable Uniform
19: TypePointer Uniform 7(fvec4)
22(bb): TypeStruct 7(fvec4)
23: TypePointer StorageBuffer 22(bb)
24(bbi): 23(ptr) Variable StorageBuffer
25: TypePointer StorageBuffer 7(fvec4)
29: TypePointer Output 7(fvec4)
4(main): 2 Function None 3
5: Label
20: 19(ptr) AccessChain 18(ubi) 15
21: 7(fvec4) Load 20
26: 25(ptr) AccessChain 24(bbi) 15
27: 7(fvec4) Load 26
28: 7(fvec4) FAdd 21 27
30: 29(ptr) AccessChain 13 15
Store 30 28
Return
FunctionEnd
#version 450
#pragma use_storage_buffer
uniform ub {
vec4 a;
} ubi;
buffer bb {
vec4 b;
} bbi;
void main()
{
gl_Position = ubi.a + bbi.b;
}
...@@ -370,6 +370,7 @@ INSTANTIATE_TEST_CASE_P( ...@@ -370,6 +370,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.subgroupShuffleRelative.comp", "spv.subgroupShuffleRelative.comp",
"spv.subgroupQuad.comp", "spv.subgroupQuad.comp",
"spv.subgroupVote.comp", "spv.subgroupVote.comp",
"spv.vulkan110.storageBuffer.vert",
})), })),
FileNameAsCustomTestSuffix FileNameAsCustomTestSuffix
); );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment