r100: fix 3D texture fallback
authorDave Airlie <airlied@redhat.com>
Tue, 10 Feb 2009 13:38:51 +0000 (23:38 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 10 Feb 2009 13:38:51 +0000 (23:38 +1000)
src/mesa/drivers/dri/radeon/radeon_ioctl.c
src/mesa/drivers/dri/radeon/radeon_state_init.c
src/mesa/drivers/dri/radeon/radeon_tcl.c
src/mesa/drivers/dri/radeon/radeon_tex.c
src/mesa/drivers/dri/radeon/radeon_texstate.c

index 78ee322b4cc8d5cea04cc762f1a75e9699522167..45d750dbf42912affeebdd9288a75b1f71cfa5ac 100644 (file)
@@ -312,7 +312,9 @@ GLushort *radeonAllocEltsOpenEnded( r100ContextPtr rmesa,
    GLushort *retval;
    int align_min_nr;
    BATCH_LOCALS(&rmesa->radeon);
+
    if (RADEON_DEBUG & DEBUG_IOCTL)
+      fprintf(stderr, "%s %d prim %x\n", __FUNCTION__, min_nr, primitive);
 
    assert((primitive & RADEON_CP_VC_CNTL_PRIM_WALK_IND));
    
index c9278d85107177d6754ac3cb97766344a402eeba..f12d9bdb50d79a531466f16333b49a916a2f009f 100644 (file)
@@ -440,16 +440,14 @@ static void tex_emit(GLcontext *ctx, struct radeon_state_atom *atom)
    int i = atom->idx;
    radeonTexObj *t = r100->state.texture.unit[i].texobj;
 
-   fprintf(stderr,"t is %p, i is %d\n", t, i );
-
-   if (t && !t->image_override)
+   if (t && t->mt && !t->image_override)
      dwords += 2;
    BEGIN_BATCH_NO_AUTOSTATE(dwords);
    OUT_BATCH_TABLE(atom->cmd, 3);
-   if (t && !t->image_override) {
+   if (t && t->mt && !t->image_override) {
      OUT_BATCH_RELOC(t->tile_bits, t->mt->bo, 0,
                     RADEON_GEM_DOMAIN_VRAM, 0, 0);
-   } else if (!t) {
+   } else  {
      /* workaround for old CS mechanism */
      OUT_BATCH(r100->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]);
      //     OUT_BATCH(r100->radeon.radeonScreen);
index 66fb7ef164a8ba2250b65ccd8d2892d4b286feeb..daa88f43c7536a527d3defd1cb2388d1f1c04785 100644 (file)
@@ -159,7 +159,7 @@ static GLushort *radeonAllocElts( r100ContextPtr rmesa, GLuint nr )
                                       rmesa->tcl.hw_primitive, nr );
 }
 
-#define CLOSE_ELTS()  RADEON_NEWPRIM( rmesa )
+#define CLOSE_ELTS() if (0)  RADEON_NEWPRIM( rmesa )
 
 
 
index 16bd87a8dc27a72b1e306883a74e7ee08c3d98f0..a916b63a279fad09059d34f6f3518ceb5650bcf5 100644 (file)
@@ -373,6 +373,7 @@ static void radeonDeleteTexture( GLcontext *ctx,
 {
    r100ContextPtr rmesa = R100_CONTEXT(ctx);
    radeonTexObj* t = radeon_tex_obj(texObj);
+   int i;
 
    if ( RADEON_DEBUG & (DEBUG_STATE|DEBUG_TEXTURE) ) {
       fprintf( stderr, "%s( %p (target = %s) )\n", __FUNCTION__, (void *)texObj,
@@ -381,7 +382,13 @@ static void radeonDeleteTexture( GLcontext *ctx,
 
    if ( rmesa ) {
      RADEON_FIREVERTICES( rmesa );
-     
+     for ( i = 0 ; i < rmesa->radeon.glCtx->Const.MaxTextureUnits ; i++ ) {
+       if ( t == rmesa->state.texture.unit[i].texobj ) {
+        rmesa->state.texture.unit[i].texobj = NULL;
+        rmesa->hw.tex[i].dirty = GL_FALSE;
+        rmesa->hw.cube[i].dirty = GL_FALSE;
+       }
+     }
    }
 
    if (t->mt) {
@@ -453,7 +460,6 @@ void radeonInitTextureFuncs( struct dd_function_table *functions )
    functions->NewTextureObject         = radeonNewTextureObject;
    //   functions->BindTexture         = radeonBindTexture;
    functions->DeleteTexture            = radeonDeleteTexture;
-   functions->IsTextureResident                = driIsTextureResident;
 
    functions->TexEnv                   = radeonTexEnv;
    functions->TexParameter             = radeonTexParameter;
index 9a9af9e938a89e33619b47b88676dcac70f9f88f..0c7c85557760783376b4754141e241afd30506e5 100644 (file)
@@ -1044,7 +1044,11 @@ static GLboolean radeonUpdateTextureUnit( GLcontext *ctx, int unit )
    r100ContextPtr rmesa = R100_CONTEXT(ctx);
    struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
 
-   fprintf(stderr,"really enabled %d\n", ctx->Texture.Unit[unit]._ReallyEnabled);
+
+   if (ctx->Texture.Unit[unit]._ReallyEnabled & TEXTURE_3D_BIT) {
+     return GL_FALSE;
+   }
+
    if (!ctx->Texture.Unit[unit]._ReallyEnabled) {
      /* disable the unit */
      disable_tex_obj_state(rmesa, unit);