summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristoph Bumiller <[email protected]>2011-01-02 13:25:06 +0100
committerChristoph Bumiller <[email protected]>2011-01-04 16:14:26 +0100
commit92caa65c24d1af99e02715dae1f1081278bf9e64 (patch)
treee817b8d66e6efc04b3e172879f20b412fb8199f6 /src
parent997f84ff4efb62779a19f6bd0441cbae1b7bad70 (diff)
nvc0: demagic GP invocation count bitfield
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/nvc0/nvc0_program.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/gallium/drivers/nvc0/nvc0_program.c b/src/gallium/drivers/nvc0/nvc0_program.c
index e159b7161d4..b5e02f1ba10 100644
--- a/src/gallium/drivers/nvc0/nvc0_program.c
+++ b/src/gallium/drivers/nvc0/nvc0_program.c
@@ -134,6 +134,7 @@ nvc0_indirect_outputs(struct nvc0_translation_info *ti, int id)
static INLINE unsigned
nvc0_system_value_location(unsigned sn, unsigned si)
{
+ /* NOTE: locations 0xfxx indicate special regs */
switch (sn) {
/*
case TGSI_SEMANTIC_VERTEXID:
@@ -151,6 +152,10 @@ nvc0_system_value_location(unsigned sn, unsigned si)
return 0x2f8;
case TGSI_SEMANTIC_FACE:
return 0x3fc;
+ /*
+ case TGSI_SEMANTIC_INVOCATIONID:
+ return 0xf11;
+ */
default:
assert(0);
return 0x000;
@@ -426,11 +431,11 @@ nvc0_vp_gen_header(struct nvc0_program *vp, struct nvc0_translation_info *ti)
static int
nvc0_gp_gen_header(struct nvc0_program *gp, struct nvc0_translation_info *ti)
{
+ unsigned invocations = 1;
unsigned max_output_verts, output_prim;
unsigned i;
- gp->hdr[0] = 0x00021061;
- gp->hdr[2] = 0x01000000;
+ gp->hdr[0] = 0x21061;
for (i = 0; i < ti->scan.num_properties; ++i) {
switch (ti->scan.properties[i].name) {
@@ -439,12 +444,21 @@ nvc0_gp_gen_header(struct nvc0_program *gp, struct nvc0_translation_info *ti)
break;
case TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES:
max_output_verts = ti->scan.properties[i].data[0];
+ assert(max_output_verts < 512);
break;
+ /*
+ case TGSI_PROPERTY_GS_INVOCATIONS:
+ invocations = ti->scan.properties[i].data[0];
+ assert(invocations <= 32);
+ break;
+ */
default:
break;
}
}
+ gp->hdr[2] = MIN2(invocations, 32) << 24;
+
switch (output_prim) {
case PIPE_PRIM_POINTS:
gp->hdr[3] = 0x01000000;