nv30: no npot textures
[mesa.git] / src / gallium / drivers / nv30 / nv30_screen.c
index ce6c9ec523a5300564eea184bd10d9f491c270fa..b216a703187438b13521e6ba3b86c177265433b7 100644 (file)
@@ -12,9 +12,10 @@ static const char *
 nv30_screen_get_name(struct pipe_screen *pscreen)
 {
        struct nv30_screen *screen = nv30_screen(pscreen);
+       struct nouveau_device *dev = screen->nvws->channel->device;
        static char buffer[128];
 
-       snprintf(buffer, sizeof(buffer), "NV%02X", screen->chipset);
+       snprintf(buffer, sizeof(buffer), "NV%02X", dev->chipset);
        return buffer;
 }
 
@@ -56,7 +57,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, int param)
                return 13;
        case NOUVEAU_CAP_HW_VTXBUF:
        case NOUVEAU_CAP_HW_IDXBUF:
-               return 0;
+               return 1;
        default:
                NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param);
                return 0;
@@ -74,11 +75,9 @@ nv30_screen_get_paramf(struct pipe_screen *pscreen, int param)
        case PIPE_CAP_MAX_POINT_WIDTH_AA:
                return 64.0;
        case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
-               return 16.0;
+               return 8.0;
        case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
                return 4.0;
-       case PIPE_CAP_BITMAP_TEXCOORD_BIAS:
-               return 0.0;
        default:
                NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param);
                return 0.0;
@@ -107,10 +106,10 @@ nv30_screen_surface_format_supported(struct pipe_screen *pscreen,
                case PIPE_FORMAT_A1R5G5B5_UNORM:
                case PIPE_FORMAT_A4R4G4B4_UNORM:
                case PIPE_FORMAT_R5G6B5_UNORM: 
-               case PIPE_FORMAT_U_L8:
-               case PIPE_FORMAT_U_A8:
-               case PIPE_FORMAT_U_I8:
-               case PIPE_FORMAT_U_A8_L8:
+               case PIPE_FORMAT_L8_UNORM:
+               case PIPE_FORMAT_A8_UNORM:
+               case PIPE_FORMAT_I8_UNORM:
+               case PIPE_FORMAT_A8L8_UNORM:
                case PIPE_FORMAT_Z16_UNORM:
                case PIPE_FORMAT_Z24S8_UNORM:
                        return TRUE;
@@ -125,6 +124,28 @@ nv30_screen_surface_format_supported(struct pipe_screen *pscreen,
        return FALSE;
 }
 
+static void *
+nv30_surface_map(struct pipe_screen *screen, struct pipe_surface *surface,
+                unsigned flags )
+{
+       struct pipe_winsys *ws = screen->winsys;
+       void *map;
+
+       map = ws->buffer_map(ws, surface->buffer, flags);
+       if (!map)
+               return NULL;
+
+       return map + surface->offset;
+}
+
+static void
+nv30_surface_unmap(struct pipe_screen *screen, struct pipe_surface *surface)
+{
+       struct pipe_winsys *ws = screen->winsys;
+
+       ws->buffer_unmap(ws, surface->buffer);
+}
+
 static void
 nv30_screen_destroy(struct pipe_screen *pscreen)
 {
@@ -142,17 +163,16 @@ nv30_screen_destroy(struct pipe_screen *pscreen)
 }
 
 struct pipe_screen *
-nv30_screen_create(struct pipe_winsys *ws, struct nouveau_winsys *nvws,
-                  unsigned chipset)
+nv30_screen_create(struct pipe_winsys *ws, struct nouveau_winsys *nvws)
 {
        struct nv30_screen *screen = CALLOC_STRUCT(nv30_screen);
        struct nouveau_stateobj *so;
        unsigned rankine_class = 0;
+       unsigned chipset = nvws->channel->device->chipset;
        int ret, i;
 
        if (!screen)
                return NULL;
-       screen->chipset = chipset;
        screen->nvws = nvws;
 
        /* 3D object */
@@ -302,6 +322,9 @@ nv30_screen_create(struct pipe_winsys *ws, struct nouveau_winsys *nvws,
 
        screen->pipe.is_format_supported = nv30_screen_surface_format_supported;
 
+       screen->pipe.surface_map = nv30_surface_map;
+       screen->pipe.surface_unmap = nv30_surface_unmap;
+
        nv30_screen_init_miptree_functions(&screen->pipe);
 
        return &screen->pipe;