nouveau: implement pipe_screen
[mesa.git] / src / gallium / drivers / nv50 / nv50_screen.c
1 #include "pipe/p_screen.h"
2 #include "pipe/p_util.h"
3
4 #include "nv50_context.h"
5 #include "nv50_screen.h"
6
7 static boolean
8 nv50_screen_is_format_supported(struct pipe_screen *pscreen,
9 enum pipe_format format, uint type)
10 {
11 return FALSE;
12 }
13
14 static const char *
15 nv50_screen_get_name(struct pipe_screen *pscreen)
16 {
17 struct nv50_screen *screen = nv50_screen(pscreen);
18 static char buffer[128];
19
20 snprintf(buffer, sizeof(buffer), "NV%02X", screen->chipset);
21 return buffer;
22 }
23
24 static const char *
25 nv50_screen_get_vendor(struct pipe_screen *pscreen)
26 {
27 return "nouveau";
28 }
29
30 static int
31 nv50_screen_get_param(struct pipe_screen *pscreen, int param)
32 {
33 switch (param) {
34 case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
35 return 32;
36 case PIPE_CAP_NPOT_TEXTURES:
37 return 0;
38 case PIPE_CAP_TWO_SIDED_STENCIL:
39 return 1;
40 case PIPE_CAP_GLSL:
41 return 0;
42 case PIPE_CAP_S3TC:
43 return 0;
44 case PIPE_CAP_ANISOTROPIC_FILTER:
45 return 0;
46 case PIPE_CAP_POINT_SPRITE:
47 return 0;
48 case PIPE_CAP_MAX_RENDER_TARGETS:
49 return 8;
50 case PIPE_CAP_OCCLUSION_QUERY:
51 return 0;
52 case PIPE_CAP_TEXTURE_SHADOW_MAP:
53 return 0;
54 case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
55 return 13;
56 case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
57 return 10;
58 case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
59 return 13;
60 default:
61 NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param);
62 return 0;
63 }
64 }
65
66 static float
67 nv50_screen_get_paramf(struct pipe_screen *pscreen, int param)
68 {
69 switch (param) {
70 case PIPE_CAP_MAX_LINE_WIDTH:
71 case PIPE_CAP_MAX_LINE_WIDTH_AA:
72 return 10.0;
73 case PIPE_CAP_MAX_POINT_WIDTH:
74 case PIPE_CAP_MAX_POINT_WIDTH_AA:
75 return 64.0;
76 case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
77 return 16.0;
78 case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
79 return 4.0;
80 default:
81 NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param);
82 return 0.0;
83 }
84 }
85
86 static void
87 nv50_screen_destroy(struct pipe_screen *pscreen)
88 {
89 FREE(pscreen);
90 }
91
92 struct pipe_screen *
93 nv50_screen_create(struct pipe_winsys *ws, unsigned chipset)
94 {
95 struct nv50_screen *screen = CALLOC_STRUCT(nv50_screen);
96
97 if (!screen)
98 return NULL;
99
100 screen->chipset = chipset;
101
102 screen->pipe.winsys = ws;
103
104 screen->pipe.destroy = nv50_screen_destroy;
105
106 screen->pipe.get_name = nv50_screen_get_name;
107 screen->pipe.get_vendor = nv50_screen_get_vendor;
108 screen->pipe.get_param = nv50_screen_get_param;
109 screen->pipe.get_paramf = nv50_screen_get_paramf;
110
111 screen->pipe.is_format_supported = nv50_screen_is_format_supported;
112
113 nv50_screen_init_miptree_functions(&screen->pipe);
114
115 return &screen->pipe;
116 }
117