blob: 461fec1d89c323663602f52e89e4d23358bebdd9 [file] [log] [blame]
Ben Skeggs19a1e902008-06-11 14:59:19 +10001#ifndef __NV50_PROGRAM_H__
2#define __NV50_PROGRAM_H__
Ben Skeggs47b418b2007-12-05 14:01:01 +11003
4#include "pipe/p_state.h"
Ben Skeggsfda01b52008-08-07 11:26:17 +10005#include "tgsi/tgsi_scan.h"
Ben Skeggs47b418b2007-12-05 14:01:01 +11006
Ben Skeggs40137ea2008-06-12 12:16:43 +10007struct nv50_program_exec {
8 struct nv50_program_exec *next;
9
10 unsigned inst[2];
11 struct {
12 int index;
13 unsigned mask;
14 unsigned shift;
15 } param;
16};
17
Christoph Bumiller65165942009-09-14 20:23:39 +020018struct nv50_sreg4 {
19 uint8_t hw;
Christoph Bumiller7494b822009-11-29 13:33:16 +010020 uint8_t id; /* tgsi index, nv50 needs them sorted: flat ones last */
Christoph Bumiller65165942009-09-14 20:23:39 +020021
22 uint8_t mask;
23 boolean linear;
24};
25
Ben Skeggsf722fd92008-06-01 22:41:40 +100026struct nv50_program {
27 struct pipe_shader_state pipe;
28 struct tgsi_shader_info info;
29 boolean translated;
30
Ben Skeggsb5bbf092008-06-09 13:09:55 +100031 unsigned type;
Ben Skeggs40137ea2008-06-12 12:16:43 +100032 struct nv50_program_exec *exec_head;
33 struct nv50_program_exec *exec_tail;
34 unsigned exec_size;
Christoph Bumiller750c6ca2009-09-15 11:56:58 +020035 struct nouveau_resource *data[1];
36 unsigned data_start[1];
Ben Skeggsf722fd92008-06-01 22:41:40 +100037
Ben Skeggs072fdc12009-06-04 16:13:56 +100038 struct nouveau_bo *bo;
Ben Skeggsf722fd92008-06-01 22:41:40 +100039
Christoph Bumiller1778dda2009-12-14 11:10:16 +010040 uint32_t *immd;
Ben Skeggsf722fd92008-06-01 22:41:40 +100041 unsigned immd_nr;
Ben Skeggsaea16692008-06-12 12:39:35 +100042 unsigned param_nr;
Ben Skeggsf722fd92008-06-01 22:41:40 +100043
Ben Skeggs8ec64152008-06-03 12:37:29 +100044 struct {
45 unsigned high_temp;
Ben Skeggsfea0b162008-06-16 12:55:53 +100046 unsigned high_result;
Christoph Bumiller65165942009-09-14 20:23:39 +020047
48 uint32_t attr[2];
49 uint32_t regs[4];
50
51 /* for VPs, io_nr doesn't count 'private' results (PSIZ etc.) */
52 unsigned io_nr;
53 struct nv50_sreg4 io[PIPE_MAX_SHADER_OUTPUTS];
54
55 /* FP colour inputs, VP/GP back colour outputs */
56 struct nv50_sreg4 two_side[2];
57
58 /* VP only */
59 uint8_t clpd, clpd_nr;
Christoph Bumiller06dac412009-09-15 11:49:41 +020060 uint8_t psiz;
Christoph Bumillerd29f5552009-12-24 12:39:42 +010061 uint8_t edgeflag_in;
Ben Skeggsf722fd92008-06-01 22:41:40 +100062 } cfg;
63};
Ben Skeggs47b418b2007-12-05 14:01:01 +110064
65#endif