#ifndef __NV30_STATE_H__ #define __NV30_STATE_H__ #include "pipe/p_state.h" #include "tgsi/tgsi_scan.h" #include "util/u_dynarray.h" #define NV30_QUERY_ZCULL_0 (PIPE_QUERY_TYPES + 0) #define NV30_QUERY_ZCULL_1 (PIPE_QUERY_TYPES + 1) #define NV30_QUERY_ZCULL_2 (PIPE_QUERY_TYPES + 2) #define NV30_QUERY_ZCULL_3 (PIPE_QUERY_TYPES + 3) #define SB_DATA(so, u) (so)->data[(so)->size++] = (u) #define SB_MTHD30(so, mthd, size) \ SB_DATA((so), ((size) << 18) | (7 << 13) | NV30_3D_##mthd) #define SB_MTHD40(so, mthd, size) \ SB_DATA((so), ((size) << 18) | (7 << 13) | NV40_3D_##mthd) struct nv30_blend_stateobj { struct pipe_blend_state pipe; unsigned data[16]; unsigned size; }; struct nv30_rasterizer_stateobj { struct pipe_rasterizer_state pipe; unsigned data[32]; unsigned size; }; struct nv30_zsa_stateobj { struct pipe_depth_stencil_alpha_state pipe; unsigned data[32]; unsigned size; }; struct nv30_sampler_state { struct pipe_sampler_state pipe; unsigned fmt; unsigned wrap; unsigned en; unsigned filt; unsigned bcol; /* 4.8 */ unsigned min_lod; unsigned max_lod; }; struct nv30_sampler_view { struct pipe_sampler_view pipe; unsigned fmt; unsigned swz; unsigned filt; unsigned filt_mask; unsigned wrap; unsigned wrap_mask; unsigned npot_size0; unsigned npot_size1; /* 4.8 */ unsigned base_lod; unsigned high_lod; }; struct nv30_shader_reloc { unsigned location; unsigned target; }; struct nv30_vertprog_exec { uint32_t data[4]; }; struct nv30_vertprog_data { int index; /* immediates == -1 */ float value[4]; }; struct nv30_vertprog { struct pipe_shader_state pipe; struct tgsi_shader_info info; struct draw_vertex_shader *draw; boolean translated; unsigned enabled_ucps; uint16_t texcoord[10]; struct util_dynarray branch_relocs; struct nv30_vertprog_exec *insns; unsigned nr_insns; struct util_dynarray const_relocs; struct nv30_vertprog_data *consts; unsigned nr_consts; struct nouveau_heap *exec; struct nouveau_heap *data; uint32_t ir; uint32_t or; void *nvfx; }; struct nv30_fragprog_data { unsigned offset; unsigned index; }; struct nv30_fragprog { struct pipe_shader_state pipe; struct tgsi_shader_info info; struct draw_fragment_shader *draw; boolean translated; uint32_t *insn; unsigned insn_len; uint16_t texcoord[10]; struct nv30_fragprog_data *consts; unsigned nr_consts; struct pipe_resource *buffer; uint32_t vp_or; /* appended to VP_RESULT_EN */ uint32_t fp_control; uint32_t point_sprite_control; uint32_t coord_conventions; uint32_t texcoords; uint32_t rt_enable; }; struct nv30_vertex_element { unsigned state; }; struct nv30_vertex_stateobj { struct pipe_vertex_element pipe[PIPE_MAX_ATTRIBS]; struct translate *translate; bool need_conversion; unsigned num_elements; unsigned vtx_size; unsigned vtx_per_packet_max; struct nv30_vertex_element element[]; }; #endif