SPV_KHR_physical_storage_buffer/SPV: Add GL_EXT_buffer_reference_uvec2
Adds uvec2 <-> reference constructor support.
Switches from EXT to KHR for physical_storage_buffer.
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
index 1140bef..ac26a05 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -40,7 +40,7 @@
static const char* const E_SPV_KHR_storage_buffer_storage_class = "SPV_KHR_storage_buffer_storage_class";
static const char* const E_SPV_KHR_post_depth_coverage = "SPV_KHR_post_depth_coverage";
static const char* const E_SPV_KHR_vulkan_memory_model = "SPV_KHR_vulkan_memory_model";
-static const char* const E_SPV_EXT_physical_storage_buffer = "SPV_EXT_physical_storage_buffer";
+static const char* const E_SPV_KHR_physical_storage_buffer = "SPV_KHR_physical_storage_buffer";
static const char* const E_SPV_EXT_fragment_shader_interlock = "SPV_EXT_fragment_shader_interlock";
static const char* const E_SPV_KHR_shader_clock = "SPV_KHR_shader_clock";
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 73689b8..afb405e 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1399,7 +1399,7 @@
if (glslangIntermediate->usingPhysicalStorageBuffer()) {
addressingModel = spv::AddressingModelPhysicalStorageBuffer64EXT;
- builder.addIncorporatedExtension(spv::E_SPV_EXT_physical_storage_buffer, spv::Spv_1_5);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_physical_storage_buffer, spv::Spv_1_5);
builder.addCapability(spv::CapabilityPhysicalStorageBufferAddressesEXT);
};
if (glslangIntermediate->usingVulkanMemoryModel()) {
@@ -6273,6 +6273,10 @@
case glslang::EOpConvPtrToUint64:
convOp = spv::OpConvertPtrToU;
break;
+ case glslang::EOpConvPtrToUvec2:
+ case glslang::EOpConvUvec2ToPtr:
+ convOp = spv::OpBitcast;
+ break;
#endif
default:
diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out
index 6e50c70..8457eac 100644
--- a/Test/baseResults/spv.bufferhandle1.frag.out
+++ b/Test/baseResults/spv.bufferhandle1.frag.out
@@ -6,7 +6,7 @@
Capability Shader
Capability VulkanMemoryModelKHR
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
Extension "SPV_KHR_vulkan_memory_model"
1: ExtInstImport "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out
index a95dc71..871b017 100644
--- a/Test/baseResults/spv.bufferhandle10.frag.out
+++ b/Test/baseResults/spv.bufferhandle10.frag.out
@@ -6,7 +6,7 @@
Capability Shader
Capability VulkanMemoryModelKHR
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
Extension "SPV_KHR_vulkan_memory_model"
1: ExtInstImport "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out
index 3469715..6f3cbe1 100644
--- a/Test/baseResults/spv.bufferhandle11.frag.out
+++ b/Test/baseResults/spv.bufferhandle11.frag.out
@@ -9,8 +9,8 @@
Capability Shader
Capability StorageBuffer8BitAccess
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
Extension "SPV_KHR_8bit_storage"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out
index 6c20f02..1808c5f 100644
--- a/Test/baseResults/spv.bufferhandle12.frag.out
+++ b/Test/baseResults/spv.bufferhandle12.frag.out
@@ -9,8 +9,8 @@
Capability Shader
Capability StorageUniformBufferBlock16
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
Extension "SPV_KHR_16bit_storage"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out
index 1231cf6..7b83210 100644
--- a/Test/baseResults/spv.bufferhandle13.frag.out
+++ b/Test/baseResults/spv.bufferhandle13.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out
index 940793d..b44391a 100644
--- a/Test/baseResults/spv.bufferhandle14.frag.out
+++ b/Test/baseResults/spv.bufferhandle14.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
EntryPoint Fragment 4 "main"
diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out
index ec7064d..2eae28b 100644
--- a/Test/baseResults/spv.bufferhandle15.frag.out
+++ b/Test/baseResults/spv.bufferhandle15.frag.out
@@ -8,7 +8,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out
index 16e69d1..2355591 100644
--- a/Test/baseResults/spv.bufferhandle16.frag.out
+++ b/Test/baseResults/spv.bufferhandle16.frag.out
@@ -6,7 +6,7 @@
Capability Shader
Capability Int64
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
EntryPoint Fragment 4 "main"
diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out
index 567295d..6d2178d 100644
--- a/Test/baseResults/spv.bufferhandle18.frag.out
+++ b/Test/baseResults/spv.bufferhandle18.frag.out
@@ -6,7 +6,7 @@
Capability Shader
Capability Int64
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
EntryPoint Fragment 4 "main"
diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out
index 8fee6db..728bee3 100644
--- a/Test/baseResults/spv.bufferhandle2.frag.out
+++ b/Test/baseResults/spv.bufferhandle2.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out
index c02c34c..b888fe4 100644
--- a/Test/baseResults/spv.bufferhandle3.frag.out
+++ b/Test/baseResults/spv.bufferhandle3.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out
index 3f568b0..e5a4f5d 100644
--- a/Test/baseResults/spv.bufferhandle4.frag.out
+++ b/Test/baseResults/spv.bufferhandle4.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out
index 3f1d214..c663c42 100644
--- a/Test/baseResults/spv.bufferhandle5.frag.out
+++ b/Test/baseResults/spv.bufferhandle5.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
EntryPoint Fragment 4 "main"
diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out
index 866741f..2a9b484 100644
--- a/Test/baseResults/spv.bufferhandle6.frag.out
+++ b/Test/baseResults/spv.bufferhandle6.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out
index d09eded..c5bbc5d 100644
--- a/Test/baseResults/spv.bufferhandle7.frag.out
+++ b/Test/baseResults/spv.bufferhandle7.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out
index c37fa3f..3219734 100644
--- a/Test/baseResults/spv.bufferhandle8.frag.out
+++ b/Test/baseResults/spv.bufferhandle8.frag.out
@@ -5,7 +5,7 @@
Capability Shader
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out
index 5b91eda..df2b677 100644
--- a/Test/baseResults/spv.bufferhandle9.frag.out
+++ b/Test/baseResults/spv.bufferhandle9.frag.out
@@ -6,7 +6,7 @@
Capability Shader
Capability Int64
Capability PhysicalStorageBufferAddressesEXT
- Extension "SPV_EXT_physical_storage_buffer"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out
new file mode 100755
index 0000000..1e0cbcd
--- /dev/null
+++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out
@@ -0,0 +1,133 @@
+spv.bufferhandleUvec2.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 71
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main" 16 19
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_buffer_reference_uvec2"
+ Name 4 "main"
+ Name 8 "blockType"
+ MemberName 8(blockType) 0 "a"
+ MemberName 8(blockType) 1 "b"
+ MemberName 8(blockType) 2 "c"
+ MemberName 8(blockType) 3 "d"
+ MemberName 8(blockType) 4 "e"
+ Name 13 "b1"
+ Name 16 "h"
+ Name 19 "i"
+ Name 34 "b2"
+ Name 37 "b3"
+ Name 46 "j"
+ Name 54 "carry"
+ Name 55 "ResType"
+ Name 68 "t2"
+ MemberName 68(t2) 0 "f"
+ MemberName 68(t2) 1 "g"
+ Name 70 "t"
+ MemberDecorate 8(blockType) 0 Offset 0
+ MemberDecorate 8(blockType) 1 Offset 4
+ MemberDecorate 8(blockType) 2 Offset 8
+ MemberDecorate 8(blockType) 3 Offset 12
+ MemberDecorate 8(blockType) 4 Offset 16
+ Decorate 8(blockType) Block
+ Decorate 13(b1) DecorationAliasedPointerEXT
+ Decorate 16(h) Flat
+ Decorate 19(i) Flat
+ Decorate 34(b2) DecorationAliasedPointerEXT
+ Decorate 37(b3) DecorationAliasedPointerEXT
+ MemberDecorate 68(t2) 0 Offset 0
+ MemberDecorate 68(t2) 1 Offset 8
+ Decorate 68(t2) Block
+ Decorate 70(t) DescriptorSet 0
+ Decorate 70(t) Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ 8(blockType): TypeStruct 7(int) 7(int) 7(int) 7(int) 7(int)
+ 6: TypePointer PhysicalStorageBufferEXT 8(blockType)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 2
+ 11: TypeArray 6(ptr) 10
+ 12: TypePointer Function 11
+ 14: TypeVector 9(int) 2
+ 15: TypePointer Input 14(ivec2)
+ 16(h): 15(ptr) Variable Input
+ 19(i): 15(ptr) Variable Input
+ 23: 7(int) Constant 0
+ 24: TypePointer Function 6(ptr)
+ 27: 7(int) Constant 1
+ 30: TypePointer PhysicalStorageBufferEXT 7(int)
+ 45: TypePointer Function 14(ivec2)
+ 49: 9(int) Constant 0
+ 50: TypePointer Function 9(int)
+ 53: 9(int) Constant 256
+ 55(ResType): TypeStruct 9(int) 9(int)
+ 61: 9(int) Constant 1
+ 68(t2): TypeStruct 6(ptr) 6(ptr)
+ 69: TypePointer StorageBuffer 68(t2)
+ 70(t): 69(ptr) Variable StorageBuffer
+ 4(main): 2 Function None 3
+ 5: Label
+ 13(b1): 12(ptr) Variable Function
+ 34(b2): 24(ptr) Variable Function
+ 37(b3): 24(ptr) Variable Function
+ 46(j): 45(ptr) Variable Function
+ 54(carry): 50(ptr) Variable Function
+ 17: 14(ivec2) Load 16(h)
+ 18: 6(ptr) Bitcast 17
+ 20: 14(ivec2) Load 19(i)
+ 21: 6(ptr) Bitcast 20
+ 22: 11 CompositeConstruct 18 21
+ Store 13(b1) 22
+ 25: 24(ptr) AccessChain 13(b1) 23
+ 26: 6(ptr) Load 25
+ 28: 24(ptr) AccessChain 13(b1) 27
+ 29: 6(ptr) Load 28
+ 31: 30(ptr) AccessChain 29 27
+ 32: 7(int) Load 31 Aligned 4
+ 33: 30(ptr) AccessChain 26 23
+ Store 33 32 Aligned 16
+ 35: 14(ivec2) Load 16(h)
+ 36: 6(ptr) Bitcast 35
+ Store 34(b2) 36
+ 38: 14(ivec2) Load 19(i)
+ 39: 6(ptr) Bitcast 38
+ Store 37(b3) 39
+ 40: 6(ptr) Load 34(b2)
+ 41: 6(ptr) Load 37(b3)
+ 42: 30(ptr) AccessChain 41 27
+ 43: 7(int) Load 42 Aligned 4
+ 44: 30(ptr) AccessChain 40 23
+ Store 44 43 Aligned 16
+ 47: 6(ptr) Load 34(b2)
+ 48: 14(ivec2) Bitcast 47
+ Store 46(j) 48
+ 51: 50(ptr) AccessChain 46(j) 49
+ 52: 9(int) Load 51
+ 56: 55(ResType) IAddCarry 52 53
+ 57: 9(int) CompositeExtract 56 1
+ Store 54(carry) 57
+ 58: 9(int) CompositeExtract 56 0
+ 59: 50(ptr) AccessChain 46(j) 49
+ Store 59 58
+ 60: 9(int) Load 54(carry)
+ 62: 50(ptr) AccessChain 46(j) 61
+ 63: 9(int) Load 62
+ 64: 9(int) IAdd 63 60
+ 65: 50(ptr) AccessChain 46(j) 61
+ Store 65 64
+ 66: 14(ivec2) Load 46(j)
+ 67: 6(ptr) Bitcast 66
+ Store 34(b2) 67
+ Return
+ FunctionEnd
diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out
index acdcbc4..976c59f 100644
--- a/Test/baseResults/spv.coopmat.comp.out
+++ b/Test/baseResults/spv.coopmat.comp.out
@@ -9,8 +9,8 @@
Capability VulkanMemoryModelKHR
Capability PhysicalStorageBufferAddressesEXT
Capability CooperativeMatrixNV
- Extension "SPV_EXT_physical_storage_buffer"
Extension "SPV_KHR_16bit_storage"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
Extension "SPV_KHR_vulkan_memory_model"
Extension "SPV_NV_cooperative_matrix"
diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out
index 06f5623..a854ed5 100644
--- a/Test/baseResults/spv.intcoopmat.comp.out
+++ b/Test/baseResults/spv.intcoopmat.comp.out
@@ -10,8 +10,8 @@
Capability VulkanMemoryModelKHR
Capability PhysicalStorageBufferAddressesEXT
Capability CooperativeMatrixNV
- Extension "SPV_EXT_physical_storage_buffer"
Extension "SPV_KHR_8bit_storage"
+ Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_storage_buffer_storage_class"
Extension "SPV_KHR_vulkan_memory_model"
Extension "SPV_NV_cooperative_matrix"
diff --git a/Test/spv.bufferhandleUvec2.frag b/Test/spv.bufferhandleUvec2.frag
new file mode 100644
index 0000000..bc86822
--- /dev/null
+++ b/Test/spv.bufferhandleUvec2.frag
@@ -0,0 +1,32 @@
+#version 450
+
+#extension GL_EXT_buffer_reference_uvec2 : enable
+
+layout(buffer_reference, std430) buffer blockType {
+ layout(offset = 0) int a;
+ layout(offset = 4) int b;
+ layout(offset = 8) int c;
+ layout(offset = 12) int d;
+ layout(offset = 16) int e;
+};
+
+layout(std430) buffer t2 {
+ blockType f;
+ blockType g;
+} t;
+
+flat in uvec2 h, i;
+
+void main() {
+
+ blockType b1[2] = blockType[2](blockType(h), blockType(i));
+ b1[0].a = b1[1].b;
+ blockType b2 = blockType(h);
+ blockType b3 = blockType(i);
+ b2.a = b3.b;
+ uvec2 j = uvec2(b2);
+ uint carry;
+ j.x = uaddCarry(j.x, 256, carry);
+ j.y += carry;
+ b2 = blockType(j);
+}
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 3a7405a..b599a90 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -275,6 +275,10 @@
EOpConvUint64ToPtr,
EOpConvPtrToUint64,
+ // uvec2 <-> pointer
+ EOpConvUvec2ToPtr,
+ EOpConvPtrToUvec2,
+
//
// binary operations
//
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 14f5160..17b6fe8 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -6941,6 +6941,12 @@
break;
case EOpConstructUVec2:
+ if (node->getType().getBasicType() == EbtReference) {
+ requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "reference conversion to uvec2");
+ TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUvec2, true, node,
+ type);
+ return newNode;
+ }
case EOpConstructUVec3:
case EOpConstructUVec4:
case EOpConstructUint:
@@ -7098,7 +7104,15 @@
return newNode;
// construct reference from uint64
} else if (node->getType().isScalar() && node->getType().getBasicType() == EbtUint64) {
- TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToPtr, true, node, type);
+ TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToPtr, true, node,
+ type);
+ return newNode;
+ // construct reference from uvec2
+ } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint &&
+ node->getVectorSize() == 2) {
+ requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "uvec2 conversion to reference");
+ TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToPtr, true, node,
+ type);
return newNode;
} else {
return nullptr;
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index df053b0..644acb1 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -214,6 +214,7 @@
extensionBehavior[E_GL_EXT_fragment_invocation_density] = EBhDisable;
extensionBehavior[E_GL_EXT_buffer_reference] = EBhDisable;
extensionBehavior[E_GL_EXT_buffer_reference2] = EBhDisable;
+ extensionBehavior[E_GL_EXT_buffer_reference_uvec2] = EBhDisable;
extensionBehavior[E_GL_EXT_demote_to_helper_invocation] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_16bit_storage] = EBhDisable;
@@ -404,6 +405,7 @@
"#define GL_EXT_fragment_invocation_density 1\n"
"#define GL_EXT_buffer_reference 1\n"
"#define GL_EXT_buffer_reference2 1\n"
+ "#define GL_EXT_buffer_reference_uvec2 1\n"
"#define GL_EXT_demote_to_helper_invocation 1\n"
// GL_KHR_shader_subgroup
@@ -833,7 +835,8 @@
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
else if (strcmp(extension, "GL_NV_shader_subgroup_partitioned") == 0)
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
- else if (strcmp(extension, "GL_EXT_buffer_reference2") == 0)
+ else if (strcmp(extension, "GL_EXT_buffer_reference2") == 0 ||
+ strcmp(extension, "GL_EXT_buffer_reference_uvec2") == 0)
updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString);
else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0)
updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString);
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 05ba5d7..fae04f4 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -174,6 +174,7 @@
const char* const E_GL_EXT_fragment_invocation_density = "GL_EXT_fragment_invocation_density";
const char* const E_GL_EXT_buffer_reference = "GL_EXT_buffer_reference";
const char* const E_GL_EXT_buffer_reference2 = "GL_EXT_buffer_reference2";
+const char* const E_GL_EXT_buffer_reference_uvec2 = "GL_EXT_buffer_reference_uvec2";
const char* const E_GL_EXT_demote_to_helper_invocation = "GL_EXT_demote_to_helper_invocation";
const char* const E_GL_EXT_shader_realtime_clock = "GL_EXT_shader_realtime_clock";
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 7ec1e40..d0c0751 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -284,6 +284,7 @@
"spv.bufferhandle7.frag",
"spv.bufferhandle8.frag",
"spv.bufferhandle9.frag",
+ "spv.bufferhandleUvec2.frag",
"spv.bufferhandle_Error.frag",
"spv.builtInXFB.vert",
"spv.conditionalDemote.frag",
diff --git a/known_good.json b/known_good.json
index 9946335..6a13907 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
"site" : "github",
"subrepo" : "KhronosGroup/SPIRV-Tools",
"subdir" : "External/spirv-tools",
- "commit" : "9b3cc3e05337358d0bd9fec1b7a51e3cbf55312b"
+ "commit" : "bbb29870b510f83f99994358179c9ea6838c3100"
},
{
"name" : "spirv-tools/external/spirv-headers",
"site" : "github",
"subrepo" : "KhronosGroup/SPIRV-Headers",
"subdir" : "External/spirv-tools/external/spirv-headers",
- "commit" : "38cafab379e5d16137cb97a485b9385191039b92"
+ "commit" : "601d738723ac381741311c6c98c36d6170be14a2"
}
]
}