Mesa (main): st/mesa: remove st_vertex_program::index_to_input
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Aug 2 20:35:19 UTC 2021
Module: Mesa
Branch: main
Commit: b5c9a695b95b159ed63b8315266ecc2e2e6afdf3
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5c9a695b95b159ed63b8315266ecc2e2e6afdf3
Author: Marek Olšák <marek.olsak at amd.com>
Date: Fri May 28 01:01:51 2021 -0400
st/mesa: remove st_vertex_program::index_to_input
We just need the mask of used vertex attribs.
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_program.c | 14 +++++++-------
src/mesa/state_tracker/st_program.h | 6 +++---
src/mesa/state_tracker/st_shader_cache.c | 6 ++----
3 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 81c6622ef79..aaa9b591e77 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -420,6 +420,7 @@ st_prepare_vertex_program(struct st_program *stp)
struct st_vertex_program *stvp = (struct st_vertex_program *)stp;
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));
@@ -429,13 +430,13 @@ 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;
- stvp->index_to_input[stvp->num_inputs] = attr;
+ 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;
- stvp->index_to_input[stvp->num_inputs] = VERT_ATTRIB_EDGEFLAG;
/* Compute mapping of vertex program outputs to slots. */
unsigned num_outputs = 0;
@@ -975,11 +976,10 @@ st_get_common_variant(struct st_context *st,
if (stp->Base.info.stage == MESA_SHADER_VERTEX) {
struct st_vertex_program *stvp = (struct st_vertex_program *)stp;
- unsigned num_inputs = stvp->num_inputs + key->passthrough_edgeflags;
- for (unsigned index = 0; index < num_inputs; ++index) {
- unsigned attr = stvp->index_to_input[index];
- v->vert_attrib_mask |= 1u << attr;
- }
+
+ v->vert_attrib_mask =
+ stvp->vert_attrib_mask |
+ (key->passthrough_edgeflags ? VERT_BIT_EDGEFLAG : 0);
}
st_add_variant(&stp->variants, &v->base);
diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h
index ad8ffd0681c..66e165644bb 100644
--- a/src/mesa/state_tracker/st_program.h
+++ b/src/mesa/state_tracker/st_program.h
@@ -281,10 +281,10 @@ struct st_vertex_program
{
struct st_program Base;
- /** maps a TGSI input index back to a Mesa VERT_ATTRIB_x */
- ubyte index_to_input[PIPE_MAX_ATTRIBS];
+ uint32_t vert_attrib_mask; /**< mask of sourced vertex attribs */
+
ubyte num_inputs;
- /** Reverse mapping of the above */
+ /** Map a vertex attrib to a gallium vertex element index. */
ubyte input_to_index[VERT_ATTRIB_MAX];
/** Maps VARYING_SLOT_x to slot */
diff --git a/src/mesa/state_tracker/st_shader_cache.c b/src/mesa/state_tracker/st_shader_cache.c
index 1dde99c9752..72c7cfa3f37 100644
--- a/src/mesa/state_tracker/st_shader_cache.c
+++ b/src/mesa/state_tracker/st_shader_cache.c
@@ -100,8 +100,7 @@ st_serialise_ir_program(struct gl_context *ctx, struct gl_program *prog,
struct st_vertex_program *stvp = (struct st_vertex_program *)stp;
blob_write_uint32(&blob, stvp->num_inputs);
- blob_write_bytes(&blob, stvp->index_to_input,
- sizeof(stvp->index_to_input));
+ 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,
@@ -198,8 +197,7 @@ st_deserialise_ir_program(struct gl_context *ctx,
if (prog->info.stage == MESA_SHADER_VERTEX) {
struct st_vertex_program *stvp = (struct st_vertex_program *)stp;
stvp->num_inputs = blob_read_uint32(&blob_reader);
- blob_copy_bytes(&blob_reader, (uint8_t *) stvp->index_to_input,
- sizeof(stvp->index_to_input));
+ 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,
More information about the mesa-commit
mailing list