mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-19 11:00:42 +01:00
st/glsl_to_nir: set paramater value offset as driver location for packed uniforms
This allows us to simplify the code and will also be useful for supporting bindless textures. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
222d862cd3
commit
bd4cc54c8b
3 changed files with 11 additions and 11 deletions
|
|
@ -294,11 +294,16 @@ st_nir_assign_uniform_locations(struct gl_context *ctx,
|
|||
if (ctx->Const.PackedDriverUniformStorage) {
|
||||
loc = _mesa_add_sized_state_reference(prog->Parameters,
|
||||
stateTokens, comps, false);
|
||||
loc = prog->Parameters->ParameterValueOffset[loc];
|
||||
} else {
|
||||
loc = _mesa_add_state_reference(prog->Parameters, stateTokens);
|
||||
}
|
||||
} else {
|
||||
loc = st_nir_lookup_parameter_index(prog->Parameters, uniform->name);
|
||||
|
||||
if (ctx->Const.PackedDriverUniformStorage) {
|
||||
loc = prog->Parameters->ParameterValueOffset[loc];
|
||||
}
|
||||
}
|
||||
|
||||
uniform->data.driver_location = loc;
|
||||
|
|
@ -804,7 +809,7 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog,
|
|||
if (st->ctx->Const.PackedDriverUniformStorage) {
|
||||
NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_type_dword_size,
|
||||
(nir_lower_io_options)0);
|
||||
NIR_PASS_V(nir, st_nir_lower_uniforms_to_ubo, prog->Parameters);
|
||||
NIR_PASS_V(nir, st_nir_lower_uniforms_to_ubo);
|
||||
}
|
||||
|
||||
if (screen->get_param(screen, PIPE_CAP_NIR_SAMPLERS_AS_DEREF))
|
||||
|
|
|
|||
|
|
@ -36,8 +36,7 @@ struct nir_shader;
|
|||
void st_nir_lower_builtin(struct nir_shader *shader);
|
||||
void st_nir_lower_tex_src_plane(struct nir_shader *shader, unsigned free_slots,
|
||||
unsigned lower_2plane, unsigned lower_3plane);
|
||||
bool st_nir_lower_uniforms_to_ubo(struct nir_shader *shader,
|
||||
const struct gl_program_parameter_list *params);
|
||||
bool st_nir_lower_uniforms_to_ubo(struct nir_shader *shader);
|
||||
|
||||
void st_finalize_nir(struct st_context *st, struct gl_program *prog,
|
||||
struct gl_shader_program *shader_program,
|
||||
|
|
|
|||
|
|
@ -36,8 +36,7 @@
|
|||
#include "program/prog_parameter.h"
|
||||
|
||||
static bool
|
||||
lower_instr(nir_intrinsic_instr *instr, nir_builder *b,
|
||||
const struct gl_program_parameter_list *params)
|
||||
lower_instr(nir_intrinsic_instr *instr, nir_builder *b)
|
||||
{
|
||||
b->cursor = nir_before_instr(&instr->instr);
|
||||
|
||||
|
|
@ -50,11 +49,9 @@ lower_instr(nir_intrinsic_instr *instr, nir_builder *b,
|
|||
}
|
||||
|
||||
if (instr->intrinsic == nir_intrinsic_load_uniform) {
|
||||
unsigned pvo = params->ParameterValueOffset[nir_intrinsic_base(instr)];
|
||||
|
||||
nir_ssa_def *ubo_idx = nir_imm_int(b, 0);
|
||||
nir_ssa_def *ubo_offset =
|
||||
nir_iadd(b, nir_imm_int(b, 4 * pvo),
|
||||
nir_iadd(b, nir_imm_int(b, 4 * nir_intrinsic_base(instr)),
|
||||
nir_imul(b, nir_imm_int(b, 4),
|
||||
nir_ssa_for_src(b, instr->src[0], 1)));
|
||||
|
||||
|
|
@ -77,8 +74,7 @@ lower_instr(nir_intrinsic_instr *instr, nir_builder *b,
|
|||
}
|
||||
|
||||
bool
|
||||
st_nir_lower_uniforms_to_ubo(nir_shader *shader,
|
||||
const struct gl_program_parameter_list *params)
|
||||
st_nir_lower_uniforms_to_ubo(nir_shader *shader)
|
||||
{
|
||||
bool progress = false;
|
||||
|
||||
|
|
@ -90,7 +86,7 @@ st_nir_lower_uniforms_to_ubo(nir_shader *shader,
|
|||
nir_foreach_instr_safe(instr, block) {
|
||||
if (instr->type == nir_instr_type_intrinsic)
|
||||
progress |= lower_instr(nir_instr_as_intrinsic(instr),
|
||||
&builder, params);
|
||||
&builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue