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