i965: Enable INTDIV in SIMD16 mode.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 17 Jul 2014 21:33:15 +0000 (14:33 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 14 Aug 2014 04:19:07 +0000 (21:19 -0700)
All we need to do is decompose this to two SIMD8 instructions, like we
do in many other cases.  We even already have code for that.

I apparently just botched this last time I tried, and it was easy.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs_generator.cpp

index 8405502f4334520da4fb52851bd1eb4578327e72..35ada42c508f7a2e23d5d01c60e4a8707e842ccf 100644 (file)
@@ -1404,18 +1404,6 @@ fs_visitor::emit_math(enum opcode opcode, fs_reg dst, fs_reg src0, fs_reg src1)
    int base_mrf = 2;
    fs_inst *inst;
 
-   switch (opcode) {
-   case SHADER_OPCODE_INT_QUOTIENT:
-   case SHADER_OPCODE_INT_REMAINDER:
-      if (brw->gen >= 7)
-        no16("SIMD16 INTDIV unsupported\n");
-      break;
-   case SHADER_OPCODE_POW:
-      break;
-   default:
-      unreachable("not reached: unsupported binary math opcode.");
-   }
-
    if (brw->gen >= 8) {
       inst = emit(opcode, dst, src0, src1);
    } else if (brw->gen >= 6) {
index 9e260a7ffe7694e17c35ed513485a6ec3b81a34e..1190f1f7e666c2c698c4338e43014f14ff6e927b 100644 (file)
@@ -1620,9 +1620,9 @@ fs_generator::generate_code(exec_list *instructions)
       case SHADER_OPCODE_INT_REMAINDER:
       case SHADER_OPCODE_POW:
          assert(brw->gen < 6 || inst->mlen == 0);
-        if (brw->gen >= 7) {
+        if (brw->gen >= 7 && inst->opcode == SHADER_OPCODE_POW) {
             gen6_math(p, dst, brw_math_function(inst->opcode), src[0], src[1]);
-        } else if (brw->gen == 6) {
+        } else if (brw->gen >= 6) {
            generate_math_gen6(inst, dst, src[0], src[1]);
         } else {
            generate_math_gen4(inst, dst, src[0]);