Mesa (master): r600: update vertex program selection for draw path

Andre Maasikas andrem at kemper.freedesktop.org
Mon Oct 5 10:42:49 UTC 2009


Module: Mesa
Branch: master
Commit: 0b032eabc77d0e28fc0746cbd8ffb94859fd130d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b032eabc77d0e28fc0746cbd8ffb94859fd130d

Author: Andre Maasikas <amaasikas at gmail.com>
Date:   Mon Oct  5 12:53:40 2009 +0300

r600: update vertex program selection for draw path

---

 src/mesa/drivers/dri/r600/r700_vertprog.c |   40 +++++++++++++++++++++++++---
 1 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_vertprog.c b/src/mesa/drivers/dri/r600/r700_vertprog.c
index e7a209b..d12c39c 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;




More information about the mesa-commit mailing list