summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-01-14 17:04:50 +0000
committerDave Airlie <airlied@redhat.com>2012-01-15 08:17:38 +0000
commit39491d1d31d9f03437816fbb4f2872761ae1157c (patch)
tree3b7e355165394ecc54881dc3dd3da93307845552 /src
parent9a401a2fd6c2d9aa07402e33493be3f014c0fe10 (diff)
r600g: vertex id support.
This requires GLSL 1.30 enabled, which requires integer types enabled, so don't bother doing an INT to FLT conversion on it. We should probably remove the instance id flt->int conversion when turning on native integers. this passes the three piglit tests with GLSL 1.30 forced on. Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/r600/r600_shader.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 071622d28b..bc3652b477 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -453,8 +453,8 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx)
if ((r = r600_bytecode_add_alu(ctx->bc, &alu)))
return r;
break;
- }
-
+ } else if (d->Semantic.Name == TGSI_SEMANTIC_VERTEXID)
+ break;
default:
R600_ERR("unsupported file %d declaration\n", d->Declaration.File);
return -EINVAL;
@@ -541,12 +541,19 @@ static void tgsi_src(struct r600_shader_ctx *ctx,
r600_src->sel = V_SQ_ALU_SRC_LITERAL;
memcpy(r600_src->value, ctx->literals + index * 4, sizeof(r600_src->value));
} else if (tgsi_src->Register.File == TGSI_FILE_SYSTEM_VALUE) {
- /* assume we wan't TGSI_SEMANTIC_INSTANCEID here */
- r600_src->swizzle[0] = 3;
- r600_src->swizzle[1] = 3;
- r600_src->swizzle[2] = 3;
- r600_src->swizzle[3] = 3;
- r600_src->sel = 0;
+ if (ctx->info.system_value_semantic_name[tgsi_src->Register.Index] == TGSI_SEMANTIC_INSTANCEID) {
+ r600_src->swizzle[0] = 3;
+ r600_src->swizzle[1] = 3;
+ r600_src->swizzle[2] = 3;
+ r600_src->swizzle[3] = 3;
+ r600_src->sel = 0;
+ } else if (ctx->info.system_value_semantic_name[tgsi_src->Register.Index] == TGSI_SEMANTIC_VERTEXID) {
+ r600_src->swizzle[0] = 0;
+ r600_src->swizzle[1] = 0;
+ r600_src->swizzle[2] = 0;
+ r600_src->swizzle[3] = 0;
+ r600_src->sel = 0;
+ }
} else {
if (tgsi_src->Register.Indirect)
r600_src->rel = V_SQ_REL_RELATIVE;