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:
#ifdef AMD_EXTENSIONS
spv::Id getExtBuiltins(const char* name);
#endif
void addPre13Extension(const char* ext)
{
if (builder.getSpvVersion() < 0x00010300)
builder.addExtension(ext);
}
glslang::SpvOptions& options;
spv::Function* shaderEntry;
......@@ -507,17 +512,17 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case glslang::EbvInstanceIndex: return spv::BuiltInInstanceIndex;
case glslang::EbvBaseVertex:
builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInBaseVertex;
case glslang::EbvBaseInstance:
builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInBaseInstance;
case glslang::EbvDrawId:
builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInDrawIndex;
......@@ -654,12 +659,12 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
#endif
case glslang::EbvDeviceIndex:
builder.addExtension(spv::E_SPV_KHR_device_group);
addPre13Extension(spv::E_SPV_KHR_device_group);
builder.addCapability(spv::CapabilityDeviceGroup);
return spv::BuiltInDeviceIndex;
case glslang::EbvViewIndex:
builder.addExtension(spv::E_SPV_KHR_multiview);
addPre13Extension(spv::E_SPV_KHR_multiview);
builder.addCapability(spv::CapabilityMultiView);
return spv::BuiltInViewIndex;
......@@ -847,7 +852,7 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
}
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;
}
......@@ -2361,13 +2366,13 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
node->getType().containsBasicType(glslang::EbtUint16);
if (contains16BitType) {
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);
} else if (storageClass == spv::StorageClassPushConstant) {
builder.addExtension(spv::E_SPV_KHR_16bit_storage);
addPre13Extension(spv::E_SPV_KHR_16bit_storage);
builder.addCapability(spv::CapabilityStoragePushConstant16);
} else if (storageClass == spv::StorageClassUniform) {
builder.addExtension(spv::E_SPV_KHR_16bit_storage);
addPre13Extension(spv::E_SPV_KHR_16bit_storage);
builder.addCapability(spv::CapabilityStorageUniform16);
if (node->getType().getQualifier().storage == glslang::EvqBuffer)
builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
......
......@@ -5,7 +5,6 @@ spv.deviceGroup.frag
Capability Shader
Capability DeviceGroup
Extension "SPV_KHR_device_group"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 12
......
......@@ -5,7 +5,6 @@ spv.drawParams.vert
Capability Shader
Capability DrawParameters
Extension "SPV_KHR_shader_draw_parameters"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 10 13 16 21
......
......@@ -10,7 +10,6 @@ spv.explicittypes.frag
Capability Int16
Capability Int8
Capability StorageUniform16
Extension "SPV_KHR_16bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
......
......@@ -5,7 +5,6 @@ spv.multiView.frag
Capability Shader
Capability MultiView
Extension "SPV_KHR_multiview"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 12
......
......@@ -10,7 +10,6 @@ spv.vulkan110.int16.frag
Capability Int16
Capability Int8
Capability StorageUniform16
Extension "SPV_KHR_16bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
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(
"spv.subgroupShuffleRelative.comp",
"spv.subgroupQuad.comp",
"spv.subgroupVote.comp",
"spv.vulkan110.storageBuffer.vert",
})),
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