v3d: Put default vertex attribute values into the state uploader as well.
[mesa.git] / src / gallium / drivers / nouveau / nv30 / nv30_state.h
1 #ifndef __NV30_STATE_H__
2 #define __NV30_STATE_H__
3
4 #include "pipe/p_state.h"
5 #include "tgsi/tgsi_scan.h"
6 #include "util/u_dynarray.h"
7
8 #define NV30_QUERY_ZCULL_0 (PIPE_QUERY_TYPES + 0)
9 #define NV30_QUERY_ZCULL_1 (PIPE_QUERY_TYPES + 1)
10 #define NV30_QUERY_ZCULL_2 (PIPE_QUERY_TYPES + 2)
11 #define NV30_QUERY_ZCULL_3 (PIPE_QUERY_TYPES + 3)
12
13 #define SB_DATA(so, u) (so)->data[(so)->size++] = (u)
14 #define SB_MTHD30(so, mthd, size) \
15 SB_DATA((so), ((size) << 18) | (7 << 13) | NV30_3D_##mthd)
16 #define SB_MTHD35(so, mthd, size) \
17 SB_DATA((so), ((size) << 18) | (7 << 13) | NV35_3D_##mthd)
18 #define SB_MTHD40(so, mthd, size) \
19 SB_DATA((so), ((size) << 18) | (7 << 13) | NV40_3D_##mthd)
20
21 struct nv30_blend_stateobj {
22 struct pipe_blend_state pipe;
23 unsigned data[16];
24 unsigned size;
25 };
26
27 struct nv30_rasterizer_stateobj {
28 struct pipe_rasterizer_state pipe;
29 unsigned data[32];
30 unsigned size;
31 };
32
33 struct nv30_zsa_stateobj {
34 struct pipe_depth_stencil_alpha_state pipe;
35 unsigned data[36];
36 unsigned size;
37 };
38
39 struct nv30_sampler_state {
40 struct pipe_sampler_state pipe;
41 unsigned fmt;
42 unsigned wrap;
43 unsigned en;
44 unsigned filt;
45 unsigned bcol;
46 /* 4.8 */
47 unsigned min_lod;
48 unsigned max_lod;
49 };
50
51 struct nv30_sampler_view {
52 struct pipe_sampler_view pipe;
53 unsigned fmt;
54 unsigned swz;
55 unsigned filt;
56 unsigned filt_mask;
57 unsigned wrap;
58 unsigned wrap_mask;
59 unsigned npot_size0;
60 unsigned npot_size1;
61 /* 4.8 */
62 unsigned base_lod;
63 unsigned high_lod;
64 };
65
66 struct nv30_shader_reloc {
67 unsigned location;
68 int target;
69 };
70
71 struct nv30_vertprog_exec {
72 uint32_t data[4];
73 };
74
75 struct nv30_vertprog_data {
76 int index; /* immediates == -1 */
77 float value[4];
78 };
79
80 struct nv30_vertprog {
81 struct pipe_shader_state pipe;
82 struct tgsi_shader_info info;
83
84 struct draw_vertex_shader *draw;
85 bool translated;
86 unsigned enabled_ucps;
87 uint16_t texcoord[10];
88
89 struct util_dynarray branch_relocs;
90 struct nv30_vertprog_exec *insns;
91 unsigned nr_insns;
92
93 struct util_dynarray const_relocs;
94 struct nv30_vertprog_data *consts;
95 unsigned nr_consts;
96
97 struct nouveau_heap *exec;
98 struct nouveau_heap *data;
99 uint32_t ir;
100 uint32_t or;
101 void *nvfx;
102 };
103
104 struct nv30_fragprog_data {
105 unsigned offset;
106 unsigned index;
107 };
108
109 struct nv30_fragprog {
110 struct pipe_shader_state pipe;
111 struct tgsi_shader_info info;
112
113 struct draw_fragment_shader *draw;
114 bool translated;
115
116 uint32_t *insn;
117 unsigned insn_len;
118
119 uint16_t texcoord[10];
120 struct nv30_fragprog_data *consts;
121 unsigned nr_consts;
122
123 struct pipe_resource *buffer;
124 uint32_t vp_or; /* appended to VP_RESULT_EN */
125 uint32_t fp_control;
126 uint32_t point_sprite_control;
127 uint32_t coord_conventions;
128 uint32_t texcoords;
129 uint32_t rt_enable;
130 };
131
132 struct nv30_vertex_element {
133 unsigned state;
134 };
135
136 struct nv30_vertex_stateobj {
137 struct pipe_vertex_element pipe[PIPE_MAX_ATTRIBS];
138 struct translate *translate;
139 bool need_conversion;
140 unsigned num_elements;
141 unsigned vtx_size;
142 unsigned vtx_per_packet_max;
143 struct nv30_vertex_element element[];
144 };
145
146 #endif