Tizen 2.0 Release
[profile/ivi/osmesa.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[82]; // 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[42];
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