tgsi: fix parsing of tessellation shader inputs/outputs
Tessellation control shaders write to outputs as OUT[ADDR[0].x][0], make sure to parse the indirect dimension on outputs. Also tess control inputs/outputs and tess eval input declarations need to receive the same treatment as geometry shader inputs. Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
a37fa7653b
commit
723a5a2e68
|
@ -675,6 +675,9 @@ parse_register_dcl(
|
|||
eat_opt_white( &cur );
|
||||
|
||||
if (cur[0] == '[') {
|
||||
bool is_in = *file == TGSI_FILE_INPUT;
|
||||
bool is_out = *file == TGSI_FILE_OUTPUT;
|
||||
|
||||
++cur;
|
||||
ctx->cur = cur;
|
||||
if (!parse_register_dcl_bracket( ctx, &brackets[1] ))
|
||||
|
@ -684,7 +687,11 @@ parse_register_dcl(
|
|||
* input primitive. so we want to declare just
|
||||
* the index relevant to the semantics which is in
|
||||
* the second bracket */
|
||||
if (ctx->processor == TGSI_PROCESSOR_GEOMETRY && *file == TGSI_FILE_INPUT) {
|
||||
|
||||
/* tessellation has similar constraints to geometry shader */
|
||||
if ((ctx->processor == TGSI_PROCESSOR_GEOMETRY && is_in) ||
|
||||
(ctx->processor == TGSI_PROCESSOR_TESS_EVAL && is_in) ||
|
||||
(ctx->processor == TGSI_PROCESSOR_TESS_CTRL && (is_in || is_out))) {
|
||||
brackets[0] = brackets[1];
|
||||
*num_brackets = 1;
|
||||
} else {
|
||||
|
@ -740,6 +747,14 @@ parse_dst_operand(
|
|||
dst->Dimension.Indirect = 0;
|
||||
dst->Dimension.Dimension = 0;
|
||||
dst->Dimension.Index = bracket[0].index;
|
||||
|
||||
if (bracket[0].ind_file != TGSI_FILE_NULL) {
|
||||
dst->Dimension.Indirect = 1;
|
||||
dst->DimIndirect.File = bracket[0].ind_file;
|
||||
dst->DimIndirect.Index = bracket[0].ind_index;
|
||||
dst->DimIndirect.Swizzle = bracket[0].ind_comp;
|
||||
dst->DimIndirect.ArrayID = bracket[0].ind_array;
|
||||
}
|
||||
bracket[0] = bracket[1];
|
||||
}
|
||||
dst->Register.Index = bracket[0].index;
|
||||
|
|
Loading…
Reference in New Issue