Mesa (master): i965/vs: Add support for textureGather(.., comp)
Chris Forbes
chrisf at kemper.freedesktop.org
Sun Oct 6 00:04:33 UTC 2013
Module: Mesa
Branch: master
Commit: e8ec2e03442cc21e84ff3a1ed7610e6b6d4468e5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e8ec2e03442cc21e84ff3a1ed7610e6b6d4468e5
Author: Chris Forbes <chrisf at ijw.co.nz>
Date: Sat Oct 5 23:10:04 2013 +1300
i965/vs: Add support for textureGather(.., comp)
- For HSW: Select the channel based on the component selected (swizzle
is done in HW)
- For IVB: Select the channel based on the swizzle state for the
component selected. Only apply the RG32F w/a if we actually want
green -- we're about to flag it regardless of swizzle state.
Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 18 +++++++++++-------
1 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index 224524e..09f0236 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -2150,7 +2150,8 @@ vec4_visitor::visit(ir_texture *ir)
* emitting anything other than setting up the constant result.
*/
if (ir->op == ir_tg4) {
- int swiz = GET_SWZ(key->tex.swizzles[sampler], 0);
+ ir_constant *chan = ir->lod_info.component->as_constant();
+ int swiz = GET_SWZ(key->tex.swizzles[sampler], chan->value.i[0]);
if (swiz == SWIZZLE_ZERO || swiz == SWIZZLE_ONE) {
dst_reg result(this, ir->type);
this->result = src_reg(result);
@@ -2398,14 +2399,17 @@ vec4_visitor::visit(ir_texture *ir)
uint32_t
vec4_visitor::gather_channel(ir_texture *ir, int sampler)
{
- int swiz = GET_SWZ(key->tex.swizzles[sampler], 0 /* red */);
- if (key->tex.gather_channel_quirk_mask & (1<<sampler))
- return 2; /* gather4 sampler is broken for green channel on RG32F --
- * we must ask for blue instead.
- */
+ ir_constant *chan = ir->lod_info.component->as_constant();
+ int swiz = GET_SWZ(key->tex.swizzles[sampler], chan->value.i[0]);
switch (swiz) {
case SWIZZLE_X: return 0;
- case SWIZZLE_Y: return 1;
+ case SWIZZLE_Y:
+ /* gather4 sampler is broken for green channel on RG32F --
+ * we must ask for blue instead.
+ */
+ if (key->tex.gather_channel_quirk_mask & (1<<sampler))
+ return 2;
+ return 1;
case SWIZZLE_Z: return 2;
case SWIZZLE_W: return 3;
default:
More information about the mesa-commit
mailing list