radeon: stupid mesa extension fail
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_texstate.c
index a24b5c8830068bf8b009f9b0277fe00499a2d17b..78e2a08559ba19ae3ab78b7017aa37f8f5e59773 100644 (file)
@@ -637,7 +637,8 @@ void radeonSetTexOffset(__DRIcontext * pDRICtx, GLint texname,
        }
 }
 
-void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
+void radeonSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_format,
+                        __DRIdrawable *dPriv)
 {
        struct gl_texture_unit *texUnit;
        struct gl_texture_object *texObj;
@@ -649,8 +650,11 @@ void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPri
        struct radeon_framebuffer *rfb;
        radeonTexObjPtr t;
        uint32_t pitch_val;
+       uint32_t internalFormat, type, format;
 
-       target = GL_TEXTURE_RECTANGLE_ARB;
+       type = GL_BGRA;
+       format = GL_UNSIGNED_BYTE;
+       internalFormat = (glx_texture_format == GLX_TEXTURE_FORMAT_RGB_EXT ? 3 : 4);
 
        radeon = pDRICtx->driverPrivate;
        rmesa = pDRICtx->driverPrivate;
@@ -678,7 +682,7 @@ void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPri
                radeon_bo_unref(rb->bo);
                rb->bo = NULL;
        }
-       rb = (void*)rfb->base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer;
+       rb = rfb->color_rb[0];
        if (rb->bo == NULL) {
                /* Failed to BO for the buffer */
                return;
@@ -701,10 +705,11 @@ void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPri
                radeon_miptree_unreference(rImage->mt);
                rImage->mt = NULL;
        }
-       fprintf(stderr,"settexbuf %d %dx%d@%d\n", rb->pitch, rb->width, rb->height, rb->cpp);
        _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
                                   rb->width, rb->height, 1, 0, rb->cpp);
-       texImage->TexFormat = &_mesa_texformat_rgba8888_rev;
+       texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
+                                                       internalFormat,
+                                                       type, format);
        rImage->bo = rb->bo;
        radeon_bo_ref(rImage->bo);
        t->bo = rb->bo;
@@ -718,18 +723,15 @@ void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPri
        case 4:
                t->pp_txformat = tx_table[MESA_FORMAT_ARGB8888].format;
                t->pp_txfilter |= tx_table[MESA_FORMAT_ARGB8888].filter;
-       //      pitch_val /= 4;
                break;
        case 3:
        default:
                t->pp_txformat = tx_table[MESA_FORMAT_RGB888].format;
                t->pp_txfilter |= tx_table[MESA_FORMAT_RGB888].filter;
-//             pitch_val /= 4;
                break;
        case 2:
                t->pp_txformat = tx_table[MESA_FORMAT_RGB565].format;
                t->pp_txfilter |= tx_table[MESA_FORMAT_RGB565].filter;
-               pitch_val /= 2;
                break;
        }
         t->pp_txsize = ((rb->width - 1) << RADEON_TEX_USIZE_SHIFT)
@@ -743,6 +745,13 @@ void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPri
        return;
 }
 
+
+void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
+{
+        radeonSetTexBuffer2(pDRICtx, target, GLX_TEXTURE_FORMAT_RGBA_EXT, dPriv);
+}
+
+
 #define TEXOBJ_TXFILTER_MASK (RADEON_MAX_MIP_LEVEL_MASK |      \
                              RADEON_MIN_FILTER_MASK |          \
                              RADEON_MAG_FILTER_MASK |          \
@@ -918,11 +927,11 @@ static GLboolean radeon_validate_texgen( GLcontext *ctx, GLuint unit )
     */
    else if ( (texUnit->TexGenEnabled & S_BIT) &&
             (texUnit->TexGenEnabled & T_BIT) &&
-            (texUnit->GenModeS == texUnit->GenModeT) ) {
+            (texUnit->GenS.Mode == texUnit->GenT.Mode) ) {
       if ( ((texUnit->TexGenEnabled & R_BIT) &&
-           (texUnit->GenModeS != texUnit->GenModeR)) ||
+           (texUnit->GenS.Mode != texUnit->GenR.Mode)) ||
           ((texUnit->TexGenEnabled & Q_BIT) &&
-           (texUnit->GenModeS != texUnit->GenModeQ)) ) {
+           (texUnit->GenS.Mode != texUnit->GenQ.Mode)) ) {
         /* Mixed modes, fallback:
          */
         if (RADEON_DEBUG & DEBUG_FALLBACKS)
@@ -946,23 +955,23 @@ static GLboolean radeon_validate_texgen( GLcontext *ctx, GLuint unit )
       rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] |= RADEON_Q_BIT(unit);
    }
 
-   switch (texUnit->GenModeS) {
+   switch (texUnit->GenS.Mode) {
    case GL_OBJECT_LINEAR:
       rmesa->TexGenEnabled |= RADEON_TEXGEN_INPUT_OBJ << inputshift;
       set_texgen_matrix( rmesa, unit,
-                        texUnit->ObjectPlaneS,
-                        texUnit->ObjectPlaneT,
-                        texUnit->ObjectPlaneR,
-                        texUnit->ObjectPlaneQ);
+                        texUnit->GenS.ObjectPlane,
+                        texUnit->GenT.ObjectPlane,
+                        texUnit->GenR.ObjectPlane,
+                        texUnit->GenQ.ObjectPlane);
       break;
 
    case GL_EYE_LINEAR:
       rmesa->TexGenEnabled |= RADEON_TEXGEN_INPUT_EYE << inputshift;
       set_texgen_matrix( rmesa, unit,
-                        texUnit->EyePlaneS,
-                        texUnit->EyePlaneT,
-                        texUnit->EyePlaneR,
-                        texUnit->EyePlaneQ);
+                        texUnit->GenS.EyePlane,
+                        texUnit->GenT.EyePlane,
+                        texUnit->GenR.EyePlane,
+                        texUnit->GenQ.EyePlane);
       break;
 
    case GL_REFLECTION_MAP_NV:
@@ -1006,7 +1015,7 @@ static GLboolean setup_hardware_state(r100ContextPtr rmesa, radeonTexObj *t, int
    const struct gl_texture_image *firstImage;
    GLint log2Width, log2Height, log2Depth, texelBytes;
 
-   if ( t->image_override ) {
+   if ( t->bo ) {
        return GL_TRUE;
    }