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