mesa/st: fix color outputs in presence of sample mask output
Commit c5d822dad9
added support for sample mask incorrectly. It became
treated as a color output, and messed up the color output indices.
Revert the hunk that did that, and add explicit support just like for
depth/stencil writes.
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Acked-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -679,32 +679,36 @@ st_translate_fragment_program(struct st_context *st,
|
|||||||
outputsWritten &= ~(1 << FRAG_RESULT_STENCIL);
|
outputsWritten &= ~(1 << FRAG_RESULT_STENCIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (outputsWritten & BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK)) {
|
||||||
|
fs_output_semantic_name[fs_num_outputs] = TGSI_SEMANTIC_SAMPLEMASK;
|
||||||
|
fs_output_semantic_index[fs_num_outputs] = 0;
|
||||||
|
outputMapping[FRAG_RESULT_SAMPLE_MASK] = fs_num_outputs;
|
||||||
|
fs_num_outputs++;
|
||||||
|
outputsWritten &= ~(1 << FRAG_RESULT_SAMPLE_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
/* handle remaining outputs (color) */
|
/* handle remaining outputs (color) */
|
||||||
for (attr = 0; attr < FRAG_RESULT_MAX; attr++) {
|
for (attr = 0; attr < FRAG_RESULT_MAX; attr++) {
|
||||||
if (outputsWritten & BITFIELD64_BIT(attr)) {
|
if (outputsWritten & BITFIELD64_BIT(attr)) {
|
||||||
int semantic = TGSI_SEMANTIC_COLOR;
|
|
||||||
switch (attr) {
|
switch (attr) {
|
||||||
case FRAG_RESULT_DEPTH:
|
case FRAG_RESULT_DEPTH:
|
||||||
case FRAG_RESULT_STENCIL:
|
case FRAG_RESULT_STENCIL:
|
||||||
|
case FRAG_RESULT_SAMPLE_MASK:
|
||||||
/* handled above */
|
/* handled above */
|
||||||
assert(0);
|
assert(0);
|
||||||
break;
|
break;
|
||||||
case FRAG_RESULT_COLOR:
|
case FRAG_RESULT_COLOR:
|
||||||
write_all = GL_TRUE;
|
write_all = GL_TRUE; /* fallthrough */
|
||||||
break;
|
default:
|
||||||
case FRAG_RESULT_SAMPLE_MASK:
|
assert(attr == FRAG_RESULT_COLOR ||
|
||||||
semantic = TGSI_SEMANTIC_SAMPLEMASK;
|
(FRAG_RESULT_DATA0 <= attr && attr < FRAG_RESULT_MAX));
|
||||||
|
fs_output_semantic_name[fs_num_outputs] = TGSI_SEMANTIC_COLOR;
|
||||||
|
fs_output_semantic_index[fs_num_outputs] = numColors;
|
||||||
|
outputMapping[attr] = fs_num_outputs;
|
||||||
|
numColors++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(attr == FRAG_RESULT_COLOR ||
|
|
||||||
attr == FRAG_RESULT_SAMPLE_MASK ||
|
|
||||||
(FRAG_RESULT_DATA0 <= attr && attr < FRAG_RESULT_MAX));
|
|
||||||
fs_output_semantic_name[fs_num_outputs] = semantic;
|
|
||||||
fs_output_semantic_index[fs_num_outputs] = numColors;
|
|
||||||
outputMapping[attr] = fs_num_outputs;
|
|
||||||
numColors++;
|
|
||||||
|
|
||||||
fs_num_outputs++;
|
fs_num_outputs++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user