mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 06:40:11 +01:00
glsl: Lower UBO and SSBO access in glsl linker
All GLSL IR consumers run this lowering pass so we can move it to the linker. This moves the pass up quite a bit, but that's the point: it needs to run before we throw away information about per-component vector access. Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Signed-off-by: Kristian Høgsberg Kristensen <krh@bitplanet.net>
This commit is contained in:
parent
f0e95c2500
commit
60dd5287ff
6 changed files with 13 additions and 3 deletions
|
|
@ -4445,6 +4445,14 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||
|
||||
/* FINISHME: Assign fragment shader output locations. */
|
||||
|
||||
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
if (prog->_LinkedShaders[i] == NULL)
|
||||
continue;
|
||||
|
||||
if (ctx->Const.ShaderCompilerOptions[i].LowerBufferInterfaceBlocks)
|
||||
lower_ubo_reference(prog->_LinkedShaders[i]);
|
||||
}
|
||||
|
||||
done:
|
||||
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
free(shader_list[i]);
|
||||
|
|
|
|||
|
|
@ -157,8 +157,6 @@ process_glsl_ir(gl_shader_stage stage,
|
|||
_mesa_shader_stage_to_abbrev(shader->Stage));
|
||||
}
|
||||
|
||||
lower_ubo_reference(shader);
|
||||
|
||||
bool progress;
|
||||
do {
|
||||
progress = false;
|
||||
|
|
|
|||
|
|
@ -148,6 +148,8 @@ brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo)
|
|||
compiler->glsl_compiler_options[i].EmitNoIndirectSampler = true;
|
||||
|
||||
compiler->glsl_compiler_options[i].NirOptions = nir_options;
|
||||
|
||||
compiler->glsl_compiler_options[i].LowerBufferInterfaceBlocks = true;
|
||||
}
|
||||
|
||||
return compiler;
|
||||
|
|
|
|||
|
|
@ -2875,6 +2875,8 @@ struct gl_shader_compiler_options
|
|||
*/
|
||||
GLboolean OptimizeForAOS;
|
||||
|
||||
GLboolean LowerBufferInterfaceBlocks; /**< Lower UBO and SSBO access to intrinsics. */
|
||||
|
||||
const struct nir_shader_compiler_options *NirOptions;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -254,6 +254,7 @@ void st_init_limits(struct pipe_screen *screen,
|
|||
PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT);
|
||||
|
||||
options->LowerClipDistance = true;
|
||||
options->LowerBufferInterfaceBlocks = true;
|
||||
}
|
||||
|
||||
c->LowerTessLevel = true;
|
||||
|
|
|
|||
|
|
@ -5822,7 +5822,6 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||
(!ctx->Const.NativeIntegers ? INT_DIV_TO_MUL_RCP : 0) |
|
||||
(options->EmitNoSat ? SAT_TO_CLAMP : 0));
|
||||
|
||||
lower_ubo_reference(prog->_LinkedShaders[i]);
|
||||
do_vec_index_to_cond_assign(ir);
|
||||
lower_vector_insert(ir, true);
|
||||
lower_quadop_vector(ir, false);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue