summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2007-12-13 11:55:35 +1100
committerBen Skeggs <skeggsb@gmail.com>2007-12-13 11:55:35 +1100
commit72d47f1949f99231f18cc5144b1c45c58b35f890 (patch)
tree00e1d37839f01bc6fade418ae85d51f28fc47a13
parentf1c5415675f695b302ffb7e5d46473bff9617dc1 (diff)
nouveau: more adaption..
-rw-r--r--src/mesa/drivers/dri/nouveau_winsys/nouveau_screen.c21
-rw-r--r--src/mesa/pipe/nv40/nv40_context.c1
-rw-r--r--src/mesa/pipe/nv40/nv40_surface.c5
3 files changed, 23 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/nouveau_winsys/nouveau_screen.c b/src/mesa/drivers/dri/nouveau_winsys/nouveau_screen.c
index a1eed2e44aa..5a957f48eb8 100644
--- a/src/mesa/drivers/dri/nouveau_winsys/nouveau_screen.c
+++ b/src/mesa/drivers/dri/nouveau_winsys/nouveau_screen.c
@@ -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;
diff --git a/src/mesa/pipe/nv40/nv40_context.c b/src/mesa/pipe/nv40/nv40_context.c
index b1358a8cfa5..e7d0a186378 100644
--- a/src/mesa/pipe/nv40/nv40_context.c
+++ b/src/mesa/pipe/nv40/nv40_context.c
@@ -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:
diff --git a/src/mesa/pipe/nv40/nv40_surface.c b/src/mesa/pipe/nv40/nv40_surface.c
index f140b764cac..da9e18ac136 100644
--- a/src/mesa/pipe/nv40/nv40_surface.c
+++ b/src/mesa/pipe/nv40/nv40_surface.c
@@ -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;