summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/i915
diff options
context:
space:
mode:
authorStéphane Marchesin <[email protected]>2012-06-13 10:00:57 -0700
committerStéphane Marchesin <[email protected]>2012-06-15 20:22:26 -0700
commit841eee5d44b222a5819804726187683033eb71db (patch)
tree534851e45e5b633caab3ef275c09f71aa901f8dc /src/gallium/drivers/i915
parentcb4d1d377d7a1143db48feb48ef54dfa3b29487d (diff)
i915g: More ops commute.
This allows using the optimizations more broadly.
Diffstat (limited to 'src/gallium/drivers/i915')
-rw-r--r--src/gallium/drivers/i915/TODO3
-rw-r--r--src/gallium/drivers/i915/i915_fpc_optimize.c25
2 files changed, 22 insertions, 6 deletions
diff --git a/src/gallium/drivers/i915/TODO b/src/gallium/drivers/i915/TODO
index d52c1c0943b..c72f09a7cd7 100644
--- a/src/gallium/drivers/i915/TODO
+++ b/src/gallium/drivers/i915/TODO
@@ -42,5 +42,8 @@ Random list of problems with i915g:
- Continue a previous primitive when there are no state changes
+- Switch to the blitter for those buggy blit copies
+- Or state save/restore has a bug with u_blitter, fix it.
+
Other bugs can be found here:
https://bugs.freedesktop.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&component=Drivers/Gallium/i915g
diff --git a/src/gallium/drivers/i915/i915_fpc_optimize.c b/src/gallium/drivers/i915/i915_fpc_optimize.c
index b09f18b01ee..ce1c5f98301 100644
--- a/src/gallium/drivers/i915/i915_fpc_optimize.c
+++ b/src/gallium/drivers/i915/i915_fpc_optimize.c
@@ -87,17 +87,30 @@ static boolean is_unswizzled(struct i915_full_src_register* r,
static boolean op_commutes(unsigned opcode)
{
- if (opcode == TGSI_OPCODE_ADD) return TRUE;
- if (opcode == TGSI_OPCODE_MUL) return TRUE;
+ switch(opcode)
+ {
+ case TGSI_OPCODE_ADD:
+ case TGSI_OPCODE_MUL:
+ case TGSI_OPCODE_DP2:
+ case TGSI_OPCODE_DP3:
+ case TGSI_OPCODE_DP4:
+ return TRUE;
+ }
return FALSE;
}
static unsigned op_neutral_element(unsigned opcode)
{
- if (opcode == TGSI_OPCODE_ADD)
- return TGSI_SWIZZLE_ZERO;
- if (opcode == TGSI_OPCODE_MUL)
- return TGSI_SWIZZLE_ONE;
+ switch(opcode)
+ {
+ case TGSI_OPCODE_ADD:
+ return TGSI_SWIZZLE_ZERO;
+ case TGSI_OPCODE_MUL:
+ case TGSI_OPCODE_DP2:
+ case TGSI_OPCODE_DP3:
+ case TGSI_OPCODE_DP4:
+ return TGSI_SWIZZLE_ONE;
+ }
debug_printf("Unknown opcode %d\n",opcode);
return TGSI_SWIZZLE_ZERO;