From cfee87de9997bf706af125ffe1d1ec8393fa9b05 Mon Sep 17 00:00:00 2001 From: harrand Date: Sun, 8 Dec 2024 19:22:03 +0000 Subject: [PATCH] [tzsl] added texsize(id) which is equivalent to GLSL's textureSize(..., 0). also added post_render graph to quad_renderer. it works but note that post_render should definitely depend on the main pass, which it doesnt --- include/tz/ren/quad.hpp | 1 + src/tz/ren/quad.cpp | 4 ++++ tools/tzslc/tzsl.cpp | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/tz/ren/quad.hpp b/include/tz/ren/quad.hpp index e0d61fe07e..e4fcfa66c2 100644 --- a/include/tz/ren/quad.hpp +++ b/include/tz/ren/quad.hpp @@ -81,6 +81,7 @@ namespace tz::ren return {std::begin(default_targets), std::end(default_targets)}; }(); std::span extra_resources = {}; + tz::gpu::graph_handle post_render = tz::nullhand; /// Any extra optional flags to specify? quad_renderer_flag flags = static_cast(0); /// Custom fragment shader. Unless @ref quad_renderer_flag::custom_fragment_shader is specified, this value is ignored and a default fragment shader is used. diff --git a/src/tz/ren/quad.cpp b/src/tz/ren/quad.cpp index 279f3168f3..c01e20b5b0 100644 --- a/src/tz/ren/quad.cpp +++ b/src/tz/ren/quad.cpp @@ -145,6 +145,10 @@ namespace tz::ren ren.graph = tz::gpu::create_graph(); tz::gpu::graph_add_pass(ren.graph, ren.main_pass); + if(info.post_render != tz::nullhand) + { + tz::gpu::graph_add_subgraph(ren.graph, info.post_render); + } if(info.flags & quad_renderer_flag::graph_present_after) { tz::gpu::graph_add_pass(ren.graph, tz::gpu::present_pass); diff --git a/tools/tzslc/tzsl.cpp b/tools/tzslc/tzsl.cpp index 545aedfdd2..e6e90797e6 100644 --- a/tools/tzslc/tzsl.cpp +++ b/tools/tzslc/tzsl.cpp @@ -249,7 +249,7 @@ namespace tzslc { ret = "#pragma shader_stage(" + *beg + ")" + stage_define; } - return ret + "\n" + "layout(binding = 1) uniform sampler2D tz_textures[];\n#define sample(id, uv) texture(tz_textures[id], uv)"; + return ret + "\n" + "layout(binding = 1) uniform sampler2D tz_textures[];\n#define sample(id, uv) texture(tz_textures[id], uv)\n#define texsize(id) textureSize(tz_textures[id], 0)\n"; }); tzslc_assert(stage_specifier_count == 1, "Unexpected number of shader stage specifiers. Expected 1, got %zu", stage_specifier_count);