nir/spirv/alu: Properly implement mod/rem
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 13 Jan 2016 23:09:45 +0000 (15:09 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 14 Jan 2016 00:53:02 +0000 (16:53 -0800)
src/glsl/nir/spirv/vtn_alu.c

index 4c45e2349988a56dcdfc76be1d78a6134ca4d884..d866da7445e16d4e5709cde8762e362b452e78fc 100644 (file)
@@ -232,8 +232,10 @@ vtn_nir_alu_op_for_spirv_opcode(SpvOp opcode, bool *swap)
    case SpvOpSDiv:               return nir_op_idiv;
    case SpvOpFDiv:               return nir_op_fdiv;
    case SpvOpUMod:               return nir_op_umod;
-   case SpvOpSMod:               return nir_op_umod; /* FIXME? */
+   case SpvOpSMod:               return nir_op_imod;
    case SpvOpFMod:               return nir_op_fmod;
+   case SpvOpSRem:               return nir_op_irem;
+   case SpvOpFRem:               return nir_op_frem;
 
    case SpvOpShiftRightLogical:     return nir_op_ushr;
    case SpvOpShiftRightArithmetic:  return nir_op_ishr;
@@ -298,8 +300,6 @@ vtn_nir_alu_op_for_spirv_opcode(SpvOp opcode, bool *swap)
    case SpvOpDPdxCoarse:   return nir_op_fddx_coarse;
    case SpvOpDPdyCoarse:   return nir_op_fddy_coarse;
 
-   case SpvOpSRem:
-   case SpvOpFRem:
    default:
       unreachable("No NIR equivalent");
    }