Commit e1906ae9 authored by Keith Whitwell's avatar Keith Whitwell

st/mesa: remove duplicate calculation of fp input mapping

This was being calculated the same way in two different places.
Now just do it in st_translate_fragment_program().
parent d51b0432
......@@ -60,26 +60,10 @@ static void
translate_fp(struct st_context *st,
struct st_fragment_program *stfp)
{
const GLbitfield fragInputsRead = stfp->Base.Base.InputsRead;
if (!stfp->state.tokens) {
GLuint inAttr, numIn = 0;
for (inAttr = 0; inAttr < FRAG_ATTRIB_MAX; inAttr++) {
if (fragInputsRead & (1 << inAttr)) {
stfp->input_to_slot[inAttr] = numIn;
numIn++;
}
else {
stfp->input_to_slot[inAttr] = -1;
}
}
stfp->num_input_slots = numIn;
assert(stfp->Base.Base.NumInstructions > 0);
st_translate_fragment_program(st, stfp, stfp->input_to_slot);
st_translate_fragment_program(st, stfp);
}
}
......
......@@ -221,7 +221,7 @@ combined_bitmap_fragment_program(GLcontext *ctx)
#endif
/* translate to TGSI tokens */
st_translate_fragment_program(st, stfp->bitmap_program, NULL);
st_translate_fragment_program(st, stfp->bitmap_program);
}
return stfp->bitmap_program;
......
......@@ -140,7 +140,7 @@ combined_drawpix_fragment_program(GLcontext *ctx)
#endif
/* translate to TGSI tokens */
st_translate_fragment_program(st, stfp, NULL);
st_translate_fragment_program(st, stfp);
/* save new program, update serial numbers */
st->pixel_xfer.xfer_prog_sn = st->pixel_xfer.program->serialNo;
......@@ -221,7 +221,7 @@ make_fragment_shader_z(struct st_context *st)
p->SamplersUsed = 0x1; /* sampler 0 (bit 0) is used */
st->drawpix.z_shader = (struct st_fragment_program *) p;
st_translate_fragment_program(st, st->drawpix.z_shader, NULL);
st_translate_fragment_program(st, st->drawpix.z_shader);
return st->drawpix.z_shader;
}
......
......@@ -269,18 +269,15 @@ fail:
/**
* Translate a Mesa fragment shader into a TGSI shader.
* \param inputMapping to map fragment program input registers to TGSI
* input slots
* \return pointer to cached pipe_shader object.
*/
void
st_translate_fragment_program(struct st_context *st,
struct st_fragment_program *stfp,
const GLuint inputMapping[])
struct st_fragment_program *stfp )
{
struct pipe_context *pipe = st->pipe;
GLuint outputMapping[FRAG_RESULT_MAX];
GLuint defaultInputMapping[FRAG_ATTRIB_MAX];
GLuint inputMapping[FRAG_ATTRIB_MAX];
GLuint interpMode[16]; /* XXX size? */
GLuint attr;
enum pipe_error error;
......@@ -298,11 +295,9 @@ st_translate_fragment_program(struct st_context *st,
*/
for (attr = 0; attr < FRAG_ATTRIB_MAX; attr++) {
if (inputsRead & (1 << attr)) {
const GLuint slot = fs_num_inputs;
const GLuint slot = fs_num_inputs++;
defaultInputMapping[attr] = slot;
fs_num_inputs++;
inputMapping[attr] = slot;
switch (attr) {
case FRAG_ATTRIB_WPOS:
......@@ -367,6 +362,9 @@ st_translate_fragment_program(struct st_context *st,
break;
}
}
else {
inputMapping[attr] = -1;
}
}
/*
......@@ -408,9 +406,6 @@ st_translate_fragment_program(struct st_context *st,
}
}
if (!inputMapping)
inputMapping = defaultInputMapping;
ureg = ureg_create( TGSI_PROCESSOR_FRAGMENT );
if (ureg == NULL)
return;
......
......@@ -52,9 +52,6 @@ struct st_fragment_program
struct gl_fragment_program Base;
GLuint serialNo;
GLuint input_to_slot[FRAG_ATTRIB_MAX]; /**< Maps FRAG_ATTRIB_x to slot */
GLuint num_input_slots;
ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS];
ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS];
......@@ -168,8 +165,7 @@ st_reference_fragprog(struct st_context *st,
extern void
st_translate_fragment_program(struct st_context *st,
struct st_fragment_program *fp,
const GLuint inputMapping[]);
struct st_fragment_program *fp);
/* Called after program string change, discard all previous
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment