summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r300/radeon_vtxfmt_a.c
diff options
context:
space:
mode:
authorAapo Tahkola <aet@rasterburn.org>2006-08-11 13:59:37 +0000
committerAapo Tahkola <aet@rasterburn.org>2006-08-11 13:59:37 +0000
commit8ff5e37f58cd4f4f0f3a9f800e95022e50050c32 (patch)
tree406be17633df5790e5145ba305e85350a624c935 /src/mesa/drivers/dri/r300/radeon_vtxfmt_a.c
parent2332812644d5ab98d884cd0083e9d68c8e09b4cf (diff)
support shorts as vertex data
Diffstat (limited to 'src/mesa/drivers/dri/r300/radeon_vtxfmt_a.c')
-rw-r--r--src/mesa/drivers/dri/r300/radeon_vtxfmt_a.c164
1 files changed, 28 insertions, 136 deletions
diff --git a/src/mesa/drivers/dri/r300/radeon_vtxfmt_a.c b/src/mesa/drivers/dri/r300/radeon_vtxfmt_a.c
index 34834ca08f..cbd837fa72 100644
--- a/src/mesa/drivers/dri/r300/radeon_vtxfmt_a.c
+++ b/src/mesa/drivers/dri/r300/radeon_vtxfmt_a.c
@@ -141,15 +141,13 @@ static int setup_arrays(r300ContextPtr rmesa, GLint start)
for(i=0; i < VERT_ATTRIB_MAX; i++){
if(rmesa->state.VB.AttribPtr[i].type != GL_UNSIGNED_BYTE &&
- rmesa->state.VB.AttribPtr[i].type != GL_FLOAT){
+#if MESA_LITTLE_ENDIAN
+ rmesa->state.VB.AttribPtr[i].type != GL_SHORT &&
+#endif
+ rmesa->state.VB.AttribPtr[i].type != GL_FLOAT){
WARN_ONCE("Unsupported format %d at index %d\n", rmesa->state.VB.AttribPtr[i].type, i);
return R300_FALLBACK_TCL;
}
- if(rmesa->state.VB.AttribPtr[i].type == GL_UNSIGNED_BYTE &&
- rmesa->state.VB.AttribPtr[i].size != 4){
- WARN_ONCE("Unsupported component count for ub colors\n");
- return R300_FALLBACK_TCL;
- }
/*fprintf(stderr, "%d: ", i);
@@ -305,38 +303,13 @@ static void radeonDrawElements( GLenum mode, GLsizei count, GLenum type, const G
r300UpdateShaders(rmesa);
- if (rmesa->state.VB.LockCount) {
- if (rmesa->state.VB.lock_uptodate == GL_FALSE) {
- if (setup_arrays(rmesa, rmesa->state.VB.LockFirst))
- return;
-
- rmesa->state.VB.Count = rmesa->state.VB.LockCount;
-
- r300ReleaseArrays(ctx);
- r300EmitArrays(ctx, GL_FALSE);
-
- rmesa->state.VB.lock_uptodate = GL_TRUE;
- }
-
- if (min < rmesa->state.VB.LockFirst) {
- WARN_ONCE("Out of range min %d vs %d!\n", min, rmesa->state.VB.LockFirst);
- return;
- }
-
- if (max >= rmesa->state.VB.LockFirst + rmesa->state.VB.LockCount) {
- WARN_ONCE("Out of range max %d vs %d!\n", max, rmesa->state.VB.LockFirst +
- rmesa->state.VB.LockCount);
- return;
- }
- } else {
- if (setup_arrays(rmesa, min) >= R300_FALLBACK_TCL) {
- r300ReleaseDmaRegion(rmesa, &rvb, __FUNCTION__);
- goto fallback;
- }
-
- rmesa->state.VB.Count = max - min + 1;
+ if (setup_arrays(rmesa, min) >= R300_FALLBACK_TCL) {
+ r300ReleaseDmaRegion(rmesa, &rvb, __FUNCTION__);
+ goto fallback;
}
+ rmesa->state.VB.Count = max - min + 1;
+
r300UpdateShaderStates(rmesa);
rmesa->state.VB.Primitive = &prim;
@@ -352,7 +325,10 @@ static void radeonDrawElements( GLenum mode, GLsizei count, GLenum type, const G
rmesa->state.VB.Elts = ptr;
rmesa->state.VB.elt_size = elt_size;
- r300_run_vb_render(ctx, NULL);
+ if (r300_run_vb_render(ctx, NULL)) {
+ r300ReleaseDmaRegion(rmesa, &rvb, __FUNCTION__);
+ goto fallback;
+ }
if(rvb.buf)
radeon_mm_use(rmesa, rvb.buf->id);
@@ -482,37 +458,12 @@ static void radeonDrawRangeElements(GLenum mode, GLuint min, GLuint max, GLsizei
r300UpdateShaders(rmesa);
- if (rmesa->state.VB.LockCount) {
- if (rmesa->state.VB.lock_uptodate == GL_FALSE) {
- if (setup_arrays(rmesa, rmesa->state.VB.LockFirst))
- goto fallback;
-
- rmesa->state.VB.Count = rmesa->state.VB.LockCount;
-
- r300ReleaseArrays(ctx);
- r300EmitArrays(ctx, GL_FALSE);
-
- rmesa->state.VB.lock_uptodate = GL_TRUE;
- }
-
- if (min < rmesa->state.VB.LockFirst) {
- WARN_ONCE("Out of range min %d vs %d!\n", min, rmesa->state.VB.LockFirst);
- goto fallback;
- }
-
- /*if (max >= rmesa->state.VB.LockFirst + rmesa->state.VB.LockCount) {
- WARN_ONCE("Out of range max %d vs %d!\n", max, rmesa->state.VB.LockFirst +
- rmesa->state.VB.LockCount);
- return;
- }*/
- } else {
- if (setup_arrays(rmesa, min) >= R300_FALLBACK_TCL) {
- r300ReleaseDmaRegion(rmesa, &rvb, __FUNCTION__);
- goto fallback;
- }
-
- rmesa->state.VB.Count = max - min + 1;
+ if (setup_arrays(rmesa, min) >= R300_FALLBACK_TCL) {
+ r300ReleaseDmaRegion(rmesa, &rvb, __FUNCTION__);
+ goto fallback;
}
+
+ rmesa->state.VB.Count = max - min + 1;
r300UpdateShaderStates(rmesa);
@@ -531,7 +482,10 @@ static void radeonDrawRangeElements(GLenum mode, GLuint min, GLuint max, GLsizei
rmesa->state.VB.elt_min = min;
rmesa->state.VB.elt_max = max;
- r300_run_vb_render(ctx, NULL);
+ if (r300_run_vb_render(ctx, NULL)) {
+ r300ReleaseDmaRegion(rmesa, &rvb, __FUNCTION__);
+ goto fallback;
+ }
if(rvb.buf)
radeon_mm_use(rmesa, rvb.buf->id);
@@ -571,35 +525,10 @@ static void radeonDrawArrays( GLenum mode, GLint start, GLsizei count )
r300UpdateShaders(rmesa);
- if (rmesa->state.VB.LockCount) {
- if (rmesa->state.VB.lock_uptodate == GL_FALSE) {
- if (setup_arrays(rmesa, rmesa->state.VB.LockFirst))
- return;
-
- rmesa->state.VB.Count = rmesa->state.VB.LockCount;
-
- r300ReleaseArrays(ctx);
- r300EmitArrays(ctx, GL_FALSE);
-
- rmesa->state.VB.lock_uptodate = GL_TRUE;
- }
-
- if (start < rmesa->state.VB.LockFirst) {
- WARN_ONCE("Out of range min %d vs %d!\n", start, rmesa->state.VB.LockFirst);
- goto fallback;
- }
-
- if (start + count - 1 >= rmesa->state.VB.LockFirst + rmesa->state.VB.LockCount) { /* XXX */
- WARN_ONCE("Out of range max %d vs %d!\n", start + count - 1, rmesa->state.VB.LockFirst +
- rmesa->state.VB.LockCount);
- goto fallback;
- }
- } else {
- if (setup_arrays(rmesa, start) >= R300_FALLBACK_TCL)
- goto fallback;
-
- rmesa->state.VB.Count = count;
- }
+ if (setup_arrays(rmesa, start) >= R300_FALLBACK_TCL)
+ goto fallback;
+
+ rmesa->state.VB.Count = count;
r300UpdateShaderStates(rmesa);
@@ -618,7 +547,8 @@ static void radeonDrawArrays( GLenum mode, GLint start, GLsizei count )
rmesa->state.VB.elt_min = 0;
rmesa->state.VB.elt_max = 0;
- r300_run_vb_render(ctx, NULL);
+ if (r300_run_vb_render(ctx, NULL))
+ goto fallback;
return ;
@@ -647,41 +577,6 @@ void radeon_init_vtxfmt_a(r300ContextPtr rmesa)
#ifdef HW_VBOS
-#if 0
-static void radeonLockArraysEXT(GLcontext *ctx, GLint first, GLsizei count)
-{
- r300ContextPtr rmesa = R300_CONTEXT(ctx);
-
- /* Only when CB_DPATH is defined.
- r300Clear tampers over the aos setup without it.
- (r300ResetHwState cannot call r300EmitArrays)
- */
-#ifndef CB_DPATH
- first = 0; count = 0;
-#endif
-
- if (first < 0 || count <= 0) {
- rmesa->state.VB.LockFirst = 0;
- rmesa->state.VB.LockCount = 0;
- rmesa->state.VB.lock_uptodate = GL_FALSE;
- return ;
- }
-
- rmesa->state.VB.LockFirst = first;
- rmesa->state.VB.LockCount = count;
- rmesa->state.VB.lock_uptodate = GL_FALSE;
-}
-
-static void radeonUnlockArraysEXT(GLcontext *ctx)
-{
- r300ContextPtr rmesa = R300_CONTEXT(ctx);
-
- rmesa->state.VB.LockFirst = 0;
- rmesa->state.VB.LockCount = 0;
- rmesa->state.VB.lock_uptodate = GL_FALSE;
-}
-#endif
-
static struct gl_buffer_object *
r300NewBufferObject(GLcontext *ctx, GLuint name, GLenum target )
{
@@ -873,9 +768,6 @@ void r300_init_vbo_funcs(struct dd_function_table *functions)
functions->MapBuffer = r300MapBuffer;
functions->UnmapBuffer = r300UnmapBuffer;
functions->DeleteBuffer = r300DeleteBuffer;
-
- /*functions->LockArraysEXT = radeonLockArraysEXT;
- functions->UnlockArraysEXT = radeonUnlockArraysEXT;*/
}
#endif