mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 11:20:11 +01:00
r600g/gs: fix cases where number of gs inputs != number of gs outputs
this fixes a bunch of the geom shader built-in tests Signed-off-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
defebc0293
commit
20adc7449c
1 changed files with 6 additions and 1 deletions
|
|
@ -285,6 +285,7 @@ struct r600_shader_ctx {
|
|||
int fragcoord_input;
|
||||
int native_integers;
|
||||
int next_ring_offset;
|
||||
int gs_out_ring_offset;
|
||||
int gs_next_vertex;
|
||||
struct r600_shader *gs_for_vs;
|
||||
};
|
||||
|
|
@ -619,6 +620,9 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx)
|
|||
ctx->cv_output = i;
|
||||
break;
|
||||
}
|
||||
if (ctx->type == TGSI_PROCESSOR_GEOMETRY) {
|
||||
ctx->gs_out_ring_offset += 16;
|
||||
}
|
||||
} else if (ctx->type == TGSI_PROCESSOR_FRAGMENT) {
|
||||
switch (d->Semantic.Name) {
|
||||
case TGSI_SEMANTIC_COLOR:
|
||||
|
|
@ -1313,7 +1317,7 @@ static int emit_gs_ring_writes(struct r600_shader_ctx *ctx)
|
|||
|
||||
/* next_ring_offset after parsing input decls contains total size of
|
||||
* single vertex data, gs_next_vertex - current vertex index */
|
||||
ring_offset += ctx->next_ring_offset * ctx->gs_next_vertex;
|
||||
ring_offset += ctx->gs_out_ring_offset * ctx->gs_next_vertex;
|
||||
|
||||
memset(&output, 0, sizeof(struct r600_bytecode_output));
|
||||
output.gpr = ctx->shader->output[i].gpr;
|
||||
|
|
@ -1379,6 +1383,7 @@ static int r600_shader_from_tgsi(struct r600_context *rctx,
|
|||
}
|
||||
|
||||
ctx.next_ring_offset = 0;
|
||||
ctx.gs_out_ring_offset = 0;
|
||||
ctx.gs_next_vertex = 0;
|
||||
|
||||
ctx.face_gpr = -1;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue