mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 20:18:12 +02:00
r6xx/r7xx: fix buffer aging bug
We were using sparse indexing for aos, while the common code expected packed indexing.
This commit is contained in:
parent
9ae78dc0bc
commit
9385e4e1ff
2 changed files with 32 additions and 27 deletions
|
|
@ -355,7 +355,7 @@ int r700SetupStreams(GLcontext * ctx)
|
|||
struct vertex_buffer *vb = &tnl->vb;
|
||||
|
||||
unsigned int unBit;
|
||||
unsigned int i;
|
||||
unsigned int i, j = 0;
|
||||
|
||||
BEGIN_BATCH_NO_AUTOSTATE(6);
|
||||
R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_CTL_CONST, 1));
|
||||
|
|
@ -374,21 +374,23 @@ int r700SetupStreams(GLcontext * ctx)
|
|||
unBit = 1 << i;
|
||||
if(vpc->mesa_program.Base.InputsRead & unBit)
|
||||
{
|
||||
rcommon_emit_vector(ctx,
|
||||
&context->radeon.tcl.aos[i],
|
||||
vb->AttribPtr[i]->data,
|
||||
vb->AttribPtr[i]->size,
|
||||
vb->AttribPtr[i]->stride,
|
||||
vb->Count);
|
||||
|
||||
/* currently aos are packed */
|
||||
r700SetupVTXConstants(ctx,
|
||||
i,
|
||||
(void*)(&context->radeon.tcl.aos[i]),
|
||||
(unsigned int)context->radeon.tcl.aos[i].components,
|
||||
(unsigned int)context->radeon.tcl.aos[i].stride * 4,
|
||||
(unsigned int)context->radeon.tcl.aos[i].count);
|
||||
if (!context->radeon.tcl.aos[j].bo) {
|
||||
rcommon_emit_vector(ctx,
|
||||
&context->radeon.tcl.aos[j],
|
||||
vb->AttribPtr[i]->data,
|
||||
vb->AttribPtr[i]->size,
|
||||
vb->AttribPtr[i]->stride,
|
||||
vb->Count);
|
||||
|
||||
/* currently aos are packed */
|
||||
r700SetupVTXConstants(ctx,
|
||||
j,
|
||||
(void*)(&context->radeon.tcl.aos[j]),
|
||||
(unsigned int)context->radeon.tcl.aos[j].components,
|
||||
(unsigned int)context->radeon.tcl.aos[j].stride * 4,
|
||||
(unsigned int)context->radeon.tcl.aos[j].count);
|
||||
j++;
|
||||
}
|
||||
context->radeon.tcl.aos_count++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ unsigned int Map_Vertex_Input(r700_AssemblerBase *pAsm,
|
|||
struct gl_vertex_program *mesa_vp,
|
||||
unsigned int unStart)
|
||||
{
|
||||
int i;
|
||||
int i, j = 0;
|
||||
unsigned int unBit;
|
||||
unsigned int unTotal = unStart;
|
||||
for(i=0; i<VERT_ATTRIB_MAX; i++)
|
||||
|
|
@ -123,7 +123,8 @@ unsigned int Map_Vertex_Input(r700_AssemblerBase *pAsm,
|
|||
unBit = 1 << i;
|
||||
if(mesa_vp->Base.InputsRead & unBit)
|
||||
{
|
||||
pAsm->ucVP_AttributeMap[i] = unTotal++;
|
||||
pAsm->ucVP_AttributeMap[j] = unTotal++;
|
||||
j++;
|
||||
}
|
||||
}
|
||||
return (unTotal - unStart);
|
||||
|
|
@ -133,7 +134,7 @@ GLboolean Process_Vertex_Program_Vfetch_Instructions(
|
|||
struct r700_vertex_program *vp,
|
||||
struct gl_vertex_program *mesa_vp)
|
||||
{
|
||||
int i;
|
||||
int i, j = 0;
|
||||
unsigned int unBit;
|
||||
VTX_FETCH_METHOD vtxFetchMethod;
|
||||
vtxFetchMethod.bEnableMini = GL_FALSE;
|
||||
|
|
@ -145,11 +146,12 @@ GLboolean Process_Vertex_Program_Vfetch_Instructions(
|
|||
if(mesa_vp->Base.InputsRead & unBit)
|
||||
{
|
||||
assemble_vfetch_instruction(&vp->r700AsmCode,
|
||||
i,
|
||||
vp->r700AsmCode.ucVP_AttributeMap[i],
|
||||
vp->aos_desc[i].size,
|
||||
vp->aos_desc[i].type,
|
||||
&vtxFetchMethod);
|
||||
j,
|
||||
vp->r700AsmCode.ucVP_AttributeMap[j],
|
||||
vp->aos_desc[j].size,
|
||||
vp->aos_desc[j].type,
|
||||
&vtxFetchMethod);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -305,15 +307,16 @@ void r700SelectVertexShader(GLcontext *ctx)
|
|||
struct vertex_buffer *vb = &tnl->vb;
|
||||
|
||||
unsigned int unBit;
|
||||
unsigned int i;
|
||||
unsigned int i, j = 0;
|
||||
for(i=0; i<VERT_ATTRIB_MAX; i++)
|
||||
{
|
||||
unBit = 1 << i;
|
||||
if(vpc->mesa_program.Base.InputsRead & unBit) /* ctx->Array.ArrayObj->xxxxxxx */
|
||||
{
|
||||
vpc->aos_desc[i].size = vb->AttribPtr[i]->size;
|
||||
vpc->aos_desc[i].stride = vb->AttribPtr[i]->size * sizeof(GL_FLOAT);/* when emit array, data is packed. vb->AttribPtr[i]->stride;*/
|
||||
vpc->aos_desc[i].type = GL_FLOAT;
|
||||
vpc->aos_desc[j].size = vb->AttribPtr[i]->size;
|
||||
vpc->aos_desc[j].stride = vb->AttribPtr[i]->size * sizeof(GL_FLOAT);/* when emit array, data is packed. vb->AttribPtr[i]->stride;*/
|
||||
vpc->aos_desc[j].type = GL_FLOAT;
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue