Mesa (radeon-rewrite): r300: vertex array stride = 0 means that data are tightly packed in the array

Dave Airlie airlied at kemper.freedesktop.org
Sun Jun 7 06:49:55 UTC 2009


Module: Mesa
Branch: radeon-rewrite
Commit: 58982f8af1496c4860fb7bf3e815977ed4a753ff
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=58982f8af1496c4860fb7bf3e815977ed4a753ff

Author: Maciej Cencora <m.cencora at gmail.com>
Date:   Fri Jun  5 17:58:04 2009 +0200

r300: vertex array stride = 0 means that data are tightly packed in the array

---

 src/mesa/drivers/dri/r300/r300_draw.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/r300_draw.c b/src/mesa/drivers/dri/r300/r300_draw.c
index c9588fb..684b1d0 100644
--- a/src/mesa/drivers/dri/r300/r300_draw.c
+++ b/src/mesa/drivers/dri/r300/r300_draw.c
@@ -123,7 +123,7 @@ static int getTypeSize(GLenum type)
 				*dst_ptr++ = MACRO(*in);		\
 				in++;				\
 			}					\
-			src_ptr += input->StrideB;			\
+			src_ptr += stride;			\
 		}						\
 	} else {					\
 		for (i = 0; i < count; i++) {		\
@@ -132,7 +132,7 @@ static int getTypeSize(GLenum type)
 				*dst_ptr++ = (GLfloat)(*in);		\
 				in++;				\
 			}					\
-			src_ptr += input->StrideB;			\
+			src_ptr += stride;			\
 		}						\
 	}						\
 } while (0)
@@ -144,6 +144,7 @@ static void r300TranslateAttrib(GLcontext *ctx, GLuint attr, int count, const st
 	struct vertex_attribute r300_attr;
 	const void *src_ptr;
 	GLenum type;
+	GLuint stride;
 
 	if (input->BufferObj->Name) {
 		if (!input->BufferObj->Pointer) {
@@ -157,10 +158,12 @@ static void r300TranslateAttrib(GLcontext *ctx, GLuint attr, int count, const st
 	} else
 		src_ptr = input->Ptr;
 
-	if (input->Type == GL_DOUBLE || input->Type == GL_UNSIGNED_INT || input->Type == GL_INT || input->StrideB < 4){
+	stride = (input->StrideB == 0) ? getTypeSize(input->Type) * input->Size : input->StrideB;
+
+	if (input->Type == GL_DOUBLE || input->Type == GL_UNSIGNED_INT || input->Type == GL_INT || stride < 4){
 		if (RADEON_DEBUG & DEBUG_FALLBACKS) {
 			fprintf(stderr, "%s: Converting vertex attributes, attribute data format %x,", __FUNCTION__, input->Type);
-			fprintf(stderr, "stride %d, components %d\n", input->StrideB, input->Size);
+			fprintf(stderr, "stride %d, components %d\n", stride, input->Size);
 		}
 
 		GLfloat *dst_ptr, *tmp;
@@ -203,7 +206,7 @@ static void r300TranslateAttrib(GLcontext *ctx, GLuint attr, int count, const st
 		type = input->Type;
 		r300_attr.free_needed = GL_FALSE;
 		r300_attr.data = (GLvoid *)src_ptr;
-		r300_attr.stride = input->StrideB;
+		r300_attr.stride = stride;
 		r300_attr.dwords = (getTypeSize(type) * input->Size  + 3)/ 4;
 	}
 




More information about the mesa-commit mailing list