llvmpipe: enable per-sample shading when FB fetch is used
This matches specifications of both color and ZS fetch extensions. Cc: mesa-stable Signed-off-by: Pavel Asyutchenko <sventeam@yandex.ru> Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13979>
This commit is contained in:
parent
8788b17596
commit
443ef18f0c
|
@ -4257,7 +4257,30 @@ make_variant_key(struct llvmpipe_context *lp,
|
||||||
if (key->multisample) {
|
if (key->multisample) {
|
||||||
key->coverage_samples =
|
key->coverage_samples =
|
||||||
util_framebuffer_get_num_samples(&lp->framebuffer);
|
util_framebuffer_get_num_samples(&lp->framebuffer);
|
||||||
key->min_samples = lp->min_samples == 1 ? 1 : key->coverage_samples;
|
/* Per EXT_shader_framebuffer_fetch spec:
|
||||||
|
*
|
||||||
|
* "1. How is framebuffer data treated during multisample rendering?
|
||||||
|
*
|
||||||
|
* RESOLVED: Reading the value of gl_LastFragData produces a different
|
||||||
|
* result for each sample. This implies that all or part of the shader be
|
||||||
|
* run once for each sample, but has no additional implications on fragment
|
||||||
|
* shader input variables which may still be interpolated per pixel by the
|
||||||
|
* implementation."
|
||||||
|
*
|
||||||
|
* ARM_shader_framebuffer_fetch_depth_stencil spec further says:
|
||||||
|
*
|
||||||
|
* "(1) When multisampling is enabled, does the shader run per sample?
|
||||||
|
*
|
||||||
|
* RESOLVED.
|
||||||
|
*
|
||||||
|
* This behavior is inherited from either EXT_shader_framebuffer_fetch or
|
||||||
|
* ARM_shader_framebuffer_fetch as described in the interactions section.
|
||||||
|
* If neither extension is supported, the shader runs once per fragment."
|
||||||
|
*
|
||||||
|
* Therefore we should always enable per-sample shading when FB fetch is used.
|
||||||
|
*/
|
||||||
|
if (lp->min_samples > 1 || shader->info.base.uses_fbfetch)
|
||||||
|
key->min_samples = key->coverage_samples;
|
||||||
}
|
}
|
||||||
key->nr_cbufs = lp->framebuffer.nr_cbufs;
|
key->nr_cbufs = lp->framebuffer.nr_cbufs;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue