mirror of
https://github.com/libretro/RetroArch
synced 2025-01-31 15:32:59 +00:00
420b7913d4
2820ab0b51 Merge pull request #1076 from KhronosGroup/bitcast-pre-330-glsl 63bcbd511e GLSL: Need extension to use bitcast on GLSL < 330. 9f3bebe3d0 Merge pull request #1075 from lifpan/master b11c20fc1d Remove unreasonable assertion for OpTypeImage Sampled parameter. 1a592b7c0f Merge pull request #1067 from cdavis5e/msl-scalar-block-layout 28454facbb MSL: Handle packed matrices. ea5c0ed82f MSL: Fix alignment of packed types. 44f688bf0b Merge pull request #1070 from KhronosGroup/fix-1066 25c74b324e Forget loop variable enables after emitting block chain. 6b010e0cbc Merge pull request #1069 from KhronosGroup/fix-1053 f6f849397e MSL: Re-roll array expressions in initializers. e5fa7edfd6 MSL: Support scalar block layout. git-subtree-dir: deps/SPIRV-Cross git-subtree-split: 2820ab0b51bf5e4187435d904b34e762b988f48b
67 lines
1.9 KiB
Plaintext
67 lines
1.9 KiB
Plaintext
#version 310 es
|
|
#extension GL_OES_shader_image_atomic : require
|
|
layout(local_size_x = 1) in;
|
|
|
|
layout(r32ui, binding = 0) uniform highp uimage2D uImage;
|
|
layout(r32i, binding = 1) uniform highp iimage2D iImage;
|
|
layout(binding = 2, std430) buffer SSBO
|
|
{
|
|
uint u32;
|
|
int i32;
|
|
} ssbo;
|
|
|
|
shared int int_atomic;
|
|
shared uint uint_atomic;
|
|
shared int int_atomic_array[1];
|
|
shared uint uint_atomic_array[1];
|
|
|
|
void main()
|
|
{
|
|
imageAtomicAdd(uImage, ivec2(1, 5), 1u);
|
|
|
|
// Test that we do not invalidate OpImage variables which are loaded from UniformConstant
|
|
// address space.
|
|
imageStore(iImage, ivec2(1, 6), ivec4(imageAtomicAdd(uImage, ivec2(1, 5), 1u)));
|
|
|
|
imageAtomicOr(uImage, ivec2(1, 5), 1u);
|
|
imageAtomicXor(uImage, ivec2(1, 5), 1u);
|
|
imageAtomicAnd(uImage, ivec2(1, 5), 1u);
|
|
imageAtomicMin(uImage, ivec2(1, 5), 1u);
|
|
imageAtomicMax(uImage, ivec2(1, 5), 1u);
|
|
//imageAtomicExchange(uImage, ivec2(1, 5), 1u);
|
|
imageAtomicCompSwap(uImage, ivec2(1, 5), 10u, 2u);
|
|
|
|
imageAtomicAdd(iImage, ivec2(1, 6), 1);
|
|
imageAtomicOr(iImage, ivec2(1, 6), 1);
|
|
imageAtomicXor(iImage, ivec2(1, 6), 1);
|
|
imageAtomicAnd(iImage, ivec2(1, 6), 1);
|
|
imageAtomicMin(iImage, ivec2(1, 6), 1);
|
|
imageAtomicMax(iImage, ivec2(1, 6), 1);
|
|
//imageAtomicExchange(iImage, ivec2(1, 5), 1u);
|
|
imageAtomicCompSwap(iImage, ivec2(1, 5), 10, 2);
|
|
|
|
atomicAdd(ssbo.u32, 1u);
|
|
atomicOr(ssbo.u32, 1u);
|
|
atomicXor(ssbo.u32, 1u);
|
|
atomicAnd(ssbo.u32, 1u);
|
|
atomicMin(ssbo.u32, 1u);
|
|
atomicMax(ssbo.u32, 1u);
|
|
atomicExchange(ssbo.u32, 1u);
|
|
atomicCompSwap(ssbo.u32, 10u, 2u);
|
|
|
|
atomicAdd(ssbo.i32, 1);
|
|
atomicOr(ssbo.i32, 1);
|
|
atomicXor(ssbo.i32, 1);
|
|
atomicAnd(ssbo.i32, 1);
|
|
atomicMin(ssbo.i32, 1);
|
|
atomicMax(ssbo.i32, 1);
|
|
atomicExchange(ssbo.i32, 1);
|
|
atomicCompSwap(ssbo.i32, 10, 2);
|
|
|
|
atomicAdd(int_atomic, 10);
|
|
atomicAdd(uint_atomic, 10u);
|
|
atomicAdd(int_atomic_array[0], 10);
|
|
atomicAdd(uint_atomic_array[0], 10u);
|
|
}
|
|
|