Merge branch 'gallium-polygon-stipple'
[mesa.git] / src / gallium / drivers / nv50 / nv50_stateobj.h
1
2 #ifndef __NV50_STATEOBJ_H__
3 #define __NV50_STATEOBJ_H__
4
5 #include "pipe/p_state.h"
6
7 #define NV50_SCISSORS_CLIPPING
8
9 #define SB_BEGIN_3D(so, m, s) \
10 (so)->state[(so)->size++] = \
11 ((s) << 18) | (NV50_SUBCH_3D << 13) | NV50_3D_##m
12
13 #define SB_BEGIN_3D_(so, m, s) \
14 (so)->state[(so)->size++] = \
15 ((s) << 18) | (NV50_SUBCH_3D << 13) | m
16
17 #define SB_DATA(so, u) (so)->state[(so)->size++] = (u)
18
19 #include "nv50_stateobj_tex.h"
20
21 struct nv50_blend_stateobj {
22 struct pipe_blend_state pipe;
23 int size;
24 uint32_t state[84]; // TODO: allocate less if !independent_blend_enable
25 };
26
27 struct nv50_rasterizer_stateobj {
28 struct pipe_rasterizer_state pipe;
29 int size;
30 uint32_t state[44];
31 };
32
33 struct nv50_zsa_stateobj {
34 struct pipe_depth_stencil_alpha_state pipe;
35 int size;
36 uint32_t state[29];
37 };
38
39 struct nv50_vertex_element {
40 struct pipe_vertex_element pipe;
41 uint32_t state;
42 };
43
44 struct nv50_vertex_stateobj {
45 struct translate *translate;
46 unsigned num_elements;
47 uint32_t instance_elts;
48 uint32_t instance_bufs;
49 boolean need_conversion;
50 unsigned vertex_size;
51 unsigned packet_vertex_limit;
52 struct nv50_vertex_element element[0];
53 };
54
55 #endif