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