mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 15:10:10 +01:00
nir/lower_io: Rename vertex_index to array_index in helpers
The helpers will be reused for per-primitive variables that are also arrayed, so use a more general name. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11252>
This commit is contained in:
parent
3761d994f6
commit
a59f1d628a
2 changed files with 43 additions and 43 deletions
|
|
@ -178,7 +178,7 @@ static unsigned get_number_of_slots(struct lower_io_state *state,
|
|||
|
||||
static nir_ssa_def *
|
||||
get_io_offset(nir_builder *b, nir_deref_instr *deref,
|
||||
nir_ssa_def **vertex_index,
|
||||
nir_ssa_def **array_index,
|
||||
int (*type_size)(const struct glsl_type *, bool),
|
||||
unsigned *component, bool bts)
|
||||
{
|
||||
|
|
@ -188,12 +188,12 @@ get_io_offset(nir_builder *b, nir_deref_instr *deref,
|
|||
assert(path.path[0]->deref_type == nir_deref_type_var);
|
||||
nir_deref_instr **p = &path.path[1];
|
||||
|
||||
/* For per-vertex input arrays (i.e. geometry shader inputs), keep the
|
||||
* outermost array index separate. Process the rest normally.
|
||||
/* For arrayed I/O (e.g., per-vertex input arrays in geometry shader
|
||||
* inputs), skip the outermost array index. Process the rest normally.
|
||||
*/
|
||||
if (vertex_index != NULL) {
|
||||
if (array_index != NULL) {
|
||||
assert((*p)->deref_type == nir_deref_type_array);
|
||||
*vertex_index = nir_ssa_for_src(b, (*p)->arr.index, 1);
|
||||
*array_index = nir_ssa_for_src(b, (*p)->arr.index, 1);
|
||||
p++;
|
||||
}
|
||||
|
||||
|
|
@ -241,7 +241,7 @@ get_io_offset(nir_builder *b, nir_deref_instr *deref,
|
|||
|
||||
static nir_ssa_def *
|
||||
emit_load(struct lower_io_state *state,
|
||||
nir_ssa_def *vertex_index, nir_variable *var, nir_ssa_def *offset,
|
||||
nir_ssa_def *array_index, nir_variable *var, nir_ssa_def *offset,
|
||||
unsigned component, unsigned num_components, unsigned bit_size,
|
||||
nir_alu_type dest_type)
|
||||
{
|
||||
|
|
@ -257,10 +257,10 @@ emit_load(struct lower_io_state *state,
|
|||
nir->options->use_interpolated_input_intrinsics &&
|
||||
var->data.interpolation != INTERP_MODE_FLAT) {
|
||||
if (var->data.interpolation == INTERP_MODE_EXPLICIT) {
|
||||
assert(vertex_index != NULL);
|
||||
assert(array_index != NULL);
|
||||
op = nir_intrinsic_load_input_vertex;
|
||||
} else {
|
||||
assert(vertex_index == NULL);
|
||||
assert(array_index == NULL);
|
||||
|
||||
nir_intrinsic_op bary_op;
|
||||
if (var->data.sample ||
|
||||
|
|
@ -276,13 +276,13 @@ emit_load(struct lower_io_state *state,
|
|||
op = nir_intrinsic_load_interpolated_input;
|
||||
}
|
||||
} else {
|
||||
op = vertex_index ? nir_intrinsic_load_per_vertex_input :
|
||||
nir_intrinsic_load_input;
|
||||
op = array_index ? nir_intrinsic_load_per_vertex_input :
|
||||
nir_intrinsic_load_input;
|
||||
}
|
||||
break;
|
||||
case nir_var_shader_out:
|
||||
op = vertex_index ? nir_intrinsic_load_per_vertex_output :
|
||||
nir_intrinsic_load_output;
|
||||
op = array_index ? nir_intrinsic_load_per_vertex_output :
|
||||
nir_intrinsic_load_output;
|
||||
break;
|
||||
case nir_var_uniform:
|
||||
op = nir_intrinsic_load_uniform;
|
||||
|
|
@ -316,8 +316,8 @@ emit_load(struct lower_io_state *state,
|
|||
nir_intrinsic_set_io_semantics(load, semantics);
|
||||
}
|
||||
|
||||
if (vertex_index) {
|
||||
load->src[0] = nir_src_for_ssa(vertex_index);
|
||||
if (array_index) {
|
||||
load->src[0] = nir_src_for_ssa(array_index);
|
||||
load->src[1] = nir_src_for_ssa(offset);
|
||||
} else if (barycentric) {
|
||||
load->src[0] = nir_src_for_ssa(barycentric);
|
||||
|
|
@ -335,7 +335,7 @@ emit_load(struct lower_io_state *state,
|
|||
|
||||
static nir_ssa_def *
|
||||
lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state,
|
||||
nir_ssa_def *vertex_index, nir_variable *var, nir_ssa_def *offset,
|
||||
nir_ssa_def *array_index, nir_variable *var, nir_ssa_def *offset,
|
||||
unsigned component, const struct glsl_type *type)
|
||||
{
|
||||
assert(intrin->dest.is_ssa);
|
||||
|
|
@ -354,7 +354,7 @@ lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state,
|
|||
(4 - component) / 2);
|
||||
|
||||
nir_ssa_def *data32 =
|
||||
emit_load(state, vertex_index, var, offset, component,
|
||||
emit_load(state, array_index, var, offset, component,
|
||||
num_comps * 2, 32, nir_type_uint32);
|
||||
for (unsigned i = 0; i < num_comps; i++) {
|
||||
comp64[dest_comp + i] =
|
||||
|
|
@ -372,11 +372,11 @@ lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state,
|
|||
/* Booleans are 32-bit */
|
||||
assert(glsl_type_is_boolean(type));
|
||||
return nir_b2b1(&state->builder,
|
||||
emit_load(state, vertex_index, var, offset, component,
|
||||
emit_load(state, array_index, var, offset, component,
|
||||
intrin->dest.ssa.num_components, 32,
|
||||
nir_type_bool32));
|
||||
} else {
|
||||
return emit_load(state, vertex_index, var, offset, component,
|
||||
return emit_load(state, array_index, var, offset, component,
|
||||
intrin->dest.ssa.num_components,
|
||||
intrin->dest.ssa.bit_size,
|
||||
nir_get_nir_type_for_glsl_type(type));
|
||||
|
|
@ -385,16 +385,16 @@ lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state,
|
|||
|
||||
static void
|
||||
emit_store(struct lower_io_state *state, nir_ssa_def *data,
|
||||
nir_ssa_def *vertex_index, nir_variable *var, nir_ssa_def *offset,
|
||||
nir_ssa_def *array_index, nir_variable *var, nir_ssa_def *offset,
|
||||
unsigned component, unsigned num_components,
|
||||
nir_component_mask_t write_mask, nir_alu_type src_type)
|
||||
{
|
||||
nir_builder *b = &state->builder;
|
||||
|
||||
assert(var->data.mode == nir_var_shader_out);
|
||||
nir_intrinsic_op op;
|
||||
op = vertex_index ? nir_intrinsic_store_per_vertex_output :
|
||||
nir_intrinsic_store_output;
|
||||
nir_intrinsic_op op =
|
||||
array_index ? nir_intrinsic_store_per_vertex_output :
|
||||
nir_intrinsic_store_output;
|
||||
|
||||
nir_intrinsic_instr *store =
|
||||
nir_intrinsic_instr_create(state->builder.shader, op);
|
||||
|
|
@ -408,10 +408,10 @@ emit_store(struct lower_io_state *state, nir_ssa_def *data,
|
|||
|
||||
nir_intrinsic_set_write_mask(store, write_mask);
|
||||
|
||||
if (vertex_index)
|
||||
store->src[1] = nir_src_for_ssa(vertex_index);
|
||||
if (array_index)
|
||||
store->src[1] = nir_src_for_ssa(array_index);
|
||||
|
||||
store->src[vertex_index ? 2 : 1] = nir_src_for_ssa(offset);
|
||||
store->src[array_index ? 2 : 1] = nir_src_for_ssa(offset);
|
||||
|
||||
unsigned gs_streams = 0;
|
||||
if (state->builder.shader->info.stage == MESA_SHADER_GEOMETRY) {
|
||||
|
|
@ -441,7 +441,7 @@ emit_store(struct lower_io_state *state, nir_ssa_def *data,
|
|||
|
||||
static void
|
||||
lower_store(nir_intrinsic_instr *intrin, struct lower_io_state *state,
|
||||
nir_ssa_def *vertex_index, nir_variable *var, nir_ssa_def *offset,
|
||||
nir_ssa_def *array_index, nir_variable *var, nir_ssa_def *offset,
|
||||
unsigned component, const struct glsl_type *type)
|
||||
{
|
||||
assert(intrin->src[1].is_ssa);
|
||||
|
|
@ -471,7 +471,7 @@ lower_store(nir_intrinsic_instr *intrin, struct lower_io_state *state,
|
|||
write_mask32 |= 3 << (i * 2);
|
||||
}
|
||||
|
||||
emit_store(state, data32, vertex_index, var, offset,
|
||||
emit_store(state, data32, array_index, var, offset,
|
||||
component, data32->num_components, write_mask32,
|
||||
nir_type_uint32);
|
||||
}
|
||||
|
|
@ -486,12 +486,12 @@ lower_store(nir_intrinsic_instr *intrin, struct lower_io_state *state,
|
|||
/* Booleans are 32-bit */
|
||||
assert(glsl_type_is_boolean(type));
|
||||
nir_ssa_def *b32_val = nir_b2b32(&state->builder, intrin->src[1].ssa);
|
||||
emit_store(state, b32_val, vertex_index, var, offset,
|
||||
emit_store(state, b32_val, array_index, var, offset,
|
||||
component, intrin->num_components,
|
||||
nir_intrinsic_write_mask(intrin),
|
||||
nir_type_bool32);
|
||||
} else {
|
||||
emit_store(state, intrin->src[1].ssa, vertex_index, var, offset,
|
||||
emit_store(state, intrin->src[1].ssa, array_index, var, offset,
|
||||
component, intrin->num_components,
|
||||
nir_intrinsic_write_mask(intrin),
|
||||
nir_get_nir_type_for_glsl_type(type));
|
||||
|
|
@ -616,10 +616,10 @@ nir_lower_io_block(nir_block *block,
|
|||
|
||||
b->cursor = nir_before_instr(instr);
|
||||
|
||||
const bool per_vertex = nir_is_arrayed_io(var, b->shader->info.stage);
|
||||
const bool is_arrayed = nir_is_arrayed_io(var, b->shader->info.stage);
|
||||
|
||||
nir_ssa_def *offset;
|
||||
nir_ssa_def *vertex_index = NULL;
|
||||
nir_ssa_def *array_index = NULL;
|
||||
unsigned component_offset = var->data.location_frac;
|
||||
bool bindless_type_size = var->data.mode == nir_var_shader_in ||
|
||||
var->data.mode == nir_var_shader_out ||
|
||||
|
|
@ -656,7 +656,7 @@ nir_lower_io_block(nir_block *block,
|
|||
continue;
|
||||
}
|
||||
|
||||
offset = get_io_offset(b, deref, per_vertex ? &vertex_index : NULL,
|
||||
offset = get_io_offset(b, deref, is_arrayed ? &array_index : NULL,
|
||||
state->type_size, &component_offset,
|
||||
bindless_type_size);
|
||||
|
||||
|
|
@ -664,12 +664,12 @@ nir_lower_io_block(nir_block *block,
|
|||
|
||||
switch (intrin->intrinsic) {
|
||||
case nir_intrinsic_load_deref:
|
||||
replacement = lower_load(intrin, state, vertex_index, var, offset,
|
||||
replacement = lower_load(intrin, state, array_index, var, offset,
|
||||
component_offset, deref->type);
|
||||
break;
|
||||
|
||||
case nir_intrinsic_store_deref:
|
||||
lower_store(intrin, state, vertex_index, var, offset,
|
||||
lower_store(intrin, state, array_index, var, offset,
|
||||
component_offset, deref->type);
|
||||
break;
|
||||
|
||||
|
|
@ -677,7 +677,7 @@ nir_lower_io_block(nir_block *block,
|
|||
case nir_intrinsic_interp_deref_at_sample:
|
||||
case nir_intrinsic_interp_deref_at_offset:
|
||||
case nir_intrinsic_interp_deref_at_vertex:
|
||||
assert(vertex_index == NULL);
|
||||
assert(array_index == NULL);
|
||||
replacement = lower_interpolate_at(intrin, state, var, offset,
|
||||
component_offset, deref->type);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
static unsigned
|
||||
get_io_offset(nir_builder *b, nir_deref_instr *deref, nir_variable *var,
|
||||
unsigned *element_index, unsigned *xfb_offset,
|
||||
nir_ssa_def **vertex_index)
|
||||
nir_ssa_def **array_index)
|
||||
{
|
||||
nir_deref_path path;
|
||||
nir_deref_path_init(&path, deref, NULL);
|
||||
|
|
@ -43,11 +43,11 @@ get_io_offset(nir_builder *b, nir_deref_instr *deref, nir_variable *var,
|
|||
assert(path.path[0]->deref_type == nir_deref_type_var);
|
||||
nir_deref_instr **p = &path.path[1];
|
||||
|
||||
/* For per-vertex input arrays (i.e. geometry shader inputs), skip the
|
||||
* outermost array index. Process the rest normally.
|
||||
/* For arrayed I/O (e.g., per-vertex input arrays in geometry shader
|
||||
* inputs), skip the outermost array index. Process the rest normally.
|
||||
*/
|
||||
if (nir_is_arrayed_io(var, b->shader->info.stage)) {
|
||||
*vertex_index = nir_ssa_for_src(b, (*p)->arr.index, 1);
|
||||
*array_index = nir_ssa_for_src(b, (*p)->arr.index, 1);
|
||||
p++;
|
||||
}
|
||||
|
||||
|
|
@ -130,12 +130,12 @@ lower_array(nir_builder *b, nir_intrinsic_instr *intr, nir_variable *var,
|
|||
nir_variable **elements =
|
||||
get_array_elements(varyings, var, b->shader->info.stage);
|
||||
|
||||
nir_ssa_def *vertex_index = NULL;
|
||||
nir_ssa_def *array_index = NULL;
|
||||
unsigned elements_index = 0;
|
||||
unsigned xfb_offset = 0;
|
||||
unsigned io_offset = get_io_offset(b, nir_src_as_deref(intr->src[0]),
|
||||
var, &elements_index, &xfb_offset,
|
||||
&vertex_index);
|
||||
&array_index);
|
||||
|
||||
nir_variable *element = elements[elements_index];
|
||||
if (!element) {
|
||||
|
|
@ -165,8 +165,8 @@ lower_array(nir_builder *b, nir_intrinsic_instr *intr, nir_variable *var,
|
|||
nir_deref_instr *element_deref = nir_build_deref_var(b, element);
|
||||
|
||||
if (nir_is_arrayed_io(var, b->shader->info.stage)) {
|
||||
assert(vertex_index);
|
||||
element_deref = nir_build_deref_array(b, element_deref, vertex_index);
|
||||
assert(array_index);
|
||||
element_deref = nir_build_deref_array(b, element_deref, array_index);
|
||||
}
|
||||
|
||||
nir_intrinsic_instr *element_intr =
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue