i965: Fail to blit rather than assert on invalid pitch requirements.

Dungeon Defenders hits TexImage()'s try_pbo_upload() path where
image->Width == 2, which doesn't meet intelEmitCopyBlit's requirement
that the pitch needs to be a multiple of 4.

Since intelEmitCopyBlit can already fail for a myriad of other reasons,
and it's not clear that other callers are immune to this failure mode,
simply make it return false rather than assert.

Fixes Dungeon Defenders on i965/Ivybridge.  Now playable (aside from
having to work around the EXT_bindable_uniform issue).

NOTE: This is probably a candidate for the 9.0 branch.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Kenneth Graunke 2012-12-25 20:55:38 -08:00
parent 2f225f6145
commit 66ea6e8ec3

View file

@ -150,8 +150,8 @@ intelEmitCopyBlit(struct intel_context *intel,
/* Blit pitch must be dword-aligned. Otherwise, the hardware appears to drop
* the low bits.
*/
assert(src_pitch % 4 == 0);
assert(dst_pitch % 4 == 0);
if (src_pitch % 4 != 0 || dst_pitch % 4 != 0)
return false;
/* For big formats (such as floating point), do the copy using 32bpp and
* multiply the coordinates.