GLSL/SPV: Implement SPV_EXT_descriptor_indexing and GL_EXT_nonuniform_qualifier
This commit is contained in:
55
Test/spv.nonuniform.frag
Normal file
55
Test/spv.nonuniform.frag
Normal file
@@ -0,0 +1,55 @@
|
||||
#version 450
|
||||
|
||||
#extension GL_EXT_nonuniform_qualifier : enable
|
||||
|
||||
layout(location=0) nonuniformEXT in vec4 nu_inv4;
|
||||
nonuniformEXT float nu_gf;
|
||||
layout(location=1) in nonuniformEXT flat int nu_ii;
|
||||
|
||||
layout(binding=0, input_attachment_index = 0) uniform subpassInput inputAttachmentDyn[];
|
||||
layout(binding=1) uniform samplerBuffer uniformTexelBufferDyn[];
|
||||
layout(binding=2, r32f) uniform imageBuffer storageTexelBufferDyn[];
|
||||
layout(binding=3) uniform uname { float a; } uniformBuffer[];
|
||||
layout(binding=4) buffer bname { float b; } storageBuffer[];
|
||||
layout(binding=5) uniform sampler2D sampledImage[];
|
||||
layout(binding=6, r32f) uniform image2D storageImage[];
|
||||
layout(binding=7, input_attachment_index = 1) uniform subpassInput inputAttachment[];
|
||||
layout(binding=8) uniform samplerBuffer uniformTexelBuffer[];
|
||||
layout(binding=9, r32f) uniform imageBuffer storageTexelBuffer[];
|
||||
|
||||
nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f)
|
||||
{
|
||||
return nupi;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
nonuniformEXT int nu_li;
|
||||
int dyn_i;
|
||||
|
||||
int a = foo(nu_li, nu_li);
|
||||
nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);
|
||||
|
||||
float b;
|
||||
b = nu_inv4.x * nu_gf;
|
||||
b += subpassLoad(inputAttachmentDyn[dyn_i]).x;
|
||||
b += texelFetch(uniformTexelBufferDyn[dyn_i], 1).x;
|
||||
b += imageLoad(storageTexelBufferDyn[dyn_i], 1).x;
|
||||
b += uniformBuffer[nu_ii].a;
|
||||
b += storageBuffer[nu_ii].b;
|
||||
b += texture(sampledImage[nu_ii], vec2(0.5)).x;
|
||||
b += imageLoad(storageImage[nu_ii], ivec2(1)).x;
|
||||
b += subpassLoad(inputAttachment[nu_ii]).x;
|
||||
b += texelFetch(uniformTexelBuffer[nu_ii], 1).x;
|
||||
b += imageLoad(storageTexelBuffer[nu_ii], 1).x;
|
||||
|
||||
nonuniformEXT ivec4 v;
|
||||
nonuniformEXT mat4 m;
|
||||
nonuniformEXT struct S { int a; } s;
|
||||
ivec4 uv;
|
||||
b += uniformBuffer[v.y].a;
|
||||
b += uniformBuffer[v[2]].a;
|
||||
b += uniformBuffer[uv[nu_ii]].a;
|
||||
b += uniformBuffer[int(m[2].z)].a;
|
||||
b += uniformBuffer[s.a].a;
|
||||
}
|
||||
Reference in New Issue
Block a user