dri/nouveau: Split out the scratch helpers to a separate file.
[mesa.git] / src / mesa / drivers / dri / nouveau / nouveau_render.h
1 /*
2 * Copyright (C) 2009-2010 Francisco Jerez.
3 * All Rights Reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the
14 * next paragraph) shall be included in all copies or substantial
15 * portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 *
25 */
26
27 #ifndef __NOUVEAU_RENDER_H__
28 #define __NOUVEAU_RENDER_H__
29
30 #include "vbo/vbo_context.h"
31
32 struct nouveau_array_state;
33
34 typedef void (*dispatch_t)(struct gl_context *, unsigned int, int, unsigned int);
35 typedef unsigned (*extract_u_t)(struct nouveau_array_state *, int, int);
36 typedef float (*extract_f_t)(struct nouveau_array_state *, int, int);
37
38 struct nouveau_attr_info {
39 int vbo_index;
40 int imm_method;
41 int imm_fields;
42
43 void (*emit)(struct gl_context *, struct nouveau_array_state *, const void *);
44 };
45
46 struct nouveau_array_state {
47 int attr;
48 int stride, fields, type;
49
50 struct nouveau_bo *bo;
51 unsigned offset;
52 const void *buf;
53
54 extract_u_t extract_u;
55 extract_f_t extract_f;
56 };
57
58 struct nouveau_swtnl_state {
59 struct nouveau_bo *vbo;
60 unsigned offset;
61 void *buf;
62 unsigned vertex_count;
63 GLenum primitive;
64 };
65
66 struct nouveau_render_state {
67 enum {
68 VBO,
69 IMM
70 } mode;
71
72 struct nouveau_array_state ib;
73 struct nouveau_array_state attrs[VERT_ATTRIB_MAX];
74
75 /* Maps a HW VBO index or IMM emission order to an index in
76 * the attrs array above (or -1 if unused). */
77 int map[VERT_ATTRIB_MAX];
78
79 int attr_count;
80 int vertex_size;
81
82 struct nouveau_swtnl_state swtnl;
83 };
84
85 #define to_render_state(ctx) (&to_nouveau_context(ctx)->render)
86
87 #endif