On 03/28/2013 01:01 PM, � wrote:
Am 27.03.2013 20:37, schrieb Vadim Girlin:
Signed-off-by: Vadim Girlin <vadimgir...@gmail.com>
---
src/gallium/drivers/r600/r600_shader.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/src/gallium/drivers/r600/r600_shader.c
b/src/gallium/drivers/r600/r600_shader.c
index 29facf7..d4c9c03 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -874,12 +874,12 @@ static int select_twoside_color(struct
r600_shader_ctx *ctx, int front, int back
static int tgsi_declaration(struct r600_shader_ctx *ctx)
{
struct tgsi_full_declaration *d =
&ctx->parse.FullToken.FullDeclaration;
- unsigned i;
- int r;
+ int r, i, j, count = d->Range.Last - d->Range.First + 1;
switch (d->Declaration.File) {
case TGSI_FILE_INPUT:
- i = ctx->shader->ninput++;
+ i = ctx->shader->ninput;
+ ctx->shader->ninput += count;
ctx->shader->input[i].name = d->Semantic.Name;
ctx->shader->input[i].sid = d->Semantic.Index;
ctx->shader->input[i].interpolate = d->Interp.Interpolate;
@@ -903,9 +903,15 @@ static int tgsi_declaration(struct
r600_shader_ctx *ctx)
return r;
}
}
+ for (j = 1; j < count; ++j) {
+ memcpy(&ctx->shader->input[i + j], &ctx->shader->input[i],
+ sizeof(struct r600_shader_io));
Instead of memcpy, shouldn't an assignment do the trick here as well?
Yes, assignment should work fine, I just used to use memcpy in such
cases for some reason. I'll replace memcpy with assignment.
Also I think second part (outputs handling) can be dropped for now -
currently we only need to handle the inputs (for HUD shaders), and later
when array declarations for inputs/outputs will be implemented in TGSI
probably we'll need to update the parser in r600g anyway - I'm just not
sure yet how the semantic indices should be handled for input/output arrays.
Vadim
+ ctx->shader->input[i + j].gpr += j;
+ }
break;
case TGSI_FILE_OUTPUT:
- i = ctx->shader->noutput++;
+ i = ctx->shader->noutput;
+ ctx->shader->noutput += count;
ctx->shader->output[i].name = d->Semantic.Name;
ctx->shader->output[i].sid = d->Semantic.Index;
ctx->shader->output[i].gpr =
ctx->file_offset[TGSI_FILE_OUTPUT] + d->Range.First;
@@ -933,6 +939,11 @@ static int tgsi_declaration(struct
r600_shader_ctx *ctx)
break;
}
}
+ for (j = 1; j < count; ++j) {
+ memcpy(&ctx->shader->output[i + j], &ctx->shader->output[i],
+ sizeof(struct r600_shader_io));
Same here.
+ ctx->shader->output[i + j].gpr += j;
+ }
break;
case TGSI_FILE_CONSTANT:
case TGSI_FILE_TEMPORARY:
Christian.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev