Home | History | Annotate | Download | only in nv30
      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
    147