st/mesa: decrease the size of st_vertex_program
The other variables can't be moved. Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Brian Paul <brianp@vmware.com> Tested-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
@@ -239,11 +239,14 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
struct pipe_context *pipe = st->pipe;
|
struct pipe_context *pipe = st->pipe;
|
||||||
struct ureg_program *ureg;
|
struct ureg_program *ureg;
|
||||||
enum pipe_error error;
|
enum pipe_error error;
|
||||||
unsigned num_outputs;
|
unsigned num_outputs = 0;
|
||||||
GLuint attr;
|
unsigned attr;
|
||||||
|
unsigned input_to_index[VERT_ATTRIB_MAX] = {0};
|
||||||
|
unsigned output_slot_to_attr[VARYING_SLOT_MAX] = {0};
|
||||||
|
ubyte output_semantic_name[VARYING_SLOT_MAX] = {0};
|
||||||
|
ubyte output_semantic_index[VARYING_SLOT_MAX] = {0};
|
||||||
|
|
||||||
stvp->num_inputs = 0;
|
stvp->num_inputs = 0;
|
||||||
stvp->num_outputs = 0;
|
|
||||||
|
|
||||||
if (stvp->Base.IsPositionInvariant)
|
if (stvp->Base.IsPositionInvariant)
|
||||||
_mesa_insert_mvp_code(st->ctx, &stvp->Base);
|
_mesa_insert_mvp_code(st->ctx, &stvp->Base);
|
||||||
@@ -254,7 +257,7 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
*/
|
*/
|
||||||
for (attr = 0; attr < VERT_ATTRIB_MAX; attr++) {
|
for (attr = 0; attr < VERT_ATTRIB_MAX; attr++) {
|
||||||
if ((stvp->Base.Base.InputsRead & BITFIELD64_BIT(attr)) != 0) {
|
if ((stvp->Base.Base.InputsRead & BITFIELD64_BIT(attr)) != 0) {
|
||||||
stvp->input_to_index[attr] = stvp->num_inputs;
|
input_to_index[attr] = stvp->num_inputs;
|
||||||
stvp->index_to_input[stvp->num_inputs] = attr;
|
stvp->index_to_input[stvp->num_inputs] = attr;
|
||||||
stvp->num_inputs++;
|
stvp->num_inputs++;
|
||||||
if ((stvp->Base.Base.DoubleInputsRead & BITFIELD64_BIT(attr)) != 0) {
|
if ((stvp->Base.Base.DoubleInputsRead & BITFIELD64_BIT(attr)) != 0) {
|
||||||
@@ -265,7 +268,7 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* bit of a hack, presetup potentially unused edgeflag input */
|
/* bit of a hack, presetup potentially unused edgeflag input */
|
||||||
stvp->input_to_index[VERT_ATTRIB_EDGEFLAG] = stvp->num_inputs;
|
input_to_index[VERT_ATTRIB_EDGEFLAG] = stvp->num_inputs;
|
||||||
stvp->index_to_input[stvp->num_inputs] = VERT_ATTRIB_EDGEFLAG;
|
stvp->index_to_input[stvp->num_inputs] = VERT_ATTRIB_EDGEFLAG;
|
||||||
|
|
||||||
/* Compute mapping of vertex program outputs to slots.
|
/* Compute mapping of vertex program outputs to slots.
|
||||||
@@ -275,62 +278,62 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
stvp->result_to_output[attr] = ~0;
|
stvp->result_to_output[attr] = ~0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
unsigned slot = stvp->num_outputs++;
|
unsigned slot = num_outputs++;
|
||||||
|
|
||||||
stvp->result_to_output[attr] = slot;
|
stvp->result_to_output[attr] = slot;
|
||||||
stvp->output_slot_to_attr[slot] = attr;
|
output_slot_to_attr[slot] = attr;
|
||||||
|
|
||||||
switch (attr) {
|
switch (attr) {
|
||||||
case VARYING_SLOT_POS:
|
case VARYING_SLOT_POS:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_POSITION;
|
output_semantic_name[slot] = TGSI_SEMANTIC_POSITION;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_COL0:
|
case VARYING_SLOT_COL0:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
|
output_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_COL1:
|
case VARYING_SLOT_COL1:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
|
output_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
|
||||||
stvp->output_semantic_index[slot] = 1;
|
output_semantic_index[slot] = 1;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_BFC0:
|
case VARYING_SLOT_BFC0:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_BCOLOR;
|
output_semantic_name[slot] = TGSI_SEMANTIC_BCOLOR;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_BFC1:
|
case VARYING_SLOT_BFC1:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_BCOLOR;
|
output_semantic_name[slot] = TGSI_SEMANTIC_BCOLOR;
|
||||||
stvp->output_semantic_index[slot] = 1;
|
output_semantic_index[slot] = 1;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_FOGC:
|
case VARYING_SLOT_FOGC:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_FOG;
|
output_semantic_name[slot] = TGSI_SEMANTIC_FOG;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_PSIZ:
|
case VARYING_SLOT_PSIZ:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_PSIZE;
|
output_semantic_name[slot] = TGSI_SEMANTIC_PSIZE;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_CLIP_DIST0:
|
case VARYING_SLOT_CLIP_DIST0:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_CLIPDIST;
|
output_semantic_name[slot] = TGSI_SEMANTIC_CLIPDIST;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_CLIP_DIST1:
|
case VARYING_SLOT_CLIP_DIST1:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_CLIPDIST;
|
output_semantic_name[slot] = TGSI_SEMANTIC_CLIPDIST;
|
||||||
stvp->output_semantic_index[slot] = 1;
|
output_semantic_index[slot] = 1;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_EDGE:
|
case VARYING_SLOT_EDGE:
|
||||||
assert(0);
|
assert(0);
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_CLIP_VERTEX:
|
case VARYING_SLOT_CLIP_VERTEX:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_CLIPVERTEX;
|
output_semantic_name[slot] = TGSI_SEMANTIC_CLIPVERTEX;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_LAYER:
|
case VARYING_SLOT_LAYER:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_LAYER;
|
output_semantic_name[slot] = TGSI_SEMANTIC_LAYER;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
case VARYING_SLOT_VIEWPORT:
|
case VARYING_SLOT_VIEWPORT:
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_VIEWPORT_INDEX;
|
output_semantic_name[slot] = TGSI_SEMANTIC_VIEWPORT_INDEX;
|
||||||
stvp->output_semantic_index[slot] = 0;
|
output_semantic_index[slot] = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VARYING_SLOT_TEX0:
|
case VARYING_SLOT_TEX0:
|
||||||
@@ -342,8 +345,8 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
case VARYING_SLOT_TEX6:
|
case VARYING_SLOT_TEX6:
|
||||||
case VARYING_SLOT_TEX7:
|
case VARYING_SLOT_TEX7:
|
||||||
if (st->needs_texcoord_semantic) {
|
if (st->needs_texcoord_semantic) {
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_TEXCOORD;
|
output_semantic_name[slot] = TGSI_SEMANTIC_TEXCOORD;
|
||||||
stvp->output_semantic_index[slot] = attr - VARYING_SLOT_TEX0;
|
output_semantic_index[slot] = attr - VARYING_SLOT_TEX0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
@@ -351,17 +354,17 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
default:
|
default:
|
||||||
assert(attr >= VARYING_SLOT_VAR0 ||
|
assert(attr >= VARYING_SLOT_VAR0 ||
|
||||||
(attr >= VARYING_SLOT_TEX0 && attr <= VARYING_SLOT_TEX7));
|
(attr >= VARYING_SLOT_TEX0 && attr <= VARYING_SLOT_TEX7));
|
||||||
stvp->output_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
|
output_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
|
||||||
stvp->output_semantic_index[slot] =
|
output_semantic_index[slot] =
|
||||||
st_get_generic_varying_index(st, attr);
|
st_get_generic_varying_index(st, attr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* similar hack to above, presetup potentially unused edgeflag output */
|
/* similar hack to above, presetup potentially unused edgeflag output */
|
||||||
stvp->result_to_output[VARYING_SLOT_EDGE] = stvp->num_outputs;
|
stvp->result_to_output[VARYING_SLOT_EDGE] = num_outputs;
|
||||||
stvp->output_semantic_name[stvp->num_outputs] = TGSI_SEMANTIC_EDGEFLAG;
|
output_semantic_name[num_outputs] = TGSI_SEMANTIC_EDGEFLAG;
|
||||||
stvp->output_semantic_index[stvp->num_outputs] = 0;
|
output_semantic_index[num_outputs] = 0;
|
||||||
|
|
||||||
if (!stvp->glsl_to_tgsi)
|
if (!stvp->glsl_to_tgsi)
|
||||||
_mesa_remove_output_reads(&stvp->Base.Base, PROGRAM_OUTPUT);
|
_mesa_remove_output_reads(&stvp->Base.Base, PROGRAM_OUTPUT);
|
||||||
@@ -375,7 +378,6 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
vpv->key = *key;
|
vpv->key = *key;
|
||||||
|
|
||||||
vpv->num_inputs = stvp->num_inputs;
|
vpv->num_inputs = stvp->num_inputs;
|
||||||
num_outputs = stvp->num_outputs;
|
|
||||||
if (key->passthrough_edgeflags) {
|
if (key->passthrough_edgeflags) {
|
||||||
vpv->num_inputs++;
|
vpv->num_inputs++;
|
||||||
num_outputs++;
|
num_outputs++;
|
||||||
@@ -395,7 +397,7 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
&stvp->Base.Base,
|
&stvp->Base.Base,
|
||||||
/* inputs */
|
/* inputs */
|
||||||
vpv->num_inputs,
|
vpv->num_inputs,
|
||||||
stvp->input_to_index,
|
input_to_index,
|
||||||
NULL, /* inputSlotToAttr */
|
NULL, /* inputSlotToAttr */
|
||||||
NULL, /* input semantic name */
|
NULL, /* input semantic name */
|
||||||
NULL, /* input semantic index */
|
NULL, /* input semantic index */
|
||||||
@@ -404,9 +406,9 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
/* outputs */
|
/* outputs */
|
||||||
num_outputs,
|
num_outputs,
|
||||||
stvp->result_to_output,
|
stvp->result_to_output,
|
||||||
stvp->output_slot_to_attr,
|
output_slot_to_attr,
|
||||||
stvp->output_semantic_name,
|
output_semantic_name,
|
||||||
stvp->output_semantic_index,
|
output_semantic_index,
|
||||||
key->passthrough_edgeflags,
|
key->passthrough_edgeflags,
|
||||||
key->clamp_color);
|
key->clamp_color);
|
||||||
else
|
else
|
||||||
@@ -416,15 +418,15 @@ st_translate_vertex_program(struct st_context *st,
|
|||||||
&stvp->Base.Base,
|
&stvp->Base.Base,
|
||||||
/* inputs */
|
/* inputs */
|
||||||
vpv->num_inputs,
|
vpv->num_inputs,
|
||||||
stvp->input_to_index,
|
input_to_index,
|
||||||
NULL, /* input semantic name */
|
NULL, /* input semantic name */
|
||||||
NULL, /* input semantic index */
|
NULL, /* input semantic index */
|
||||||
NULL,
|
NULL,
|
||||||
/* outputs */
|
/* outputs */
|
||||||
num_outputs,
|
num_outputs,
|
||||||
stvp->result_to_output,
|
stvp->result_to_output,
|
||||||
stvp->output_semantic_name,
|
output_semantic_name,
|
||||||
stvp->output_semantic_index,
|
output_semantic_index,
|
||||||
key->passthrough_edgeflags,
|
key->passthrough_edgeflags,
|
||||||
key->clamp_color);
|
key->clamp_color);
|
||||||
|
|
||||||
|
@@ -156,17 +156,12 @@ struct st_vertex_program
|
|||||||
struct glsl_to_tgsi_visitor* glsl_to_tgsi;
|
struct glsl_to_tgsi_visitor* glsl_to_tgsi;
|
||||||
|
|
||||||
/** maps a Mesa VERT_ATTRIB_x to a packed TGSI input index */
|
/** maps a Mesa VERT_ATTRIB_x to a packed TGSI input index */
|
||||||
GLuint input_to_index[VERT_ATTRIB_MAX];
|
|
||||||
/** maps a TGSI input index back to a Mesa VERT_ATTRIB_x */
|
/** maps a TGSI input index back to a Mesa VERT_ATTRIB_x */
|
||||||
GLuint index_to_input[PIPE_MAX_SHADER_INPUTS];
|
GLuint index_to_input[PIPE_MAX_SHADER_INPUTS];
|
||||||
GLuint num_inputs;
|
GLuint num_inputs;
|
||||||
|
|
||||||
/** Maps VARYING_SLOT_x to slot */
|
/** Maps VARYING_SLOT_x to slot */
|
||||||
GLuint result_to_output[VARYING_SLOT_MAX];
|
GLuint result_to_output[VARYING_SLOT_MAX];
|
||||||
GLuint output_slot_to_attr[VARYING_SLOT_MAX];
|
|
||||||
ubyte output_semantic_name[VARYING_SLOT_MAX];
|
|
||||||
ubyte output_semantic_index[VARYING_SLOT_MAX];
|
|
||||||
GLuint num_outputs;
|
|
||||||
|
|
||||||
/** List of translated variants of this vertex program.
|
/** List of translated variants of this vertex program.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user