yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

Jeff BolzImplement GL_EXT_shader_64bit_indexing (#4082)e2ab21f2

main
1.3 KiB35 linesraw
1#version 450 core
2#extension GL_KHR_memory_scope_semantics : enable
3#extension GL_KHR_cooperative_matrix : enable
4#extension GL_NV_cooperative_vector : enable
5#extension GL_EXT_shader_explicit_arithmetic_types : enable
6#extension GL_EXT_buffer_reference : enable
7#extension GL_EXT_shader_64bit_indexing : enable
8
9#pragma shader_64bit_indexing
10
11layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
12
13layout(set = 0, binding = 0, buffer_reference) coherent buffer Block {
14    float x[];
15} block;
16
17void main()
18{
19    uint64_t element = 0;
20    coopmat<float16_t, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA> m;
21    coopMatLoad(m, block.x, element, 128, gl_CooperativeMatrixLayoutRowMajor);
22    coopMatStore(m, block.x, element, 128, gl_CooperativeMatrixLayoutRowMajor);
23
24    coopvecNV<float16_t, 2> vec;
25    coopVecMatMulAddNV(vec, vec, 0, block.x, element, 0, block.x, element, 0, 2, 2, 0, false, 0);
26    coopVecMatMulNV(vec, vec, 0, block.x, element, 0, 2, 2, 0, false, 0);
27    coopVecLoadNV(vec, block.x, element);
28    coopVecStoreNV(vec, block.x, element);
29    coopVecOuterProductAccumulateNV(vec, vec, block.x, element, 0, 0, 0);
30    coopVecReduceSumAccumulateNV(vec, block.x, element);
31
32    float y = block.x[element];
33    int32_t len = block.x.length();
34    int64_t len64 = block.x.length64();
35}