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 stream[4]; 13 uint8_t varying_count[4]; 14 uint8_t varying_index[4][128]; 15 }; 16 17 18 #define GF100_SHADER_HEADER_SIZE (20 * 4) 19 #define TU102_SHADER_HEADER_SIZE (32 * 4) 20 #define NVC0_MAX_SHADER_HEADER_SIZE TU102_SHADER_HEADER_SIZE 21 22 struct nvc0_program { 23 struct pipe_shader_state pipe; 24 25 ubyte type; 26 bool translated; 27 bool need_tls; 28 uint8_t num_gprs; 29 30 uint32_t *code; 31 unsigned code_base; 32 unsigned code_size; 33 unsigned parm_size; /* size of non-bindable uniforms (c0[]) */ 34 35 uint32_t hdr[NVC0_MAX_SHADER_HEADER_SIZE/4]; 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 cull_enable; /* mask of defined cull distances */ 42 uint8_t num_ucps; /* also set to max if ClipDistance is used */ 43 uint8_t edgeflag; /* attribute index of edgeflag input */ 44 bool need_vertex_id; 45 bool need_draw_parameters; 46 bool layer_viewport_relative; /* also applies go gp and tp */ 47 } vp; 48 struct { 49 uint8_t early_z; 50 uint8_t colors; 51 uint8_t color_interp[2]; 52 bool sample_mask_in; 53 bool force_persample_interp; 54 bool flatshade; 55 bool reads_framebuffer; 56 bool post_depth_coverage; 57 } fp; 58 struct { 59 uint32_t tess_mode; /* ~0 if defined by the other stage */ 60 } tp; 61 struct { 62 uint32_t lmem_size; /* local memory (TGSI PRIVATE resource) size */ 63 uint32_t smem_size; /* shared memory (TGSI LOCAL resource) size */ 64 } cp; 65 uint8_t num_barriers; 66 67 void *relocs; 68 void *fixups; 69 70 struct nvc0_transform_feedback_state *tfb; 71 72 struct nouveau_heap *mem; 73 }; 74 75 void 76 nvc0_program_sp_start_id(struct nvc0_context *, int, struct nvc0_program *); 77 #endif 78