Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2021-11-07 17:43:57 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2021-11-07 19:11:46 +0300
commitf1b411c9e87c4048994a899f2758ef78daa45106 (patch)
tree16029b8a658e76b6e7c22cd8e064079a1246e13c /reference/opt/shaders/vulkan
parent1adc53b107f3432f52d97e979b27189b7b955948 (diff)
GLSL: Deal with buffer_reference_align.
This is somewhat awkward to support, but the best effort we can do here is to analyze various Load/Store opcodes and deduce the ideal overall alignment based on this. This is not a 100% perfect solution, but should be correct for any reasonable use case. Also fix various nitpicks with BDA support while I'm at it.
Diffstat (limited to 'reference/opt/shaders/vulkan')
-rw-r--r--reference/opt/shaders/vulkan/comp/array-of-buffer-reference.nocompat.vk.comp.vk2
-rw-r--r--reference/opt/shaders/vulkan/comp/buffer-reference-atomic.nocompat.vk.comp.vk28
-rw-r--r--reference/opt/shaders/vulkan/comp/buffer-reference-base-alignment-promote.nocompat.vk.comp.vk28
-rw-r--r--reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2-2.nocompat.invalid.vk.comp.vk2
-rw-r--r--reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2.nocompat.vk.comp.vk2
-rw-r--r--reference/opt/shaders/vulkan/comp/buffer-reference-bitcast.nocompat.vk.comp.vk4
-rw-r--r--reference/opt/shaders/vulkan/comp/buffer-reference-decorations.nocompat.vk.comp.vk6
-rw-r--r--reference/opt/shaders/vulkan/comp/buffer-reference.nocompat.vk.comp.vk2
8 files changed, 65 insertions, 9 deletions
diff --git a/reference/opt/shaders/vulkan/comp/array-of-buffer-reference.nocompat.vk.comp.vk b/reference/opt/shaders/vulkan/comp/array-of-buffer-reference.nocompat.vk.comp.vk
index 82ebb960..771d0496 100644
--- a/reference/opt/shaders/vulkan/comp/array-of-buffer-reference.nocompat.vk.comp.vk
+++ b/reference/opt/shaders/vulkan/comp/array-of-buffer-reference.nocompat.vk.comp.vk
@@ -3,7 +3,7 @@
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout(buffer_reference) buffer Block;
-layout(buffer_reference, std430) buffer Block
+layout(buffer_reference, buffer_reference_align = 4, std430) buffer Block
{
float v;
};
diff --git a/reference/opt/shaders/vulkan/comp/buffer-reference-atomic.nocompat.vk.comp.vk b/reference/opt/shaders/vulkan/comp/buffer-reference-atomic.nocompat.vk.comp.vk
new file mode 100644
index 00000000..f5907d3e
--- /dev/null
+++ b/reference/opt/shaders/vulkan/comp/buffer-reference-atomic.nocompat.vk.comp.vk
@@ -0,0 +1,28 @@
+#version 450
+#extension GL_EXT_buffer_reference : require
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+
+layout(buffer_reference) buffer Bar;
+layout(buffer_reference) buffer Foo;
+layout(buffer_reference, buffer_reference_align = 8, std430) buffer Bar
+{
+ uint a;
+ uint b;
+ Foo foo;
+};
+
+layout(buffer_reference, std430) buffer Foo
+{
+ uint v;
+};
+
+layout(push_constant, std430) uniform Push
+{
+ Bar bar;
+} _13;
+
+void main()
+{
+ uint _24 = atomicAdd(_13.bar.b, 1u);
+}
+
diff --git a/reference/opt/shaders/vulkan/comp/buffer-reference-base-alignment-promote.nocompat.vk.comp.vk b/reference/opt/shaders/vulkan/comp/buffer-reference-base-alignment-promote.nocompat.vk.comp.vk
new file mode 100644
index 00000000..a5a66b19
--- /dev/null
+++ b/reference/opt/shaders/vulkan/comp/buffer-reference-base-alignment-promote.nocompat.vk.comp.vk
@@ -0,0 +1,28 @@
+#version 450
+#extension GL_EXT_buffer_reference : require
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+
+layout(buffer_reference) buffer Bar;
+layout(buffer_reference) buffer Foo;
+layout(buffer_reference, buffer_reference_align = 8, std430) buffer Bar
+{
+ uint a;
+ uint b;
+ Foo foo;
+};
+
+layout(buffer_reference, std430) buffer Foo
+{
+ uint v;
+};
+
+layout(push_constant, std430) uniform Push
+{
+ Bar bar;
+} _15;
+
+void main()
+{
+ uint _31 = atomicAdd(_15.bar.a, _15.bar.b);
+}
+
diff --git a/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2-2.nocompat.invalid.vk.comp.vk b/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2-2.nocompat.invalid.vk.comp.vk
index 53c3d21c..20a4f1b4 100644
--- a/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2-2.nocompat.invalid.vk.comp.vk
+++ b/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2-2.nocompat.invalid.vk.comp.vk
@@ -4,7 +4,7 @@
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout(buffer_reference) buffer PtrInt;
-layout(buffer_reference, std430) buffer PtrInt
+layout(buffer_reference, buffer_reference_align = 4, std430) buffer PtrInt
{
int value;
};
diff --git a/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2.nocompat.vk.comp.vk b/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2.nocompat.vk.comp.vk
index 3956304f..5cf6e2df 100644
--- a/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2.nocompat.vk.comp.vk
+++ b/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast-uvec2.nocompat.vk.comp.vk
@@ -4,7 +4,7 @@
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout(buffer_reference) buffer PtrInt;
-layout(buffer_reference, std430) buffer PtrInt
+layout(buffer_reference, buffer_reference_align = 16, std430) buffer PtrInt
{
int value;
};
diff --git a/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast.nocompat.vk.comp.vk b/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast.nocompat.vk.comp.vk
index 5752f81b..8923d21d 100644
--- a/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast.nocompat.vk.comp.vk
+++ b/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast.nocompat.vk.comp.vk
@@ -4,12 +4,12 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout(buffer_reference) buffer PtrUint;
layout(buffer_reference) buffer PtrInt;
-layout(buffer_reference, std430) buffer PtrUint
+layout(buffer_reference, buffer_reference_align = 4, std430) buffer PtrUint
{
uint value;
};
-layout(buffer_reference, std430) buffer PtrInt
+layout(buffer_reference, buffer_reference_align = 16, std430) buffer PtrInt
{
int value;
};
diff --git a/reference/opt/shaders/vulkan/comp/buffer-reference-decorations.nocompat.vk.comp.vk b/reference/opt/shaders/vulkan/comp/buffer-reference-decorations.nocompat.vk.comp.vk
index 5b3cf49e..b7e88062 100644
--- a/reference/opt/shaders/vulkan/comp/buffer-reference-decorations.nocompat.vk.comp.vk
+++ b/reference/opt/shaders/vulkan/comp/buffer-reference-decorations.nocompat.vk.comp.vk
@@ -5,17 +5,17 @@ layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
layout(buffer_reference) buffer RO;
layout(buffer_reference) buffer RW;
layout(buffer_reference) buffer WO;
-layout(buffer_reference, std430) readonly buffer RO
+layout(buffer_reference, buffer_reference_align = 16, std430) readonly buffer RO
{
vec4 v[];
};
-layout(buffer_reference, std430) restrict buffer RW
+layout(buffer_reference, buffer_reference_align = 16, std430) restrict buffer RW
{
vec4 v[];
};
-layout(buffer_reference, std430) coherent writeonly buffer WO
+layout(buffer_reference, buffer_reference_align = 16, std430) coherent writeonly buffer WO
{
vec4 v[];
};
diff --git a/reference/opt/shaders/vulkan/comp/buffer-reference.nocompat.vk.comp.vk b/reference/opt/shaders/vulkan/comp/buffer-reference.nocompat.vk.comp.vk
index b30330cf..de0964b1 100644
--- a/reference/opt/shaders/vulkan/comp/buffer-reference.nocompat.vk.comp.vk
+++ b/reference/opt/shaders/vulkan/comp/buffer-reference.nocompat.vk.comp.vk
@@ -4,7 +4,7 @@
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout(buffer_reference) buffer Node;
-layout(buffer_reference, std430) buffer Node
+layout(buffer_reference, buffer_reference_align = 16, std430) buffer Node
{
layout(offset = 0) int value;
layout(offset = 16) Node next;