#include "nv20_context.h"
#include "nv20_screen.h"
-static const char *
-nv20_screen_get_name(struct pipe_screen *screen)
-{
- struct nv20_screen *nv20screen = nv20_screen(screen);
- struct nouveau_device *dev = nv20screen->nvws->channel->device;
- static char buffer[128];
-
- snprintf(buffer, sizeof(buffer), "NV%02X", dev->chipset);
- return buffer;
-}
-
-static const char *
-nv20_screen_get_vendor(struct pipe_screen *screen)
-{
- return "nouveau";
-}
-
static int
nv20_screen_get_param(struct pipe_screen *screen, int param)
{
nv20_screen_create(struct pipe_winsys *ws, struct nouveau_winsys *nvws)
{
struct nv20_screen *screen = CALLOC_STRUCT(nv20_screen);
+ struct nouveau_device *dev = nvws->channel->device;
+ struct pipe_screen *pscreen;
unsigned kelvin_class = 0;
- unsigned chipset = nvws->channel->device->chipset;
int ret;
if (!screen)
return NULL;
+ pscreen = &screen->base.base;
+
screen->nvws = nvws;
+ pscreen->winsys = ws;
+ pscreen->destroy = nv20_screen_destroy;
+ pscreen->get_param = nv20_screen_get_param;
+ pscreen->get_paramf = nv20_screen_get_paramf;
+ pscreen->is_format_supported = nv20_screen_is_format_supported;
+
+ nv20_screen_init_miptree_functions(pscreen);
+ nv20_screen_init_transfer_functions(pscreen);
+ nouveau_screen_init(&screen->base, dev);
+
/* 2D engine setup */
screen->eng2d = nv04_surface_2d_init(nvws);
screen->eng2d->buf = nv20_surface_buffer;
/* 3D object */
- if (chipset >= 0x25)
+ if (dev->chipset >= 0x25)
kelvin_class = NV25TCL;
- else if (chipset >= 0x20)
+ else if (dev->chipset >= 0x20)
kelvin_class = NV20TCL;
- if (!kelvin_class || chipset >= 0x30) {
- NOUVEAU_ERR("Unknown nv2x chipset: nv%02x\n", chipset);
+ if (!kelvin_class || dev->chipset >= 0x30) {
+ NOUVEAU_ERR("Unknown nv2x chipset: nv%02x\n", dev->chipset);
return NULL;
}
ret = nvws->notifier_alloc(nvws, 1, &screen->sync);
if (ret) {
NOUVEAU_ERR("Error creating notifier object: %d\n", ret);
- nv20_screen_destroy(&screen->pipe);
+ nv20_screen_destroy(pscreen);
return NULL;
}
- screen->pipe.winsys = ws;
- screen->pipe.destroy = nv20_screen_destroy;
-
- screen->pipe.get_name = nv20_screen_get_name;
- screen->pipe.get_vendor = nv20_screen_get_vendor;
- screen->pipe.get_param = nv20_screen_get_param;
- screen->pipe.get_paramf = nv20_screen_get_paramf;
-
- screen->pipe.is_format_supported = nv20_screen_is_format_supported;
-
- nv20_screen_init_miptree_functions(&screen->pipe);
- nv20_screen_init_transfer_functions(&screen->pipe);
- u_simple_screen_init(&screen->pipe);
-
- return &screen->pipe;
+ return pscreen;
}