vc4: Fix handling of sample_mask output.
I apparently broke this in a late refactor, in such a way that I decided its tests were some of those interminable ones that I should just blacklist from my testing. As a result, the refactors related to it were totally wrong.
This commit is contained in:
parent
53609de762
commit
53b2523c6e
|
@ -589,10 +589,10 @@ vc4_nir_next_output_driver_location(nir_shader *s)
|
|||
{
|
||||
int maxloc = -1;
|
||||
|
||||
nir_foreach_variable(var, &s->inputs)
|
||||
maxloc = MAX2(maxloc, var->data.driver_location);
|
||||
nir_foreach_variable(var, &s->outputs)
|
||||
maxloc = MAX2(maxloc, (int)var->data.driver_location);
|
||||
|
||||
return maxloc;
|
||||
return maxloc + 1;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -605,12 +605,11 @@ vc4_nir_store_sample_mask(struct vc4_compile *c, nir_builder *b,
|
|||
sample_mask->data.driver_location =
|
||||
vc4_nir_next_output_driver_location(c->s);
|
||||
sample_mask->data.location = FRAG_RESULT_SAMPLE_MASK;
|
||||
exec_list_push_tail(&c->s->outputs, &sample_mask->node);
|
||||
|
||||
nir_intrinsic_instr *intr =
|
||||
nir_intrinsic_instr_create(c->s, nir_intrinsic_store_output);
|
||||
intr->num_components = 1;
|
||||
intr->const_index[0] = sample_mask->data.location;
|
||||
intr->const_index[0] = sample_mask->data.driver_location;
|
||||
|
||||
intr->src[0] = nir_src_for_ssa(val);
|
||||
intr->src[1] = nir_src_for_ssa(nir_imm_int(b, 0));
|
||||
|
|
|
@ -326,7 +326,8 @@ vc4_nir_lower_output(struct vc4_compile *c, nir_builder *b,
|
|||
/* Color output is lowered by vc4_nir_lower_blend(). */
|
||||
if (c->stage == QSTAGE_FRAG &&
|
||||
(output_var->data.location == FRAG_RESULT_COLOR ||
|
||||
output_var->data.location == FRAG_RESULT_DATA0)) {
|
||||
output_var->data.location == FRAG_RESULT_DATA0 ||
|
||||
output_var->data.location == FRAG_RESULT_SAMPLE_MASK)) {
|
||||
intr->const_index[0] *= 4;
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue