mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-21 00:00:22 +01:00
nouveau: maintain a map of which vtxprog input corresponds to which array
This commit is contained in:
parent
0c5b42a991
commit
cafbc459f5
2 changed files with 47 additions and 0 deletions
|
|
@ -55,6 +55,7 @@ typedef struct _nouveauShader {
|
|||
int inst_count;
|
||||
|
||||
nvsCardPriv card_priv;
|
||||
int vp_attrib_map[NVS_MAX_ATTRIBS];
|
||||
|
||||
struct {
|
||||
GLfloat *source_val; /* NULL if invariant */
|
||||
|
|
|
|||
|
|
@ -787,6 +787,50 @@ pass0_translate_instructions(nouveauShader *nvs, int ipos, int fpos,
|
|||
return GL_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
pass0_build_attrib_map(nouveauShader *nvs, struct gl_vertex_program *vp)
|
||||
{
|
||||
GLuint inputs_read = vp->Base.InputsRead;
|
||||
GLuint input_alloc = ~0xFFFF;
|
||||
int i;
|
||||
|
||||
for (i=0; i<NVS_MAX_ATTRIBS; i++)
|
||||
nvs->vp_attrib_map[i] = -1;
|
||||
|
||||
while (inputs_read) {
|
||||
int in = ffs(inputs_read) - 1;
|
||||
int hw;
|
||||
inputs_read &= ~(1<<in);
|
||||
|
||||
if (vp->IsNVProgram) {
|
||||
/* NVvp: must alias */
|
||||
if (in >= VERT_ATTRIB_GENERIC0)
|
||||
hw = in - VERT_ATTRIB_GENERIC0;
|
||||
else
|
||||
hw = in;
|
||||
} else {
|
||||
/* ARBvp: may alias
|
||||
* GL2.0: must not alias
|
||||
*/
|
||||
if (in >= VERT_ATTRIB_GENERIC0)
|
||||
hw = ffs(~input_alloc) - 1;
|
||||
else
|
||||
hw = in;
|
||||
input_alloc |= (1<<hw);
|
||||
}
|
||||
|
||||
nvs->vp_attrib_map[hw] = in;
|
||||
}
|
||||
|
||||
if (NOUVEAU_DEBUG & DEBUG_SHADERS) {
|
||||
printf("vtxprog attrib map:\n");
|
||||
for (i=0; i<NVS_MAX_ATTRIBS; i++) {
|
||||
printf(" hw:%d = attrib:%d\n",
|
||||
i, nvs->vp_attrib_map[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GLboolean
|
||||
nouveau_shader_pass0(GLcontext *ctx, nouveauShader *nvs)
|
||||
{
|
||||
|
|
@ -801,6 +845,8 @@ nouveau_shader_pass0(GLcontext *ctx, nouveauShader *nvs)
|
|||
case GL_VERTEX_PROGRAM_ARB:
|
||||
nvs->func = &nmesa->VPfunc;
|
||||
|
||||
pass0_build_attrib_map(nvs, vp);
|
||||
|
||||
if (vp->IsPositionInvariant)
|
||||
_mesa_insert_mvp_code(ctx, vp);
|
||||
#if 0
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue