On 12/26/2012 08:32 AM, Paul Berry wrote:
On 25 December 2012 20:55, Kenneth Graunke <[email protected] <mailto:[email protected]>> wrote: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. --- src/mesa/drivers/dri/intel/intel_blit.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c index 521e6eb..867d7b3 100644 --- a/src/mesa/drivers/dri/intel/intel_blit.c +++ b/src/mesa/drivers/dri/intel/intel_blit.c @@ -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. -- 1.8.0.2 Looks reasonable to me. Reviewed-by: Paul Berry <[email protected] <mailto:[email protected]>> As a follow-up, we should probably check all of the code paths that lead into this function to make sure they invoke the proper fallback logic if there is a return value of false. I think that _mesa_ReadnPixelsARB, for example, will just fail to copy any data.
They don't, which is bothersome...I'm not sure they check the preconditions nor the return value.
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
