From c4a6f4bbaaf86d50d5da103894469a9bc12a1323 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Sat, 18 Jan 2025 23:48:11 +0100 Subject: Working api prototype --- shaders/api-test-ui.frag | 20 ++++++++++++++++---- shaders/api-test-ui.vert | 19 ++++++++++++------- 2 files changed, 28 insertions(+), 11 deletions(-) (limited to 'shaders') diff --git a/shaders/api-test-ui.frag b/shaders/api-test-ui.frag index 57630dc..06553df 100644 --- a/shaders/api-test-ui.frag +++ b/shaders/api-test-ui.frag @@ -1,3 +1,4 @@ +#extension GL_EXT_buffer_reference : require #extension GL_EXT_nonuniform_qualifier : require layout(location = 0) out vec4 o_Color; @@ -10,13 +11,24 @@ layout(location = 0) in struct { layout(set = 0, binding = 0) uniform sampler samplers[]; layout(set = 0, binding = 1) uniform texture2D textures[]; layout(set = 0, binding = 2, rgba32f) uniform image2D images[]; -layout(set = 2, binding = 0) uniform parameters { - uint vertex_buffer; +// layout(set = 2, binding = 0) uniform parameters { +// uint vertex_buffer; +// vec2 scale; +// vec2 translate; +// uint texture_index; +// } params; + +layout(buffer_reference) readonly buffer params { vec2 scale; vec2 translate; uint texture_index; -} params; + uint padding; +}; + +layout(push_constant) uniform constants { + layout(offset = 16) params ui_params; +} consts; void main() { - o_Color = In.color * texture(sampler2D(textures[nonuniformEXT(params.texture_index)], samplers[nonuniformEXT(0U)]), In.uv.xy); + o_Color = In.color * texture(sampler2D(textures[nonuniformEXT(consts.ui_params.texture_index)], samplers[nonuniformEXT(0U)]), In.uv.xy); } diff --git a/shaders/api-test-ui.vert b/shaders/api-test-ui.vert index 4824d23..9592a65 100644 --- a/shaders/api-test-ui.vert +++ b/shaders/api-test-ui.vert @@ -8,16 +8,21 @@ struct vertex { uint color; }; +layout(buffer_reference) readonly buffer params { + vec2 scale; + vec2 translate; + uint texture_index; + uint padding; +}; + layout(buffer_reference) readonly buffer vertices { vertex vertices[]; }; -layout(set = 2, binding = 0) uniform parameters { +layout(push_constant) uniform constants { + layout(offset = 16) params ui_params; vertices vertex_buffer; - vec2 scale; - vec2 translate; - uint texture_index; -} params; +} consts; out gl_PerVertex { vec4 gl_Position; @@ -30,11 +35,11 @@ layout(location = 0) out struct { void main() { - vertex v = params.vertex_buffer.vertices[gl_VertexIndex]; + vertex v = consts.vertex_buffer.vertices[gl_VertexIndex]; Out.color = unpackUnorm4x8(v.color); Out.uv = vec2(v.uv_x, v.uv_y); vec2 pos = vec2(v.pos_x, v.pos_y); - gl_Position = vec4(pos * params.scale + params.translate, 0.0, 1.0); + gl_Position = vec4(pos * consts.ui_params.scale + consts.ui_params.translate, 0.0, 1.0); } -- cgit v1.3