radeon: fix up span function setting
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_screen.c
index ecca81f715b46271057741bc030d2e30789f0e73..a14a0c3cb286cb5179c315d2987efd765b12d442 100644 (file)
@@ -354,6 +354,11 @@ static const __DRItexOffsetExtension r200texOffsetExtension = {
     { __DRI_TEX_OFFSET, __DRI_TEX_OFFSET_VERSION },
    r200SetTexOffset,
 };
+
+static const __DRItexBufferExtension r200TexBufferExtension = {
+    { __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
+   r200SetTexBuffer,
+};
 #endif
 
 #if RADEON_COMMON && defined(RADEON_COMMON_FOR_R300)
@@ -727,7 +732,7 @@ radeonCreateScreen( __DRIscreenPrivate *sPriv )
    unsigned char *RADEONMMIO = NULL;
    int i;
    int ret;
-   uint32_t temp;
+   uint32_t temp = 0;
 
    if (sPriv->devPrivSize != sizeof(RADEONDRIRec)) {
       fprintf(stderr,"\nERROR!  sizeof(RADEONDRIRec) does not match passed size from device driver\n");
@@ -1092,7 +1097,6 @@ radeonCreateScreen2(__DRIscreenPrivate *sPriv)
    }
 
 #if !RADEON_COMMON
-   screen->extensions[i++] = &radeonTexOffsetExtension.base;
    screen->extensions[i++] = &radeonTexBufferExtension.base;
 #endif
 
@@ -1100,11 +1104,10 @@ radeonCreateScreen2(__DRIscreenPrivate *sPriv)
    if (IS_R200_CLASS(screen))
        screen->extensions[i++] = &r200AllocateExtension.base;
 
-   screen->extensions[i++] = &r200texOffsetExtension.base;
+   screen->extensions[i++] = &r200TexBufferExtension.base;
 #endif
 
 #if RADEON_COMMON && defined(RADEON_COMMON_FOR_R300)
-   //screen->extensions[i++] = &r300texOffsetExtension.base;
    screen->extensions[i++] = &r300TexBufferExtension.base;
 #endif
 
@@ -1172,89 +1175,7 @@ radeonInitDriver( __DRIscreenPrivate *sPriv )
     return GL_TRUE;
 }
 
-static GLboolean
-radeon_alloc_window_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
-                           GLenum intFormat, GLuint w, GLuint h)
-{
-    rb->Width = w;
-    rb->Height = h;
-    rb->_ActualFormat = intFormat;
-
-    return GL_TRUE;
-}
-
 
-static struct radeon_renderbuffer *
-radeon_create_renderbuffer(GLenum format, __DRIdrawablePrivate *driDrawPriv)
-{
-    struct radeon_renderbuffer *ret;
-
-    ret = CALLOC_STRUCT(radeon_renderbuffer);
-    if (!ret)
-       return NULL;
-
-    _mesa_init_renderbuffer(&ret->base, 0);
-
-    /* XXX format junk */
-    switch (format) {
-       case GL_RGB5:
-           ret->base._ActualFormat = GL_RGB5;
-           ret->base._BaseFormat = GL_RGBA;
-           ret->base.RedBits = 5;
-           ret->base.GreenBits = 6;
-           ret->base.BlueBits = 5;
-           ret->base.DataType = GL_UNSIGNED_BYTE;
-           break;
-       case GL_RGBA8:
-           ret->base._ActualFormat = GL_RGBA8;
-           ret->base._BaseFormat = GL_RGBA;
-           ret->base.RedBits = 8;
-           ret->base.GreenBits = 8;
-           ret->base.BlueBits = 8;
-           ret->base.AlphaBits = 8;
-           ret->base.DataType = GL_UNSIGNED_BYTE;
-           break;
-       case GL_STENCIL_INDEX8_EXT:
-           ret->base._ActualFormat = GL_STENCIL_INDEX8_EXT;
-           ret->base._BaseFormat = GL_STENCIL_INDEX;
-           ret->base.StencilBits = 8;
-           ret->base.DataType = GL_UNSIGNED_BYTE;
-           break;
-       case GL_DEPTH_COMPONENT16:
-           ret->base._ActualFormat = GL_DEPTH_COMPONENT16;
-           ret->base._BaseFormat = GL_DEPTH_COMPONENT;
-           ret->base.DepthBits = 16;
-           ret->base.DataType = GL_UNSIGNED_SHORT;
-           break;
-       case GL_DEPTH_COMPONENT24:
-           ret->base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
-           ret->base._BaseFormat = GL_DEPTH_COMPONENT;
-           ret->base.DepthBits = 24;
-           ret->base.DataType = GL_UNSIGNED_INT;
-           break;
-       case GL_DEPTH24_STENCIL8_EXT:
-           ret->base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
-           ret->base._BaseFormat = GL_DEPTH_STENCIL_EXT;
-           ret->base.DepthBits = 24;
-           ret->base.StencilBits = 8;
-           ret->base.DataType = GL_UNSIGNED_INT_24_8_EXT;
-           break;
-       default:
-           fprintf(stderr, "%s: Unknown format 0x%04x\n", __FUNCTION__, format);
-           _mesa_delete_renderbuffer(&ret->base);
-           return NULL;
-    }
-
-    ret->dPriv = driDrawPriv;
-    ret->base.InternalFormat = format;
-
-    ret->base.AllocStorage = radeon_alloc_window_storage;
-
-    radeonSetSpanFunctions(ret);
-
-    ret->bo = NULL;
-    return ret;
-}
 
 /**
  * Create the Mesa framebuffer and renderbuffers for a given window/drawable.
@@ -1294,29 +1215,29 @@ radeonCreateBuffer( __DRIscreenPrivate *driScrnPriv,
        depthFormat = GL_DEPTH_COMPONENT24;
 
     /* front color renderbuffer */
-    rfb->color_rb[0] = radeon_create_renderbuffer(rgbFormat, driDrawPriv);
+    rfb->color_rb[0] = radeon_renderbuffer(radeon_create_renderbuffer(rgbFormat, driDrawPriv));
     _mesa_add_renderbuffer(&rfb->base, BUFFER_FRONT_LEFT, &rfb->color_rb[0]->base);
     rfb->color_rb[0]->has_surface = 1;
 
     /* back color renderbuffer */
     if (mesaVis->doubleBufferMode) {
-       rfb->color_rb[1] = radeon_create_renderbuffer(rgbFormat, driDrawPriv);
+      rfb->color_rb[1] = radeon_renderbuffer(radeon_create_renderbuffer(rgbFormat, driDrawPriv));
        _mesa_add_renderbuffer(&rfb->base, BUFFER_BACK_LEFT, &rfb->color_rb[1]->base);
        rfb->color_rb[1]->has_surface = 1;
     }
 
     /* depth renderbuffer */
     if (depthFormat != GL_NONE) {
-       struct radeon_renderbuffer *depth =
-           radeon_create_renderbuffer(depthFormat, driDrawPriv);
+      struct radeon_renderbuffer *depth = radeon_renderbuffer(
+                                                             radeon_create_renderbuffer(depthFormat, driDrawPriv));
        _mesa_add_renderbuffer(&rfb->base, BUFFER_DEPTH, &depth->base);
        depth->has_surface = screen->depthHasSurface;
     }
 
     /* stencil renderbuffer */
     if (mesaVis->stencilBits > 0 && !swStencil) {
-       struct radeon_renderbuffer *stencil =
-           radeon_create_renderbuffer(GL_STENCIL_INDEX8_EXT, driDrawPriv);
+      struct radeon_renderbuffer *stencil = radeon_renderbuffer(
+                                                               radeon_create_renderbuffer(GL_STENCIL_INDEX8_EXT, driDrawPriv));
        _mesa_add_renderbuffer(&rfb->base, BUFFER_STENCIL, &stencil->base);
        stencil->has_surface = screen->depthHasSurface;
     }
@@ -1355,7 +1276,7 @@ radeonDestroyBuffer(__DRIdrawablePrivate *driDrawPriv)
         radeon_bo_unref(rb->bo);
         rb->bo = NULL;
     }
-   _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)));
+    _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
 }
 
 #if RADEON_COMMON && defined(RADEON_COMMON_FOR_R300)