summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2016-01-13 15:04:39 -0800
committerKenneth Graunke <[email protected]>2016-01-14 21:32:59 -0800
commita3500f943e2c61c0aed043108132f35b79d16676 (patch)
tree6b29ab8110ea645dbd1eaf9e3f957d3b7fc35c65 /src/mesa/drivers/dri
parent824d82025d0bff9841647942aca501fba16fc1a9 (diff)
i965: Make add_const_offset_to_base() work at the shader level.
This makes it a pass, hiding the parameter structs and block callbacks so it's simpler to work with. Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r--src/mesa/drivers/dri/i965/brw_nir.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c
index f8b258bf96c..55ba732dec2 100644
--- a/src/mesa/drivers/dri/i965/brw_nir.c
+++ b/src/mesa/drivers/dri/i965/brw_nir.c
@@ -60,7 +60,7 @@ struct add_const_offset_to_base_params {
};
static bool
-add_const_offset_to_base(nir_block *block, void *closure)
+add_const_offset_to_base_block(nir_block *block, void *closure)
{
struct add_const_offset_to_base_params *params = closure;
nir_builder *b = &params->b;
@@ -85,7 +85,19 @@ add_const_offset_to_base(nir_block *block, void *closure)
}
}
return true;
+}
+
+static void
+add_const_offset_to_base(nir_shader *nir, nir_variable_mode mode)
+{
+ struct add_const_offset_to_base_params params = { .mode = mode };
+ nir_foreach_function(nir, f) {
+ if (f->impl) {
+ nir_builder_init(&params.b, f->impl);
+ nir_foreach_block(f->impl, add_const_offset_to_base_block, &params);
+ }
+ }
}
static bool
@@ -195,10 +207,6 @@ brw_nir_lower_inputs(nir_shader *nir,
const struct brw_device_info *devinfo,
bool is_scalar)
{
- struct add_const_offset_to_base_params params = {
- .mode = nir_var_shader_in
- };
-
switch (nir->stage) {
case MESA_SHADER_VERTEX:
/* Start with the location of the variable's base. */
@@ -224,10 +232,10 @@ brw_nir_lower_inputs(nir_shader *nir,
/* This pass needs actual constants */
nir_opt_constant_folding(nir);
+ add_const_offset_to_base(nir, nir_var_shader_in);
+
nir_foreach_function(nir, function) {
if (function->impl) {
- nir_builder_init(&params.b, function->impl);
- nir_foreach_block(function->impl, add_const_offset_to_base, &params);
nir_foreach_block(function->impl, remap_vs_attrs, &inputs_read);
}
}
@@ -270,10 +278,10 @@ brw_nir_lower_inputs(nir_shader *nir,
/* This pass needs actual constants */
nir_opt_constant_folding(nir);
+ add_const_offset_to_base(nir, nir_var_shader_in);
+
nir_foreach_function(nir, function) {
if (function->impl) {
- nir_builder_init(&params.b, function->impl);
- nir_foreach_block(function->impl, add_const_offset_to_base, &params);
nir_foreach_block(function->impl, remap_inputs_with_vue_map,
&input_vue_map);
}
@@ -296,10 +304,10 @@ brw_nir_lower_inputs(nir_shader *nir,
/* This pass needs actual constants */
nir_opt_constant_folding(nir);
+ add_const_offset_to_base(nir, nir_var_shader_in);
+
nir_foreach_function(nir, function) {
if (function->impl) {
- nir_builder_init(&params.b, function->impl);
- nir_foreach_block(function->impl, add_const_offset_to_base, &params);
nir_builder_init(&state.b, function->impl);
nir_foreach_block(function->impl, remap_patch_urb_offsets, &state);
}
@@ -339,10 +347,6 @@ brw_nir_lower_outputs(nir_shader *nir,
}
break;
case MESA_SHADER_TESS_CTRL: {
- struct add_const_offset_to_base_params params = {
- .mode = nir_var_shader_out
- };
-
struct remap_patch_urb_offsets_state state;
brw_compute_tess_vue_map(&state.vue_map, nir->info.outputs_written,
nir->info.patch_outputs_written);
@@ -356,10 +360,10 @@ brw_nir_lower_outputs(nir_shader *nir,
/* This pass needs actual constants */
nir_opt_constant_folding(nir);
+ add_const_offset_to_base(nir, nir_var_shader_out);
+
nir_foreach_function(nir, function) {
if (function->impl) {
- nir_builder_init(&params.b, function->impl);
- nir_foreach_block(function->impl, add_const_offset_to_base, &params);
nir_builder_init(&state.b, function->impl);
nir_foreach_block(function->impl, remap_patch_urb_offsets, &state);
}