Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
/*
2
 * Copyright 2010 Ben Skeggs
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * copy of this software and associated documentation files (the "Software"),
6
 * to deal in the Software without restriction, including without limitation
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * Software is furnished to do so, subject to the following conditions:
10
 *
11
 * The above copyright notice and this permission notice shall be included in
12
 * all copies or substantial portions of the Software.
13
 *
14
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20
 * OTHER DEALINGS IN THE SOFTWARE.
21
 */
22
 
23
#ifndef __NV50_PROG_H__
24
#define __NV50_PROG_H__
25
 
26
struct nv50_context;
27
 
28
#include "pipe/p_state.h"
29
#include "pipe/p_shader_tokens.h"
30
 
31
struct nv50_varying {
32
   uint8_t id; /* tgsi index */
33
   uint8_t hw; /* hw index, nv50 wants flat FP inputs last */
34
 
35
   unsigned mask   : 4;
36
   unsigned linear : 1;
37
   unsigned pad    : 3;
38
 
39
   ubyte sn; /* semantic name */
40
   ubyte si; /* semantic index */
41
};
42
 
43
struct nv50_stream_output_state
44
{
45
   uint32_t ctrl;
46
   uint16_t stride[4];
47
   uint8_t num_attribs[4];
48
   uint8_t map_size;
49
   uint8_t map[128];
50
};
51
 
52
struct nv50_program {
53
   struct pipe_shader_state pipe;
54
 
55
   ubyte type;
56
   boolean translated;
57
 
58
   uint32_t *code;
59
   unsigned code_size;
60
   unsigned code_base;
61
   uint32_t *immd;
62
   unsigned immd_size;
63
   unsigned parm_size; /* size limit of uniform buffer */
64
   uint32_t tls_space; /* required local memory per thread */
65
 
66
   ubyte max_gpr; /* REG_ALLOC_TEMP */
67
   ubyte max_out; /* REG_ALLOC_RESULT or FP_RESULT_COUNT */
68
 
69
   ubyte in_nr;
70
   ubyte out_nr;
71
   struct nv50_varying in[16];
72
   struct nv50_varying out[16];
73
 
74
   struct {
75
      uint32_t attrs[3]; /* VP_ATTR_EN_0,1 and VP_GP_BUILTIN_ATTR_EN */
76
      ubyte psiz;        /* output slot of point size */
77
      ubyte bfc[2];      /* indices into varying for FFC (FP) or BFC (VP) */
78
      ubyte edgeflag;
79
      ubyte clpd[2];     /* output slot of clip distance[i]'s 1st component */
80
      ubyte clpd_nr;
81
   } vp;
82
 
83
   struct {
84
      uint32_t flags[2]; /* 0x19a8, 196c */
85
      uint32_t interp; /* 0x1988 */
86
      uint32_t colors; /* 0x1904 */
87
   } fp;
88
 
89
   struct {
90
      ubyte primid; /* primitive id output register */
91
      uint8_t vert_count;
92
      uint8_t prim_type; /* point, line strip or tri strip */
93
   } gp;
94
 
95
   void *fixups; /* relocation records */
96
 
97
   struct nouveau_heap *mem;
98
 
99
   struct nv50_stream_output_state *so;
100
};
101
 
102
boolean nv50_program_translate(struct nv50_program *, uint16_t chipset);
103
boolean nv50_program_upload_code(struct nv50_context *, struct nv50_program *);
104
void nv50_program_destroy(struct nv50_context *, struct nv50_program *);
105
 
106
#endif /* __NV50_PROG_H__ */