diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-11-07 17:43:57 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-11-07 19:11:46 +0300 |
commit | f1b411c9e87c4048994a899f2758ef78daa45106 (patch) | |
tree | 16029b8a658e76b6e7c22cd8e064079a1246e13c /reference/opt/shaders/vulkan | |
parent | 1adc53b107f3432f52d97e979b27189b7b955948 (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')
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; |