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
21struct nv30_blend_stateobj {
22   struct pipe_blend_state pipe;
23   unsigned data[16];
24   unsigned size;
25};
26
27struct nv30_rasterizer_stateobj {
28   struct pipe_rasterizer_state pipe;
29   unsigned data[32];
30   unsigned size;
31};
32
33struct nv30_zsa_stateobj {
34   struct pipe_depth_stencil_alpha_state pipe;
35   unsigned data[36];
36   unsigned size;
37};
38
39struct 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
51struct 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
66struct nv30_shader_reloc {
67   unsigned location;
68   int target;
69};
70
71struct nv30_vertprog_exec {
72   uint32_t data[4];
73};
74
75struct nv30_vertprog_data {
76   int index; /* immediates == -1 */
77   float value[4];
78};
79
80struct 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
104struct nv30_fragprog_data {
105   unsigned offset;
106   unsigned index;
107};
108
109struct 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
132struct nv30_vertex_element {
133   unsigned state;
134};
135
136struct 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
147