i915g: More ops commute.

This allows using the optimizations more broadly.
This commit is contained in:
Stéphane Marchesin 2012-06-13 10:00:57 -07:00
parent cb4d1d377d
commit 841eee5d44
2 changed files with 22 additions and 6 deletions

View 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

View 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;