diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2016-02-24 22:34:51 -0800 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2016-02-26 15:55:59 -0800 |
commit | 15b3639bf1b0676e74b107d74653185eedbc6688 (patch) | |
tree | 0108605c5783517779ba98f99e21385895a3cb15 /src/mesa/drivers/dri/i965/brw_nir.c | |
parent | cfbd9831f89ef165e7998d0b8524a1aefedec404 (diff) | |
download | external_mesa3d-15b3639bf1b0676e74b107d74653185eedbc6688.zip external_mesa3d-15b3639bf1b0676e74b107d74653185eedbc6688.tar.gz external_mesa3d-15b3639bf1b0676e74b107d74653185eedbc6688.tar.bz2 |
i965: Avoid recalculating the tessellation VUE map for IO lowering.
The caller already computes it. Now that we have stage specific
functions, it's really easy to pass this in.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_nir.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_nir.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c index 2bd6c4e..90c4f66 100644 --- a/src/mesa/drivers/dri/i965/brw_nir.c +++ b/src/mesa/drivers/dri/i965/brw_nir.c @@ -149,7 +149,7 @@ remap_inputs_with_vue_map(nir_block *block, void *closure) struct remap_patch_urb_offsets_state { nir_builder b; - struct brw_vue_map vue_map; + const struct brw_vue_map *vue_map; }; static bool @@ -167,7 +167,7 @@ remap_patch_urb_offsets(nir_block *block, void *closure) if ((stage == MESA_SHADER_TESS_CTRL && is_output(intrin)) || (stage == MESA_SHADER_TESS_EVAL && is_input(intrin))) { - int vue_slot = state->vue_map.varying_to_slot[intrin->const_index[0]]; + int vue_slot = state->vue_map->varying_to_slot[intrin->const_index[0]]; assert(vue_slot != -1); intrin->const_index[0] = vue_slot; @@ -176,7 +176,7 @@ remap_patch_urb_offsets(nir_block *block, void *closure) nir_const_value *const_vertex = nir_src_as_const_value(*vertex); if (const_vertex) { intrin->const_index[0] += const_vertex->u[0] * - state->vue_map.num_per_vertex_slots; + state->vue_map->num_per_vertex_slots; } else { state->b.cursor = nir_before_instr(&intrin->instr); @@ -185,7 +185,7 @@ remap_patch_urb_offsets(nir_block *block, void *closure) nir_imul(&state->b, nir_ssa_for_src(&state->b, *vertex, 1), nir_imm_int(&state->b, - state->vue_map.num_per_vertex_slots)); + state->vue_map->num_per_vertex_slots)); /* Add it to the existing offset */ nir_src *offset = nir_get_io_offset_src(intrin); @@ -298,12 +298,10 @@ brw_nir_lower_vue_inputs(nir_shader *nir, } void -brw_nir_lower_tes_inputs(nir_shader *nir) +brw_nir_lower_tes_inputs(nir_shader *nir, const struct brw_vue_map *vue_map) { struct remap_patch_urb_offsets_state state; - brw_compute_tess_vue_map(&state.vue_map, - nir->info.inputs_read & ~VARYING_BIT_PRIMITIVE_ID, - nir->info.patch_inputs_read); + state.vue_map = vue_map; foreach_list_typed(nir_variable, var, node, &nir->inputs) { var->data.driver_location = var->data.location; @@ -347,11 +345,10 @@ brw_nir_lower_vue_outputs(nir_shader *nir, } void -brw_nir_lower_tcs_outputs(nir_shader *nir) +brw_nir_lower_tcs_outputs(nir_shader *nir, const struct brw_vue_map *vue_map) { struct remap_patch_urb_offsets_state state; - brw_compute_tess_vue_map(&state.vue_map, nir->info.outputs_written, - nir->info.patch_outputs_written); + state.vue_map = vue_map; nir_foreach_variable(var, &nir->outputs) { var->data.driver_location = var->data.location; |