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 10struct 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 19struct 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