i915g: More ops commute.
authorStéphane Marchesin <marcheu@chromium.org>
Wed, 13 Jun 2012 17:00:57 +0000 (10:00 -0700)
committerStéphane Marchesin <marcheu@chromium.org>
Sat, 16 Jun 2012 03:22:26 +0000 (20:22 -0700)
This allows using the optimizations more broadly.

src/gallium/drivers/i915/TODO
src/gallium/drivers/i915/i915_fpc_optimize.c

index d52c1c0943b9a50482730fed327673443b17a5ff..c72f09a7cd75aa8e8d21ee572a02b79b58fca38f 100644 (file)
@@ -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
index b09f18b01ee174d6ff5baa80265b3adf03489005..ce1c5f9830187197335c558d571068361ecfa3de 100644 (file)
@@ -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;