Only skip zero repeat expressions in a concatenation.
This commit is contained in:
parent
84c592b068
commit
01ba41afd8
|
|
@ -808,22 +808,26 @@ static void draw_concat_vec4(ivl_expr_t expr)
|
||||||
concatenation. */
|
concatenation. */
|
||||||
unsigned num_sube = ivl_expr_parms(expr);
|
unsigned num_sube = ivl_expr_parms(expr);
|
||||||
unsigned sub_idx = 0;
|
unsigned sub_idx = 0;
|
||||||
|
ivl_expr_t sube;
|
||||||
|
|
||||||
assert(num_sube > 0);
|
assert(num_sube > 0);
|
||||||
|
|
||||||
/* Start with the most-significant bits. */
|
/* Start with the most-significant bits. */
|
||||||
draw_eval_vec4(ivl_expr_parm(expr, sub_idx));
|
sube = ivl_expr_parm(expr, sub_idx);
|
||||||
/* Evaluate, but skip any zero width elements at the head of the
|
draw_eval_vec4(sube);
|
||||||
* concatenation since they are (zero replications). */
|
/* Evaluate, but skip any zero replication expressions at the
|
||||||
while (ivl_expr_width(ivl_expr_parm(expr, sub_idx)) == 0) {
|
* head of this concatenation. */
|
||||||
|
while ((ivl_expr_type(sube) == IVL_EX_CONCAT) &&
|
||||||
|
(ivl_expr_repeat(sube) == 0)) {
|
||||||
fprintf(vvp_out, " %%pop/vec4 1; skip zero replication\n");
|
fprintf(vvp_out, " %%pop/vec4 1; skip zero replication\n");
|
||||||
sub_idx += 1;
|
sub_idx += 1;
|
||||||
draw_eval_vec4(ivl_expr_parm(expr, sub_idx));
|
sube = ivl_expr_parm(expr, sub_idx);
|
||||||
|
draw_eval_vec4(sube);
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( sub_idx += 1 ; sub_idx < num_sube ; sub_idx += 1) {
|
for ( sub_idx += 1 ; sub_idx < num_sube ; sub_idx += 1) {
|
||||||
/* Concatenate progressively lower parts. */
|
/* Concatenate progressively lower parts. */
|
||||||
ivl_expr_t sube = ivl_expr_parm(expr, sub_idx);
|
sube = ivl_expr_parm(expr, sub_idx);
|
||||||
|
|
||||||
/* Special case: The next expression is a NUMBER that
|
/* Special case: The next expression is a NUMBER that
|
||||||
can be concatenated using %concati/vec4
|
can be concatenated using %concati/vec4
|
||||||
|
|
@ -834,9 +838,10 @@ static void draw_concat_vec4(ivl_expr_t expr)
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_eval_vec4(sube);
|
draw_eval_vec4(sube);
|
||||||
/* Evaluate, but skip any zero width elements in the rest of the
|
/* Evaluate, but skip any zero replication expressions in the
|
||||||
* concatenation since they are also (zero replications). */
|
* rest of this concatenation. */
|
||||||
if (ivl_expr_width(sube) == 0) {
|
if ((ivl_expr_type(sube) == IVL_EX_CONCAT) &&
|
||||||
|
(ivl_expr_repeat(sube) == 0)) {
|
||||||
fprintf(vvp_out, " %%pop/vec4 1; skip zero replication\n");
|
fprintf(vvp_out, " %%pop/vec4 1; skip zero replication\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue