Home | History | Annotate | Download | only in nvc0
      1 
      2 #ifndef __NVC0_PROGRAM_H__
      3 #define __NVC0_PROGRAM_H__
      4 
      5 #include "pipe/p_state.h"
      6 
      7 #define NVC0_CAP_MAX_PROGRAM_TEMPS 128
      8 
      9 
     10 struct nvc0_transform_feedback_state {
     11    uint32_t stride[4];
     12    uint8_t varying_count[4];
     13    uint8_t varying_index[4][128];
     14 };
     15 
     16 
     17 #define NVC0_SHADER_HEADER_SIZE (20 * 4)
     18 
     19 struct nvc0_program {
     20    struct pipe_shader_state pipe;
     21 
     22    ubyte type;
     23    boolean translated;
     24    boolean need_tls;
     25    uint8_t max_gpr;
     26 
     27    uint32_t *code;
     28    uint32_t *immd_data;
     29    unsigned code_base;
     30    unsigned code_size;
     31    unsigned immd_base;
     32    unsigned immd_size; /* size of immediate array data */
     33    unsigned parm_size; /* size of non-bindable uniforms (c0[]) */
     34 
     35    uint32_t hdr[20];
     36    uint32_t flags[2];
     37 
     38    struct {
     39       uint32_t clip_mode; /* clip/cull selection */
     40       uint8_t clip_enable; /* mask of defined clip planes */
     41       uint8_t num_ucps; /* also set to max if ClipDistance is used */
     42       uint8_t edgeflag; /* attribute index of edgeflag input */
     43       boolean need_vertex_id;
     44    } vp;
     45    struct {
     46       uint8_t early_z;
     47       uint8_t in_pos[PIPE_MAX_SHADER_INPUTS];
     48    } fp;
     49    struct {
     50       uint32_t tess_mode; /* ~0 if defined by the other stage */
     51       uint32_t input_patch_size;
     52    } tp;
     53 
     54    void *relocs;
     55 
     56    struct nvc0_transform_feedback_state *tfb;
     57 
     58    struct nouveau_heap *mem;
     59 };
     60 
     61 #endif
     62