i965/fs: Move the failure for gen7 16-wide intdiv to emit_math().
authorEric Anholt <eric@anholt.net>
Wed, 5 Dec 2012 22:56:32 +0000 (14:56 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 14 Dec 2012 23:26:43 +0000 (15:26 -0800)
The cube map array code adds another caller of emit_math(), which
needs this check.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp

index b7cdadf60874ec1bb6f6ad02e2b8b0bbb93d3f06..5d765e088aaca9e29e9ad7e3e33854866b2b7033 100644 (file)
@@ -1139,9 +1139,12 @@ fs_visitor::emit_math(enum opcode opcode, fs_reg dst, fs_reg src0, fs_reg src1)
    fs_inst *inst;
 
    switch (opcode) {
-   case SHADER_OPCODE_POW:
    case SHADER_OPCODE_INT_QUOTIENT:
    case SHADER_OPCODE_INT_REMAINDER:
+      if (intel->gen >= 7 && dispatch_width == 16)
+        fail("16-wide INTDIV unsupported\n");
+      break;
+   case SHADER_OPCODE_POW:
       break;
    default:
       assert(!"not reached: unsupported binary math opcode.");
index 708677f3847295a9e0c787b73f3720fb8eadbcf4..0959e47ad8dfbe878e8d82621c8e15a66b1f2fb3 100644 (file)
@@ -416,17 +416,11 @@ fs_visitor::visit(ir_expression *ir)
       }
       break;
    case ir_binop_div:
-      if (intel->gen >= 7 && dispatch_width == 16)
-        fail("16-wide INTDIV unsupported\n");
-
       /* Floating point should be lowered by DIV_TO_MUL_RCP in the compiler. */
       assert(ir->type->is_integer());
       emit_math(SHADER_OPCODE_INT_QUOTIENT, this->result, op[0], op[1]);
       break;
    case ir_binop_mod:
-      if (intel->gen >= 7 && dispatch_width == 16)
-        fail("16-wide INTDIV unsupported\n");
-
       /* Floating point should be lowered by MOD_TO_FRACT in the compiler. */
       assert(ir->type->is_integer());
       emit_math(SHADER_OPCODE_INT_REMAINDER, this->result, op[0], op[1]);