summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r600
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri/r600')
-rw-r--r--src/mesa/drivers/dri/r600/r700_render.c2
-rw-r--r--src/mesa/drivers/dri/r600/r700_vertprog.c40
2 files changed, 36 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/r600/r700_render.c b/src/mesa/drivers/dri/r600/r700_render.c
index 0aef0b7ea1..4f39d9f1bd 100644
--- a/src/mesa/drivers/dri/r600/r700_render.c
+++ b/src/mesa/drivers/dri/r600/r700_render.c
@@ -960,7 +960,6 @@ static GLboolean r700TryDrawPrims(GLcontext *ctx,
_tnl_UpdateFixedFunctionProgram(ctx);
r700SetVertexFormat(ctx, arrays, max_index + 1);
- r700SetupIndexBuffer(ctx, ib);
/* shaders need to be updated before buffers are validated */
r700UpdateShaders2(ctx);
if (!r600ValidateBuffers(ctx))
@@ -981,6 +980,7 @@ static GLboolean r700TryDrawPrims(GLcontext *ctx,
GLuint emit_end = r700PredictRenderSize(ctx, nr_prims)
+ context->radeon.cmdbuf.cs->cdw;
+ r700SetupIndexBuffer(ctx, ib);
r700SetupStreams2(ctx, arrays, max_index + 1);
radeonEmitState(radeon);
diff --git a/src/mesa/drivers/dri/r600/r700_vertprog.c b/src/mesa/drivers/dri/r600/r700_vertprog.c
index e7a209be9d..d12c39c9f7 100644
--- a/src/mesa/drivers/dri/r600/r700_vertprog.c
+++ b/src/mesa/drivers/dri/r600/r700_vertprog.c
@@ -319,8 +319,10 @@ struct r700_vertex_program* r700TranslateVertexShader(GLcontext *ctx,
_mesa_insert_mvp_code(ctx, vp->mesa_program);
}
- for(i=0; i<VERT_ATTRIB_MAX; i++)
+ if( 1 == nVer )
{
+ for(i=0; i<VERT_ATTRIB_MAX; i++)
+ {
unBit = 1 << i;
if(vp->mesa_program->Base.InputsRead & unBit) /* ctx->Array.ArrayObj->xxxxxxx */
{
@@ -328,7 +330,17 @@ struct r700_vertex_program* r700TranslateVertexShader(GLcontext *ctx,
vp->aos_desc[i].stride = vb->AttribPtr[i]->size * sizeof(GL_FLOAT);/* when emit array, data is packed. vb->AttribPtr[i]->stride;*/
vp->aos_desc[i].type = GL_FLOAT;
}
+ }
}
+ else
+ {
+ for(i=0; i<context->nNumActiveAos; i++)
+ {
+ vp->aos_desc[i].size = context->stream_desc[i].size;
+ vp->aos_desc[i].stride = context->stream_desc[i].stride;
+ vp->aos_desc[i].type = context->stream_desc[i].type;
+ }
+ }
if (context->radeon.radeonScreen->chip_family < CHIP_FAMILY_RV770)
{
@@ -388,17 +400,35 @@ void r700SelectVertexShader(GLcontext *ctx, GLint nVersion)
for (vp = vpc->progs; vp; vp = vp->next)
{
+ if (vp->uiVersion != nVersion )
+ continue;
match = GL_TRUE;
- for(i=0; i<VERT_ATTRIB_MAX; i++)
+ if ( 1 == nVersion )
{
+ for(i=0; i<VERT_ATTRIB_MAX; i++)
+ {
unBit = 1 << i;
if(InputsRead & unBit)
{
- if (vp->aos_desc[i].size != vb->AttribPtr[i]->size)
- match = GL_FALSE;
- break;
+ if (vp->aos_desc[i].size != vb->AttribPtr[i]->size)
+ {
+ match = GL_FALSE;
+ break;
+ }
}
+ }
}
+ else
+ {
+ for(i=0; i<context->nNumActiveAos; i++)
+ {
+ if (vp->aos_desc[i].size != context->stream_desc[i].size)
+ {
+ match = GL_FALSE;
+ break;
+ }
+ }
+ }
if (match)
{
context->selected_vp = vp;