st/xorg/dri: Pass texture formats via the DRI2 protocol flags.
authorMichel Dänzer <daenzer@vmware.com>
Thu, 27 Aug 2009 18:17:53 +0000 (20:17 +0200)
committerMichel Dänzer <daenzer@vmware.com>
Thu, 27 Aug 2009 18:17:53 +0000 (20:17 +0200)
No need to guess.

src/gallium/state_trackers/dri/dri_drawable.c
src/gallium/state_trackers/xorg/xorg_dri2.c

index c7ca7f78a3da56cd15d3c0ff20edcccad5e4bb0d..e27d5c12a82e051600d1677ed2830c330af1800a 100644 (file)
@@ -181,27 +181,25 @@ dri_get_buffers(__DRIdrawablePrivate * dPriv)
    drawable->is_pixmap = dri2_check_if_pixmap(buffers, count);
 
    for (i = 0; i < count; i++) {
-      enum pipe_format format = 0;
       int index = 0;
 
       switch (buffers[i].attachment) {
       case __DRI_BUFFER_FRONT_LEFT:
-        continue;
       case __DRI_BUFFER_FAKE_FRONT_LEFT:
         index = ST_SURFACE_FRONT_LEFT;
-        format = drawable->color_format;
+        drawable->color_format = buffers[i].flags;
         break;
       case __DRI_BUFFER_BACK_LEFT:
         index = ST_SURFACE_BACK_LEFT;
-        format = drawable->color_format;
+        drawable->color_format = buffers[i].flags;
         break;
       case __DRI_BUFFER_DEPTH:
         index = ST_SURFACE_DEPTH;
-        format = drawable->depth_format;
+        drawable->depth_format = buffers[i].flags;
         break;
       case __DRI_BUFFER_STENCIL:
         index = ST_SURFACE_DEPTH;
-        format = drawable->stencil_format;
+        drawable->stencil_format = buffers[i].flags;
         break;
       case __DRI_BUFFER_ACCUM:
       default:
@@ -218,7 +216,7 @@ dri_get_buffers(__DRIdrawablePrivate * dPriv)
       surface = dri_surface_from_handle(api,
                                        screen,
                                        buffers[i].name,
-                                       format,
+                                       buffers[i].flags,
                                        dri_drawable->w,
                                        dri_drawable->h, buffers[i].pitch);
 
@@ -242,9 +240,7 @@ void dri2_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
    st_get_framebuffer_surface(drawable->stfb, ST_SURFACE_FRONT_LEFT, &ps);
 
    st_bind_texture_surface(ps, target == GL_TEXTURE_2D ? ST_TEXTURE_2D :
-                           ST_TEXTURE_RECT, 0,
-                           format == GLX_TEXTURE_FORMAT_RGBA_EXT ?
-                           PIPE_FORMAT_R8G8B8A8_UNORM : PIPE_FORMAT_R8G8B8X8_UNORM);
+                           ST_TEXTURE_RECT, 0, drawable->color_format);
 }
 
 void dri2_set_tex_buffer(__DRIcontext *pDRICtx, GLint target,
index 7d6954016fe70053c919dad6ce9aba12d39d01c0..111024692eb049ef0d0630f8e7c570c614ad640d 100644 (file)
@@ -137,7 +137,7 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int *attachments, int count)
        buffers[i].pitch = stride;
        buffers[i].cpp = 4;
        buffers[i].driverPrivate = &privates[i];
-       buffers[i].flags = 0; /* not tiled */
+       buffers[i].flags = tex->format;
        privates[i].pPixmap = pPixmap;
        privates[i].buf = buf;
        privates[i].tex = tex;