Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 1 | #include "pipe/p_screen.h" |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 2 | #include "pipe/p_state.h" |
| 3 | |
| 4 | #include "nouveau/nouveau_screen.h" |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 5 | |
| 6 | #include "nv30_context.h" |
| 7 | #include "nv30_screen.h" |
| 8 | |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 9 | #define NV30TCL_CHIPSET_3X_MASK 0x00000003 |
| 10 | #define NV34TCL_CHIPSET_3X_MASK 0x00000010 |
| 11 | #define NV35TCL_CHIPSET_3X_MASK 0x000001e0 |
| 12 | |
Patrice Mandin | a5a05fd | 2009-10-15 22:41:09 +0200 | [diff] [blame] | 13 | /* FIXME: It seems I should not include directly ../../winsys/drm/nouveau/drm/nouveau_drm_api.h |
| 14 | * to get the pointer to the context front buffer, so I copied nouveau_winsys here. |
| 15 | * nv30_screen_surface_format_supported() can then use it to enforce creating fbo |
| 16 | * with same number of bits everywhere. |
| 17 | */ |
| 18 | struct nouveau_winsys { |
| 19 | struct pipe_winsys base; |
| 20 | |
| 21 | struct pipe_screen *pscreen; |
| 22 | |
| 23 | unsigned nr_pctx; |
| 24 | struct pipe_context **pctx; |
| 25 | |
| 26 | struct pipe_surface *front; |
| 27 | }; |
| 28 | |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 29 | static int |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 30 | nv30_screen_get_param(struct pipe_screen *pscreen, int param) |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 31 | { |
| 32 | switch (param) { |
| 33 | case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS: |
| 34 | return 16; |
| 35 | case PIPE_CAP_NPOT_TEXTURES: |
Patrice Mandin | 1d50e26 | 2008-07-12 15:07:02 +0200 | [diff] [blame] | 36 | return 0; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 37 | case PIPE_CAP_TWO_SIDED_STENCIL: |
| 38 | return 1; |
| 39 | case PIPE_CAP_GLSL: |
| 40 | return 0; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 41 | case PIPE_CAP_ANISOTROPIC_FILTER: |
| 42 | return 1; |
| 43 | case PIPE_CAP_POINT_SPRITE: |
| 44 | return 1; |
| 45 | case PIPE_CAP_MAX_RENDER_TARGETS: |
| 46 | return 2; |
| 47 | case PIPE_CAP_OCCLUSION_QUERY: |
| 48 | return 1; |
| 49 | case PIPE_CAP_TEXTURE_SHADOW_MAP: |
| 50 | return 1; |
| 51 | case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: |
| 52 | return 13; |
| 53 | case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: |
| 54 | return 10; |
| 55 | case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: |
| 56 | return 13; |
Patrice Mandin | a7ea6ba | 2008-08-14 16:36:52 +0200 | [diff] [blame] | 57 | case PIPE_CAP_TEXTURE_MIRROR_CLAMP: |
| 58 | return 0; |
| 59 | case PIPE_CAP_TEXTURE_MIRROR_REPEAT: |
| 60 | return 1; |
Ben Skeggs | 300e42d | 2008-12-16 17:30:04 +1100 | [diff] [blame] | 61 | case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: |
| 62 | return 0; |
Ben Skeggs | 55e5ac1 | 2009-07-01 08:56:46 +1000 | [diff] [blame] | 63 | case PIPE_CAP_TGSI_CONT_SUPPORTED: |
| 64 | return 0; |
Patrice Mandin | 54cf632 | 2009-07-14 09:44:49 +0200 | [diff] [blame] | 65 | case PIPE_CAP_BLEND_EQUATION_SEPARATE: |
| 66 | return 0; |
Ben Skeggs | fbb6cc7 | 2008-04-04 12:39:45 +1000 | [diff] [blame] | 67 | case NOUVEAU_CAP_HW_VTXBUF: |
| 68 | case NOUVEAU_CAP_HW_IDXBUF: |
Patrice Mandin | 12118fc | 2008-07-12 13:16:47 +0200 | [diff] [blame] | 69 | return 1; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 70 | default: |
| 71 | NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param); |
| 72 | return 0; |
| 73 | } |
| 74 | } |
| 75 | |
| 76 | static float |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 77 | nv30_screen_get_paramf(struct pipe_screen *pscreen, int param) |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 78 | { |
| 79 | switch (param) { |
| 80 | case PIPE_CAP_MAX_LINE_WIDTH: |
| 81 | case PIPE_CAP_MAX_LINE_WIDTH_AA: |
| 82 | return 10.0; |
| 83 | case PIPE_CAP_MAX_POINT_WIDTH: |
| 84 | case PIPE_CAP_MAX_POINT_WIDTH_AA: |
| 85 | return 64.0; |
| 86 | case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: |
Patrice Mandin | fa167ee | 2008-07-12 13:59:24 +0200 | [diff] [blame] | 87 | return 8.0; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 88 | case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: |
| 89 | return 4.0; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 90 | default: |
| 91 | NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param); |
| 92 | return 0.0; |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | static boolean |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 97 | nv30_screen_surface_format_supported(struct pipe_screen *pscreen, |
Ben Skeggs | 39793a2 | 2008-07-23 14:14:55 +1000 | [diff] [blame] | 98 | enum pipe_format format, |
| 99 | enum pipe_texture_target target, |
| 100 | unsigned tex_usage, unsigned geom_flags) |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 101 | { |
Patrice Mandin | a5a05fd | 2009-10-15 22:41:09 +0200 | [diff] [blame] | 102 | struct pipe_surface *front = ((struct nouveau_winsys *) pscreen->winsys)->front; |
| 103 | |
Ben Skeggs | 39793a2 | 2008-07-23 14:14:55 +1000 | [diff] [blame] | 104 | if (tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET) { |
Patrice Mandin | d9014a1 | 2009-10-23 18:42:21 +0200 | [diff] [blame] | 105 | switch (format) { |
| 106 | case PIPE_FORMAT_A8R8G8B8_UNORM: |
| 107 | case PIPE_FORMAT_R5G6B5_UNORM: |
| 108 | return TRUE; |
| 109 | default: |
| 110 | break; |
| 111 | } |
Ben Skeggs | 18a1c36 | 2009-07-01 09:15:51 +1000 | [diff] [blame] | 112 | } else |
| 113 | if (tex_usage & PIPE_TEXTURE_USAGE_DEPTH_STENCIL) { |
Patrice Mandin | b704239 | 2009-07-22 22:25:36 +0200 | [diff] [blame] | 114 | switch (format) { |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 115 | case PIPE_FORMAT_Z24S8_UNORM: |
Ben Skeggs | 18a1c36 | 2009-07-01 09:15:51 +1000 | [diff] [blame] | 116 | case PIPE_FORMAT_Z24X8_UNORM: |
Patrice Mandin | d9014a1 | 2009-10-23 18:42:21 +0200 | [diff] [blame] | 117 | return TRUE; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 118 | case PIPE_FORMAT_Z16_UNORM: |
Patrice Mandin | b353106 | 2009-11-17 19:50:37 +0100 | [diff] [blame] | 119 | if (front) { |
| 120 | return (front->format == PIPE_FORMAT_R5G6B5_UNORM); |
| 121 | } |
| 122 | return TRUE; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 123 | default: |
| 124 | break; |
| 125 | } |
Ben Skeggs | 39793a2 | 2008-07-23 14:14:55 +1000 | [diff] [blame] | 126 | } else { |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 127 | switch (format) { |
| 128 | case PIPE_FORMAT_A8R8G8B8_UNORM: |
| 129 | case PIPE_FORMAT_A1R5G5B5_UNORM: |
| 130 | case PIPE_FORMAT_A4R4G4B4_UNORM: |
Younes Manton | 0b03cd4 | 2009-01-10 14:09:59 -0500 | [diff] [blame] | 131 | case PIPE_FORMAT_R5G6B5_UNORM: |
Ben Skeggs | f5599a7 | 2008-05-25 14:25:15 +1000 | [diff] [blame] | 132 | case PIPE_FORMAT_L8_UNORM: |
| 133 | case PIPE_FORMAT_A8_UNORM: |
| 134 | case PIPE_FORMAT_I8_UNORM: |
| 135 | case PIPE_FORMAT_A8L8_UNORM: |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 136 | case PIPE_FORMAT_Z16_UNORM: |
| 137 | case PIPE_FORMAT_Z24S8_UNORM: |
| 138 | return TRUE; |
| 139 | default: |
| 140 | break; |
| 141 | } |
Ben Skeggs | 39793a2 | 2008-07-23 14:14:55 +1000 | [diff] [blame] | 142 | } |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 143 | |
| 144 | return FALSE; |
| 145 | } |
| 146 | |
Younes Manton | 32cd1a0 | 2009-02-07 12:53:30 -0500 | [diff] [blame] | 147 | static struct pipe_buffer * |
| 148 | nv30_surface_buffer(struct pipe_surface *surf) |
| 149 | { |
| 150 | struct nv30_miptree *mt = (struct nv30_miptree *)surf->texture; |
| 151 | |
| 152 | return mt->buffer; |
| 153 | } |
| 154 | |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 155 | static void |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 156 | nv30_screen_destroy(struct pipe_screen *pscreen) |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 157 | { |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 158 | struct nv30_screen *screen = nv30_screen(pscreen); |
Younes Manton | 85dcc07 | 2009-12-28 17:33:34 -0500 | [diff] [blame] | 159 | unsigned i; |
| 160 | |
| 161 | for (i = 0; i < NV30_STATE_MAX; i++) { |
| 162 | if (screen->state[i]) |
| 163 | so_ref(NULL, &screen->state[i]); |
| 164 | } |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 165 | |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 166 | nouveau_resource_free(&screen->vp_exec_heap); |
| 167 | nouveau_resource_free(&screen->vp_data_heap); |
| 168 | nouveau_resource_free(&screen->query_heap); |
| 169 | nouveau_notifier_free(&screen->query); |
| 170 | nouveau_notifier_free(&screen->sync); |
| 171 | nouveau_grobj_free(&screen->rankine); |
Younes Manton | 85dcc07 | 2009-12-28 17:33:34 -0500 | [diff] [blame] | 172 | nv04_surface_2d_takedown(&screen->eng2d); |
| 173 | |
| 174 | nouveau_screen_fini(&screen->base); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 175 | |
| 176 | FREE(pscreen); |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 177 | } |
| 178 | |
| 179 | struct pipe_screen * |
Ben Skeggs | 80e9e1e | 2009-06-05 10:28:13 +1000 | [diff] [blame] | 180 | nv30_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev) |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 181 | { |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 182 | struct nv30_screen *screen = CALLOC_STRUCT(nv30_screen); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 183 | struct nouveau_channel *chan; |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 184 | struct pipe_screen *pscreen; |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 185 | struct nouveau_stateobj *so; |
| 186 | unsigned rankine_class = 0; |
| 187 | int ret, i; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 188 | |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 189 | if (!screen) |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 190 | return NULL; |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 191 | pscreen = &screen->base.base; |
| 192 | |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 193 | ret = nouveau_screen_init(&screen->base, dev); |
| 194 | if (ret) { |
| 195 | nv30_screen_destroy(pscreen); |
| 196 | return NULL; |
| 197 | } |
Ben Skeggs | 80e9e1e | 2009-06-05 10:28:13 +1000 | [diff] [blame] | 198 | chan = screen->base.channel; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 199 | |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 200 | pscreen->winsys = ws; |
| 201 | pscreen->destroy = nv30_screen_destroy; |
| 202 | pscreen->get_param = nv30_screen_get_param; |
| 203 | pscreen->get_paramf = nv30_screen_get_paramf; |
| 204 | pscreen->is_format_supported = nv30_screen_surface_format_supported; |
| 205 | |
| 206 | nv30_screen_init_miptree_functions(pscreen); |
| 207 | nv30_screen_init_transfer_functions(pscreen); |
Ben Skeggs | ff8dff0 | 2009-02-05 18:19:32 +1000 | [diff] [blame] | 208 | |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 209 | /* 3D object */ |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 210 | switch (dev->chipset & 0xf0) { |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 211 | case 0x30: |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 212 | if (NV30TCL_CHIPSET_3X_MASK & (1 << (dev->chipset & 0x0f))) |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 213 | rankine_class = 0x0397; |
| 214 | else |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 215 | if (NV34TCL_CHIPSET_3X_MASK & (1 << (dev->chipset & 0x0f))) |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 216 | rankine_class = 0x0697; |
| 217 | else |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 218 | if (NV35TCL_CHIPSET_3X_MASK & (1 << (dev->chipset & 0x0f))) |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 219 | rankine_class = 0x0497; |
| 220 | break; |
| 221 | default: |
| 222 | break; |
| 223 | } |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 224 | |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 225 | if (!rankine_class) { |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 226 | NOUVEAU_ERR("Unknown nv3x chipset: nv%02x\n", dev->chipset); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 227 | return NULL; |
| 228 | } |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 229 | |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 230 | ret = nouveau_grobj_alloc(chan, 0xbeef3097, rankine_class, |
| 231 | &screen->rankine); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 232 | if (ret) { |
| 233 | NOUVEAU_ERR("Error creating 3D object: %d\n", ret); |
| 234 | return FALSE; |
| 235 | } |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 236 | |
| 237 | /* 2D engine setup */ |
Ben Skeggs | 80e9e1e | 2009-06-05 10:28:13 +1000 | [diff] [blame] | 238 | screen->eng2d = nv04_surface_2d_init(&screen->base); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 239 | screen->eng2d->buf = nv30_surface_buffer; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 240 | |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 241 | /* Notifier for sync purposes */ |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 242 | ret = nouveau_notifier_alloc(chan, 0xbeef0301, 1, &screen->sync); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 243 | if (ret) { |
| 244 | NOUVEAU_ERR("Error creating notifier object: %d\n", ret); |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 245 | nv30_screen_destroy(pscreen); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 246 | return NULL; |
| 247 | } |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 248 | |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 249 | /* Query objects */ |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 250 | ret = nouveau_notifier_alloc(chan, 0xbeef0302, 32, &screen->query); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 251 | if (ret) { |
| 252 | NOUVEAU_ERR("Error initialising query objects: %d\n", ret); |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 253 | nv30_screen_destroy(pscreen); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 254 | return NULL; |
| 255 | } |
Patrice Mandin | a514aeb | 2008-03-18 13:20:59 +0100 | [diff] [blame] | 256 | |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 257 | ret = nouveau_resource_init(&screen->query_heap, 0, 32); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 258 | if (ret) { |
| 259 | NOUVEAU_ERR("Error initialising query object heap: %d\n", ret); |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 260 | nv30_screen_destroy(pscreen); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 261 | return NULL; |
| 262 | } |
| 263 | |
| 264 | /* Vtxprog resources */ |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 265 | if (nouveau_resource_init(&screen->vp_exec_heap, 0, 256) || |
| 266 | nouveau_resource_init(&screen->vp_data_heap, 0, 256)) { |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 267 | nv30_screen_destroy(pscreen); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 268 | return NULL; |
| 269 | } |
| 270 | |
| 271 | /* Static rankine initialisation */ |
Maarten Maathuis | c77ade8 | 2009-12-29 23:59:08 +0100 | [diff] [blame] | 272 | so = so_new(36, 60, 0); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 273 | so_method(so, screen->rankine, NV34TCL_DMA_NOTIFY, 1); |
| 274 | so_data (so, screen->sync->handle); |
| 275 | so_method(so, screen->rankine, NV34TCL_DMA_TEXTURE0, 2); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 276 | so_data (so, chan->vram->handle); |
| 277 | so_data (so, chan->gart->handle); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 278 | so_method(so, screen->rankine, NV34TCL_DMA_COLOR1, 1); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 279 | so_data (so, chan->vram->handle); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 280 | so_method(so, screen->rankine, NV34TCL_DMA_COLOR0, 2); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 281 | so_data (so, chan->vram->handle); |
| 282 | so_data (so, chan->vram->handle); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 283 | so_method(so, screen->rankine, NV34TCL_DMA_VTXBUF0, 2); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 284 | so_data (so, chan->vram->handle); |
| 285 | so_data (so, chan->gart->handle); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 286 | /* so_method(so, screen->rankine, NV34TCL_DMA_FENCE, 2); |
| 287 | so_data (so, 0); |
| 288 | so_data (so, screen->query->handle);*/ |
| 289 | so_method(so, screen->rankine, NV34TCL_DMA_IN_MEMORY7, 1); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 290 | so_data (so, chan->vram->handle); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 291 | so_method(so, screen->rankine, NV34TCL_DMA_IN_MEMORY8, 1); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 292 | so_data (so, chan->vram->handle); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 293 | |
| 294 | for (i=1; i<8; i++) { |
| 295 | so_method(so, screen->rankine, NV34TCL_VIEWPORT_CLIP_HORIZ(i), 1); |
| 296 | so_data (so, 0); |
| 297 | so_method(so, screen->rankine, NV34TCL_VIEWPORT_CLIP_VERT(i), 1); |
| 298 | so_data (so, 0); |
| 299 | } |
| 300 | |
| 301 | so_method(so, screen->rankine, 0x220, 1); |
| 302 | so_data (so, 1); |
| 303 | |
| 304 | so_method(so, screen->rankine, 0x03b0, 1); |
| 305 | so_data (so, 0x00100000); |
| 306 | so_method(so, screen->rankine, 0x1454, 1); |
| 307 | so_data (so, 0); |
| 308 | so_method(so, screen->rankine, 0x1d80, 1); |
| 309 | so_data (so, 3); |
| 310 | so_method(so, screen->rankine, 0x1450, 1); |
| 311 | so_data (so, 0x00030004); |
Younes Manton | 0b03cd4 | 2009-01-10 14:09:59 -0500 | [diff] [blame] | 312 | |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 313 | /* NEW */ |
| 314 | so_method(so, screen->rankine, 0x1e98, 1); |
| 315 | so_data (so, 0); |
| 316 | so_method(so, screen->rankine, 0x17e0, 3); |
| 317 | so_data (so, fui(0.0)); |
| 318 | so_data (so, fui(0.0)); |
| 319 | so_data (so, fui(1.0)); |
| 320 | so_method(so, screen->rankine, 0x1f80, 16); |
| 321 | for (i=0; i<16; i++) { |
| 322 | so_data (so, (i==8) ? 0x0000ffff : 0); |
| 323 | } |
| 324 | |
| 325 | so_method(so, screen->rankine, 0x120, 3); |
| 326 | so_data (so, 0); |
| 327 | so_data (so, 1); |
| 328 | so_data (so, 2); |
| 329 | |
| 330 | so_method(so, screen->rankine, 0x1d88, 1); |
| 331 | so_data (so, 0x00001200); |
| 332 | |
| 333 | so_method(so, screen->rankine, NV34TCL_RC_ENABLE, 1); |
| 334 | so_data (so, 0); |
| 335 | |
| 336 | so_method(so, screen->rankine, NV34TCL_DEPTH_RANGE_NEAR, 2); |
| 337 | so_data (so, fui(0.0)); |
| 338 | so_data (so, fui(1.0)); |
| 339 | |
| 340 | so_method(so, screen->rankine, NV34TCL_MULTISAMPLE_CONTROL, 1); |
| 341 | so_data (so, 0xffff0000); |
| 342 | |
| 343 | /* enables use of vp rather than fixed-function somehow */ |
| 344 | so_method(so, screen->rankine, 0x1e94, 1); |
| 345 | so_data (so, 0x13); |
| 346 | |
Ben Skeggs | 80e9e1e | 2009-06-05 10:28:13 +1000 | [diff] [blame] | 347 | so_emit(chan, so); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 348 | so_ref(NULL, &so); |
Ben Skeggs | 1b207d9 | 2009-06-05 08:47:42 +1000 | [diff] [blame] | 349 | nouveau_pushbuf_flush(chan, 0); |
Patrice Mandin | 186277e | 2008-04-11 23:39:29 +0200 | [diff] [blame] | 350 | |
Ben Skeggs | 901d7c3 | 2009-06-04 21:37:59 +1000 | [diff] [blame] | 351 | return pscreen; |
Ben Skeggs | 84cc07d | 2008-02-29 15:03:57 +1100 | [diff] [blame] | 352 | } |