mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-01 09:00:30 +01:00
nv30: hack to avoid errors on unexpected color/zeta combinations
This is just a hack, it should be possible to create a temporary zeta surface and render to that instead. However that's more complicated and this avoids the render being entirely broken and errors being reported by the card. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Cc: "10.2" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
e1fe1435b1
commit
25182e249e
1 changed files with 17 additions and 0 deletions
|
|
@ -23,6 +23,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "util/u_format.h"
|
||||
#include "util/u_helpers.h"
|
||||
#include "util/u_inlines.h"
|
||||
|
||||
|
|
@ -360,6 +361,22 @@ nv30_set_framebuffer_state(struct pipe_context *pipe,
|
|||
|
||||
nv30->framebuffer = *fb;
|
||||
nv30->dirty |= NV30_NEW_FRAMEBUFFER;
|
||||
|
||||
/* Hardware can't handle different swizzled-ness or different blocksizes
|
||||
* for zs and cbufs. If both are supplied and something doesn't match,
|
||||
* blank out the zs for now so that at least *some* rendering can occur.
|
||||
*/
|
||||
if (fb->nr_cbufs > 0 && fb->zsbuf) {
|
||||
struct nv30_miptree *color_mt = nv30_miptree(fb->cbufs[0]->texture);
|
||||
struct nv30_miptree *zeta_mt = nv30_miptree(fb->zsbuf->texture);
|
||||
|
||||
if (color_mt->swizzled != zeta_mt->swizzled ||
|
||||
(util_format_get_blocksize(fb->zsbuf->format) > 2) !=
|
||||
(util_format_get_blocksize(fb->cbufs[0]->format) > 2)) {
|
||||
nv30->framebuffer.zsbuf = NULL;
|
||||
debug_printf("Mismatched color and zeta formats, ignoring zeta.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue