nouveau: more adaption..
authorBen Skeggs <skeggsb@gmail.com>
Thu, 13 Dec 2007 00:55:35 +0000 (11:55 +1100)
committerBen Skeggs <skeggsb@gmail.com>
Thu, 13 Dec 2007 00:55:35 +0000 (11:55 +1100)
src/mesa/drivers/dri/nouveau_winsys/nouveau_screen.c
src/mesa/pipe/nv40/nv40_context.c
src/mesa/pipe/nv40/nv40_surface.c

index a1eed2e..5a957f4 100644 (file)
@@ -76,6 +76,7 @@ nouveau_create_buffer(__DRIscreenPrivate * driScrnPriv,
                      const __GLcontextModes *glVis, GLboolean pixmapBuffer)
 {
        struct nouveau_framebuffer *nvfb;
+       enum pipe_format colour, depth, stencil;
 
        if (pixmapBuffer)
                return GL_FALSE;
@@ -84,7 +85,25 @@ nouveau_create_buffer(__DRIscreenPrivate * driScrnPriv,
        if (!nvfb)
                return GL_FALSE;
 
-       nvfb->stfb = st_create_framebuffer(glVis, GL_TRUE, (void*)nvfb);
+       if (glVis->redBits == 5)
+               colour = PIPE_FORMAT_R5G6B5_UNORM;
+       else
+               colour = PIPE_FORMAT_A8R8G8B8_UNORM;
+
+       if (glVis->depthBits == 16)
+               depth = PIPE_FORMAT_Z16_UNORM;
+       else if (glVis->depthBits == 24)
+               depth = PIPE_FORMAT_Z24S8_UNORM;
+       else
+               depth = PIPE_FORMAT_NONE;
+
+       if (glVis->stencilBits == 8)
+               stencil = PIPE_FORMAT_Z24S8_UNORM;
+       else
+               stencil = PIPE_FORMAT_NONE;
+
+       nvfb->stfb = st_create_framebuffer(glVis, GL_TRUE, colour, depth,
+                                          stencil, (void*)nvfb);
        if (!nvfb->stfb) {
                free(nvfb);
                return  GL_FALSE;
index b1358a8..e7d0a18 100644 (file)
@@ -12,7 +12,6 @@ nv40_is_format_supported(struct pipe_context *pipe, enum pipe_format format,
 {
        switch (type) {
        case PIPE_SURFACE:
-       case PIPE_SCREEN_SURFACE:
                switch (format) {
                case PIPE_FORMAT_A8R8G8B8_UNORM:
                case PIPE_FORMAT_R5G6B5_UNORM: 
index f140b76..da9e18a 100644 (file)
@@ -31,6 +31,7 @@
 #include "pipe/p_util.h"
 #include "pipe/p_winsys.h"
 #include "pipe/p_inlines.h"
+#include "pipe/softpipe/sp_rgba_tile.h"
 
 
 #define CLIP_TILE \
@@ -254,8 +255,8 @@ nv40_init_surface_functions(struct nv40_context *nv40)
    nv40->pipe.get_tex_surface = nv40_get_tex_surface;
    nv40->pipe.get_tile = nv40_get_tile;
    nv40->pipe.put_tile = nv40_put_tile;
-   nv40->pipe.get_tile_rgba = nv40_get_tile_rgba;
-   nv40->pipe.put_tile_rgba = nv40_put_tile_rgba;
+   nv40->pipe.get_tile_rgba = softpipe_get_tile_rgba;
+   nv40->pipe.put_tile_rgba = softpipe_put_tile_rgba;
    nv40->pipe.surface_data = nv40_surface_data;
    nv40->pipe.surface_copy = nv40_surface_copy;
    nv40->pipe.surface_fill = nv40_surface_fill;