Don't have the shader do a 32-bit unorn to float conversion,
the values don't remain accurate then.
Fixes:
GTF-GL45.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_multisampled_to_singlesampled_blit
for 32-bit unorm depth buffers.
Cc: "20.2" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6044>
return;
}
+ /* for 32-bit unorm depth, avoid the conversions to float and back,
+ which can introduce accuracy errors. */
+ if (blit_info->src.format == PIPE_FORMAT_Z32_UNORM &&
+ blit_info->dst.format == PIPE_FORMAT_Z32_UNORM && info.filter == PIPE_TEX_FILTER_NEAREST) {
+ info.src.format = PIPE_FORMAT_R32_UINT;
+ info.dst.format = PIPE_FORMAT_R32_UINT;
+ info.mask = PIPE_MASK_R;
+ }
+
/* XXX turn off occlusion and streamout queries */
util_blitter_save_vertex_buffer_slot(lp->blitter, lp->vertex_buffer);