yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
48702616
main
1#version 430 2 3#extension GL_NV_shader_atomic_fp16_vector : enable 4#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable 5 6layout (binding = 0 )buffer Buffer 7{ 8f16vec2 dataf16v2 ; 9f16vec4 dataf16v4 ; 10 11f16vec2 resf16v2 ; 12f16vec4 resf16v4 ; 13 14}buf ; 15 16layout (binding = 0 ,rg16f )volatile coherent uniform image1D fimage1D ; 17layout (binding = 1 ,rg16f )volatile coherent uniform image1DArray fimage1DArray ; 18layout (binding = 2 ,rg16f )volatile coherent uniform image2D fimage2D ; 19layout (binding = 3 ,rg16f )volatile coherent uniform image2DArray fimage2DArray ; 20layout (binding = 5 ,rg16f )volatile coherent uniform imageCube fimageCube ; 21layout (binding = 6 ,rg16f )volatile coherent uniform imageCubeArray fimageCubeArray ; 22layout (binding = 9 ,rg16f )volatile coherent uniform image3D fimage3D ; 23 24layout (binding = 10 ,rgba16f )volatile coherent uniform image1D fimage1Dv4 ; 25layout (binding = 11 ,rgba16f )volatile coherent uniform image1DArray fimage1DArrayv4 ; 26layout (binding = 12 ,rgba16f )volatile coherent uniform image2D fimage2Dv4 ; 27layout (binding = 13 ,rgba16f )volatile coherent uniform image2DArray fimage2DArrayv4 ; 28layout (binding = 15 ,rgba16f )volatile coherent uniform imageCube fimageCubev4 ; 29layout (binding = 16 ,rgba16f )volatile coherent uniform imageCubeArray fimageCubeArrayv4 ; 30layout (binding = 19 ,rgba16f )volatile coherent uniform image3D fimage3Dv4 ; 31 32void main () 33{ 34// atomic* functions supported with f16vec2 35buf .resf16v2 = atomicAdd (buf .dataf16v2 ,f16vec2 (3 )); 36buf .resf16v2 += atomicMin (buf .dataf16v2 ,f16vec2 (3 )); 37buf .resf16v2 += atomicMax (buf .dataf16v2 ,f16vec2 (3 )); 38buf .resf16v2 += atomicExchange (buf .dataf16v2 ,f16vec2 (3 )); 39 40// atomic* functions supported with f16vec4 41buf .resf16v4 = atomicAdd (buf .dataf16v4 ,f16vec4 (3 )); 42buf .resf16v4 += atomicMin (buf .dataf16v4 ,f16vec4 (3 )); 43buf .resf16v4 += atomicMax (buf .dataf16v4 ,f16vec4 (3 )); 44buf .resf16v4 += atomicExchange (buf .dataf16v4 ,f16vec4 (3 )); 45 46// imageAtomic* functions supported with f16vec2 and only format supported is rg16f 47f16vec2 constVec2 = f16vec2 (2.0 ); 48buf .resf16v2 += imageAtomicAdd (fimage1D ,int (0 ),constVec2 ); 49buf .resf16v2 += imageAtomicAdd (fimage1DArray ,ivec2 (0 ,0 ),constVec2 ); 50buf .resf16v2 += imageAtomicAdd (fimage2D ,ivec2 (0 ,0 ),constVec2 ); 51buf .resf16v2 += imageAtomicAdd (fimage2DArray ,ivec3 (0 ,0 ,0 ),constVec2 ); 52buf .resf16v2 += imageAtomicAdd (fimageCube ,ivec3 (0 ,0 ,0 ),constVec2 ); 53buf .resf16v2 += imageAtomicAdd (fimageCubeArray ,ivec3 (0 ,0 ,0 ),constVec2 ); 54buf .resf16v2 += imageAtomicAdd (fimage3D ,ivec3 (0 ,0 ,0 ),constVec2 ); 55 56buf .resf16v2 += imageAtomicMin (fimage1D ,int (0 ),constVec2 ); 57buf .resf16v2 += imageAtomicMin (fimage1DArray ,ivec2 (0 ,0 ),constVec2 ); 58buf .resf16v2 += imageAtomicMin (fimage2D ,ivec2 (0 ,0 ),constVec2 ); 59buf .resf16v2 += imageAtomicMin (fimage2DArray ,ivec3 (0 ,0 ,0 ),constVec2 ); 60buf .resf16v2 += imageAtomicMin (fimageCube ,ivec3 (0 ,0 ,0 ),constVec2 ); 61buf .resf16v2 += imageAtomicMin (fimageCubeArray ,ivec3 (0 ,0 ,0 ),constVec2 ); 62buf .resf16v2 += imageAtomicMin (fimage3D ,ivec3 (0 ,0 ,0 ),constVec2 ); 63 64buf .resf16v2 += imageAtomicMax (fimage1D ,int (0 ),constVec2 ); 65buf .resf16v2 += imageAtomicMax (fimage1DArray ,ivec2 (0 ,0 ),constVec2 ); 66buf .resf16v2 += imageAtomicMax (fimage2D ,ivec2 (0 ,0 ),constVec2 ); 67buf .resf16v2 += imageAtomicMax (fimage2DArray ,ivec3 (0 ,0 ,0 ),constVec2 ); 68buf .resf16v2 += imageAtomicMax (fimageCube ,ivec3 (0 ,0 ,0 ),constVec2 ); 69buf .resf16v2 += imageAtomicMax (fimageCubeArray ,ivec3 (0 ,0 ,0 ),constVec2 ); 70buf .resf16v2 += imageAtomicMax (fimage3D ,ivec3 (0 ,0 ,0 ),constVec2 ); 71 72buf .resf16v2 += imageAtomicExchange (fimage1D ,int (0 ),constVec2 ); 73buf .resf16v2 += imageAtomicExchange (fimage1DArray ,ivec2 (0 ,0 ),constVec2 ); 74buf .resf16v2 += imageAtomicExchange (fimage2D ,ivec2 (0 ,0 ),constVec2 ); 75buf .resf16v2 += imageAtomicExchange (fimage2DArray ,ivec3 (0 ,0 ,0 ),constVec2 ); 76buf .resf16v2 += imageAtomicExchange (fimageCube ,ivec3 (0 ,0 ,0 ),constVec2 ); 77buf .resf16v2 += imageAtomicExchange (fimageCubeArray ,ivec3 (0 ,0 ,0 ),constVec2 ); 78buf .resf16v2 += imageAtomicExchange (fimage3D ,ivec3 (0 ,0 ,0 ),constVec2 ); 79 80// imageAtomic* functions supported with f16vec4 and only format supported is rgba16f 81f16vec4 constVec4 = f16vec4 (2.0 ); 82buf .resf16v4 += imageAtomicAdd (fimage1Dv4 ,int (0 ),constVec4 ); 83buf .resf16v4 += imageAtomicAdd (fimage1DArrayv4 ,ivec2 (0 ,0 ),constVec4 ); 84buf .resf16v4 += imageAtomicAdd (fimage2Dv4 ,ivec2 (0 ,0 ),constVec4 ); 85buf .resf16v4 += imageAtomicAdd (fimage2DArrayv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 86buf .resf16v4 += imageAtomicAdd (fimageCubev4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 87buf .resf16v4 += imageAtomicAdd (fimageCubeArrayv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 88buf .resf16v4 += imageAtomicAdd (fimage3Dv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 89 90buf .resf16v4 += imageAtomicMin (fimage1Dv4 ,int (0 ),constVec4 ); 91buf .resf16v4 += imageAtomicMin (fimage1DArrayv4 ,ivec2 (0 ,0 ),constVec4 ); 92buf .resf16v4 += imageAtomicMin (fimage2Dv4 ,ivec2 (0 ,0 ),constVec4 ); 93buf .resf16v4 += imageAtomicMin (fimage2DArrayv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 94buf .resf16v4 += imageAtomicMin (fimageCubev4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 95buf .resf16v4 += imageAtomicMin (fimageCubeArrayv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 96buf .resf16v4 += imageAtomicMin (fimage3Dv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 97 98buf .resf16v4 += imageAtomicMax (fimage1Dv4 ,int (0 ),constVec4 ); 99buf .resf16v4 += imageAtomicMax (fimage1DArrayv4 ,ivec2 (0 ,0 ),constVec4 ); 100buf .resf16v4 += imageAtomicMax (fimage2Dv4 ,ivec2 (0 ,0 ),constVec4 ); 101buf .resf16v4 += imageAtomicMax (fimage2DArrayv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 102buf .resf16v4 += imageAtomicMax (fimageCubev4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 103buf .resf16v4 += imageAtomicMax (fimageCubeArrayv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 104buf .resf16v4 += imageAtomicMax (fimage3Dv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 105 106buf .resf16v4 += imageAtomicExchange (fimage1Dv4 ,int (0 ),constVec4 ); 107buf .resf16v4 += imageAtomicExchange (fimage1DArrayv4 ,ivec2 (0 ,0 ),constVec4 ); 108buf .resf16v4 += imageAtomicExchange (fimage2Dv4 ,ivec2 (0 ,0 ),constVec4 ); 109buf .resf16v4 += imageAtomicExchange (fimage2DArrayv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 110buf .resf16v4 += imageAtomicExchange (fimageCubev4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 111buf .resf16v4 += imageAtomicExchange (fimageCubeArrayv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 112buf .resf16v4 += imageAtomicExchange (fimage3Dv4 ,ivec3 (0 ,0 ,0 ),constVec4 ); 113}