diff --git a/src/dispatch.c b/src/dispatch.c index 218b556..067efc7 100644 --- a/src/dispatch.c +++ b/src/dispatch.c @@ -29,6 +29,7 @@ enum { TMP_PRELUDE, // GLSL version, global definitions, etc. + TMP_UNIFORMS, TMP_MAIN, // main GLSL shader body TMP_VERT_HEAD, // vertex shader inputs/outputs TMP_VERT_BODY, // vertex shader body @@ -304,15 +305,16 @@ static void generate_shaders(pl_dispatch dp, pl_str_builder shader_body = sh_finalize_internal(sh); pl_str_builder pre = dp->tmp[TMP_PRELUDE]; + pl_str_builder uni = dp->tmp[TMP_UNIFORMS]; ADD(pre, "#version %d%s\n", gpu->glsl.version, (gpu->glsl.gles && gpu->glsl.version > 100) ? " es" : ""); if (pass_params->type == PL_PASS_COMPUTE) - ADD(pre, "#extension GL_ARB_compute_shader : enable\n"); + ADD(uni, "#extension GL_ARB_compute_shader : enable\n"); // Enable this unconditionally if the GPU supports it, since we have no way // of knowing whether subgroups are being used or not if (gpu->glsl.subgroup_size) { - ADD(pre, "#extension GL_KHR_shader_subgroup_basic : enable \n" + ADD(uni, "#extension GL_KHR_shader_subgroup_basic : enable \n" "#extension GL_KHR_shader_subgroup_vote : enable \n" "#extension GL_KHR_shader_subgroup_arithmetic : enable \n" "#extension GL_KHR_shader_subgroup_ballot : enable \n" @@ -360,24 +362,24 @@ static void generate_shaders(pl_dispatch dp, } if (has_img && !gpu->glsl.gles) - ADD(pre, "#extension GL_ARB_shader_image_load_store : enable\n"); + ADD(uni, "#extension GL_ARB_shader_image_load_store : enable\n"); if (has_ubo) - ADD(pre, "#extension GL_ARB_uniform_buffer_object : enable\n"); + ADD(uni, "#extension GL_ARB_uniform_buffer_object : enable\n"); if (has_ssbo) - ADD(pre, "#extension GL_ARB_shader_storage_buffer_object : enable\n"); + ADD(uni, "#extension GL_ARB_shader_storage_buffer_object : enable\n"); if (has_texel) - ADD(pre, "#extension GL_ARB_texture_buffer_object : enable\n"); + ADD(uni, "#extension GL_ARB_texture_buffer_object : enable\n"); if (has_ext) { if (gpu->glsl.version >= 300) { - ADD(pre, "#extension GL_OES_EGL_image_external_essl3 : enable\n"); + ADD(uni, "#extension GL_OES_EGL_image_external_essl3 : enable\n"); } else { - ADD(pre, "#extension GL_OES_EGL_image_external : enable\n"); + ADD(uni, "#extension GL_OES_EGL_image_external : enable\n"); } } if (has_nofmt) - ADD(pre, "#extension GL_EXT_shader_image_load_formatted : enable\n"); + ADD(uni, "#extension GL_EXT_shader_image_load_formatted : enable\n"); if (has_gather && !gpu->glsl.gles) - ADD(pre, "#extension GL_ARB_texture_gather : enable\n"); + ADD(uni, "#extension GL_ARB_texture_gather : enable\n"); if (gpu->glsl.gles) { // Use 32-bit precision for floats if possible @@ -527,12 +529,12 @@ static void generate_shaders(pl_dispatch dp, case PL_DESC_BUF_UNIFORM: if (gpu->glsl.vulkan) { - ADD(pre, "layout(std140, binding=%d) ", desc->binding); + ADD(uni, "layout(std140, binding=%d) ", desc->binding); } else { - ADD(pre, "layout(std140) "); + ADD(uni, "layout(std140) "); } - ADD(pre, "uniform "$" ", sh_ident_unpack(desc->name)); - add_buffer_vars(dp, tmp, pre, sd->buffer_vars, sd->num_buffer_vars); + ADD(uni, "uniform "$" ", sh_ident_unpack(desc->name)); + add_buffer_vars(dp, tmp, uni, sd->buffer_vars, sd->num_buffer_vars); break; case PL_DESC_BUF_STORAGE: @@ -599,6 +601,7 @@ static void generate_shaders(pl_dispatch dp, pl_str_builder glsl = dp->tmp[TMP_MAIN]; ADD_CAT(glsl, pre); + ADD_CAT(glsl, uni); switch(pass_params->type) { case PL_PASS_RASTER: {