Mesa (main): st/mesa: remove st_vertex_program::input_to_index
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Aug 2 20:35:19 UTC 2021
Module: Mesa
Branch: main
Commit: 521651d1064a42feb9d21fc1799479619ce50729
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=521651d1064a42feb9d21fc1799479619ce50729
Author: Marek Olšák <marek.olsak at amd.com>
Date: Fri May 28 01:01:51 2021 -0400
st/mesa: remove st_vertex_program::input_to_index
It's the same as a prefix bitcount of inputs_read.
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11370>
---
src/mesa/state_tracker/st_atom_array.c | 11 ++++-------
src/mesa/state_tracker/st_glsl_to_nir.cpp | 2 +-
src/mesa/state_tracker/st_program.c | 24 +++++++++++++++++-------
src/mesa/state_tracker/st_program.h | 5 +----
src/mesa/state_tracker/st_shader_cache.c | 4 ----
5 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/src/mesa/state_tracker/st_atom_array.c b/src/mesa/state_tracker/st_atom_array.c
index 1b1d463a5c7..38e78237cc3 100644
--- a/src/mesa/state_tracker/st_atom_array.c
+++ b/src/mesa/state_tracker/st_atom_array.c
@@ -82,7 +82,6 @@ setup_arrays(struct st_context *st,
const struct gl_vertex_array_object *vao = ctx->Array._DrawVAO;
const GLbitfield inputs_read = vp_variant->vert_attrib_mask;
const GLbitfield dual_slot_inputs = vp->Base.Base.DualSlotInputs;
- const ubyte *input_to_index = vp->input_to_index;
/* Process attribute array data. */
GLbitfield mask = inputs_read & _mesa_draw_array_bits(ctx);
@@ -119,7 +118,7 @@ setup_arrays(struct st_context *st,
init_velement(velements->velems, &attrib->Format, 0,
binding->InstanceDivisor, bufidx,
dual_slot_inputs & BITFIELD_BIT(attr),
- input_to_index[attr]);
+ util_bitcount(inputs_read & BITFIELD_MASK(attr)));
}
return;
}
@@ -161,7 +160,7 @@ setup_arrays(struct st_context *st,
init_velement(velements->velems, &attrib->Format, off,
binding->InstanceDivisor, bufidx,
dual_slot_inputs & BITFIELD_BIT(attr),
- input_to_index[attr]);
+ util_bitcount(inputs_read & BITFIELD_MASK(attr)));
} while (attrmask);
}
}
@@ -198,7 +197,6 @@ st_setup_current(struct st_context *st,
/* Process values that should have better been uniforms in the application */
GLbitfield curmask = inputs_read & _mesa_draw_current_bits(ctx);
if (curmask) {
- const ubyte *input_to_index = vp->input_to_index;
/* For each attribute, upload the maximum possible size. */
GLubyte data[VERT_ATTRIB_MAX * sizeof(GLdouble) * 4];
GLubyte *cursor = data;
@@ -218,7 +216,7 @@ st_setup_current(struct st_context *st,
init_velement(velements->velems, &attrib->Format, cursor - data,
0, bufidx, dual_slot_inputs & BITFIELD_BIT(attr),
- input_to_index[attr]);
+ util_bitcount(inputs_read & BITFIELD_MASK(attr)));
cursor += alignment;
} while (curmask);
@@ -256,7 +254,6 @@ st_setup_current_user(struct st_context *st,
struct gl_context *ctx = st->ctx;
const GLbitfield inputs_read = vp_variant->vert_attrib_mask;
const GLbitfield dual_slot_inputs = vp->Base.Base.DualSlotInputs;
- const ubyte *input_to_index = vp->input_to_index;
/* Process values that should have better been uniforms in the application */
GLbitfield curmask = inputs_read & _mesa_draw_current_bits(ctx);
@@ -269,7 +266,7 @@ st_setup_current_user(struct st_context *st,
init_velement(velements->velems, &attrib->Format, 0, 0,
bufidx, dual_slot_inputs & BITFIELD_BIT(attr),
- input_to_index[attr]);
+ util_bitcount(inputs_read & BITFIELD_MASK(attr)));
vbuffer[bufidx].is_user_buffer = true;
vbuffer[bufidx].buffer.user = attrib->Ptr;
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 303dc084639..182644bda31 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -921,7 +921,7 @@ st_link_nir(struct gl_context *ctx,
/* Initialize st_vertex_program members. */
if (shader->Stage == MESA_SHADER_VERTEX)
- st_prepare_vertex_program(stp);
+ st_prepare_vertex_program(stp, NULL);
/* Get pipe_stream_output_info. */
if (shader->Stage == MESA_SHADER_VERTEX ||
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index aaa9b591e77..25e2eca92b1 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -414,14 +414,20 @@ st_translate_prog_to_nir(struct st_context *st, struct gl_program *prog,
return nir;
}
+/**
+ * Prepare st_vertex_program info.
+ *
+ * attrib_to_index is an optional mapping from a vertex attrib to a shader
+ * input index.
+ */
void
-st_prepare_vertex_program(struct st_program *stp)
+st_prepare_vertex_program(struct st_program *stp, uint8_t *out_attrib_to_index)
{
struct st_vertex_program *stvp = (struct st_vertex_program *)stp;
+ uint8_t attrib_to_index[VERT_ATTRIB_MAX] = {0};
stvp->num_inputs = 0;
stvp->vert_attrib_mask = 0;
- memset(stvp->input_to_index, ~0, sizeof(stvp->input_to_index));
memset(stvp->result_to_output, ~0, sizeof(stvp->result_to_output));
/* Determine number of inputs, the mappings between VERT_ATTRIB_x
@@ -429,14 +435,14 @@ st_prepare_vertex_program(struct st_program *stp)
*/
for (unsigned attr = 0; attr < VERT_ATTRIB_MAX; attr++) {
if ((stp->Base.info.inputs_read & BITFIELD64_BIT(attr)) != 0) {
- stvp->input_to_index[attr] = stvp->num_inputs;
+ attrib_to_index[attr] = stvp->num_inputs;
stvp->vert_attrib_mask |= BITFIELD_BIT(attr);
stvp->num_inputs++;
}
}
/* pre-setup potentially unused edgeflag input */
- stvp->input_to_index[VERT_ATTRIB_EDGEFLAG] = stvp->num_inputs;
+ attrib_to_index[VERT_ATTRIB_EDGEFLAG] = stvp->num_inputs;
/* Compute mapping of vertex program outputs to slots. */
unsigned num_outputs = 0;
@@ -446,6 +452,9 @@ st_prepare_vertex_program(struct st_program *stp)
}
/* pre-setup potentially unused edgeflag output */
stvp->result_to_output[VARYING_SLOT_EDGE] = num_outputs;
+
+ if (out_attrib_to_index)
+ memcpy(out_attrib_to_index, attrib_to_index, sizeof(attrib_to_index));
}
void
@@ -608,11 +617,12 @@ st_translate_vertex_program(struct st_context *st,
MESA_SHADER_VERTEX);
stp->Base.info = stp->Base.nir->info;
- st_prepare_vertex_program(stp);
+ st_prepare_vertex_program(stp, NULL);
return true;
}
- st_prepare_vertex_program(stp);
+ uint8_t input_to_index[VERT_ATTRIB_MAX];
+ st_prepare_vertex_program(stp, input_to_index);
/* Get semantic names and indices. */
for (attr = 0; attr < VARYING_SLOT_MAX; attr++) {
@@ -650,7 +660,7 @@ st_translate_vertex_program(struct st_context *st,
&stp->Base,
/* inputs */
stvp->num_inputs,
- stvp->input_to_index,
+ input_to_index,
NULL, /* inputSlotToAttr */
NULL, /* input semantic name */
NULL, /* input semantic index */
diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h
index 66e165644bb..af8c32fc3cf 100644
--- a/src/mesa/state_tracker/st_program.h
+++ b/src/mesa/state_tracker/st_program.h
@@ -282,10 +282,7 @@ struct st_vertex_program
struct st_program Base;
uint32_t vert_attrib_mask; /**< mask of sourced vertex attribs */
-
ubyte num_inputs;
- /** Map a vertex attrib to a gallium vertex element index. */
- ubyte input_to_index[VERT_ATTRIB_MAX];
/** Maps VARYING_SLOT_x to slot */
ubyte result_to_output[VARYING_SLOT_MAX];
@@ -357,7 +354,7 @@ extern void
st_finalize_nir_before_variants(struct nir_shader *nir);
extern void
-st_prepare_vertex_program(struct st_program *stvp);
+st_prepare_vertex_program(struct st_program *stvp, uint8_t *attrib_to_index);
extern void
st_translate_stream_output_info(struct gl_program *prog);
diff --git a/src/mesa/state_tracker/st_shader_cache.c b/src/mesa/state_tracker/st_shader_cache.c
index 72c7cfa3f37..a69e137f8b1 100644
--- a/src/mesa/state_tracker/st_shader_cache.c
+++ b/src/mesa/state_tracker/st_shader_cache.c
@@ -101,8 +101,6 @@ st_serialise_ir_program(struct gl_context *ctx, struct gl_program *prog,
blob_write_uint32(&blob, stvp->num_inputs);
blob_write_uint32(&blob, stvp->vert_attrib_mask);
- blob_write_bytes(&blob, stvp->input_to_index,
- sizeof(stvp->input_to_index));
blob_write_bytes(&blob, stvp->result_to_output,
sizeof(stvp->result_to_output));
}
@@ -198,8 +196,6 @@ st_deserialise_ir_program(struct gl_context *ctx,
struct st_vertex_program *stvp = (struct st_vertex_program *)stp;
stvp->num_inputs = blob_read_uint32(&blob_reader);
stvp->vert_attrib_mask = blob_read_uint32(&blob_reader);
- blob_copy_bytes(&blob_reader, (uint8_t *) stvp->input_to_index,
- sizeof(stvp->input_to_index));
blob_copy_bytes(&blob_reader, (uint8_t *) stvp->result_to_output,
sizeof(stvp->result_to_output));
}
More information about the mesa-commit
mailing list