summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2018-03-22 11:52:19 +1100
committerTimothy Arceri <[email protected]>2018-04-10 14:43:45 +1000
commitbd4cc54c8bcad0836b92cf60c4d221e5dda38e9b (patch)
treeed44cd6c45139f7c969e2539d9a08dc900bd313a /src
parent222d862cd332dba3c2bd8b28270c3a0d0aed6ec6 (diff)
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 <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/state_tracker/st_glsl_to_nir.cpp7
-rw-r--r--src/mesa/state_tracker/st_nir.h3
-rw-r--r--src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c12
3 files changed, 11 insertions, 11 deletions
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index a5a284fb22a..bcf6a7ceb6a 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -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))
diff --git a/src/mesa/state_tracker/st_nir.h b/src/mesa/state_tracker/st_nir.h
index 3dd78fb1155..1c2e32a5e6f 100644
--- a/src/mesa/state_tracker/st_nir.h
+++ b/src/mesa/state_tracker/st_nir.h
@@ -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,
diff --git a/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c b/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
index b2f8f833bbb..1727f8214a0 100644
--- a/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
+++ b/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
@@ -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);
}
}