i965: Add a lowering pass to convert TXD to TXL by computing the LOD.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 9 Jul 2012 18:26:47 +0000 (11:26 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 12 Jul 2012 17:20:23 +0000 (10:20 -0700)
commitb0c8d3be73ea777e1fd5870c344afb1d31921411
tree3f40e9d9bdfa1abc1b3c06b3feab4bd20b1d9010
parentd9da350a8334201400a43d105b92fce2bd6a5f32
i965: Add a lowering pass to convert TXD to TXL by computing the LOD.

Intel hardware doesn't natively support textureGrad with shadow
comparisons.  So we need to generate code to handle it somehow.

Based on the equations of page 205 of the OpenGL 3.0 specification,
it's possible to compute the LOD value that would be selected given the
gradient values.  Then, we can simply convert the TXD to a TXL.

Currently, this passes 34/46 of oglconform's shadow-grad subtests;
four cubemap tests are regressed.  We should investigate this in the
future.

v2: Apply abs() to the scalar case (thanks to Eric).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/Makefile.sources
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_lower_texture_gradients.cpp [new file with mode: 0644]
src/mesa/drivers/dri/i965/brw_shader.cpp