Browse Source

Skip half when Eval builtins.

Xiang Li 7 years ago
parent
commit
2bc91c6f07

+ 4 - 0
tools/clang/lib/CodeGen/CGHLSLMS.cpp

@@ -4177,6 +4177,10 @@ RValue CGMSHLSLRuntime::EmitHLSLBuiltinCallExpr(CodeGenFunction &CGF,
           if (!isImm) {
           if (!isImm) {
             allOperandImm = false;
             allOperandImm = false;
             break;
             break;
+          } else if (operand->getType()->isHalfTy()) {
+            // Not support half Eval yet.
+            allOperandImm = false;
+            break;
           }
           }
         }
         }
         if (allOperandImm) {
         if (allOperandImm) {

+ 8 - 0
tools/clang/test/CodeGenHLSL/minprec_imm.hlsl

@@ -0,0 +1,8 @@
+// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
+
+// CHECK: storeOutput
+
+float main() : SV_Target
+{
+    return sqrt(min16float(1.2));
+}

+ 5 - 0
tools/clang/unittests/HLSL/CompilerTest.cpp

@@ -660,6 +660,7 @@ public:
   TEST_METHOD(CodeGenMinprecCoord)
   TEST_METHOD(CodeGenMinprecCoord)
   TEST_METHOD(CodeGenModf)
   TEST_METHOD(CodeGenModf)
   TEST_METHOD(CodeGenMinprecCast)
   TEST_METHOD(CodeGenMinprecCast)
+  TEST_METHOD(CodeGenMinprecImm)
   TEST_METHOD(CodeGenMultiUAVLoad1)
   TEST_METHOD(CodeGenMultiUAVLoad1)
   TEST_METHOD(CodeGenMultiUAVLoad2)
   TEST_METHOD(CodeGenMultiUAVLoad2)
   TEST_METHOD(CodeGenMultiUAVLoad3)
   TEST_METHOD(CodeGenMultiUAVLoad3)
@@ -3730,6 +3731,10 @@ TEST_F(CompilerTest, CodeGenMinprecCast) {
   CodeGenTest(L"..\\CodeGenHLSL\\minprec_cast.hlsl");
   CodeGenTest(L"..\\CodeGenHLSL\\minprec_cast.hlsl");
 }
 }
 
 
+TEST_F(CompilerTest, CodeGenMinprecImm) {
+  CodeGenTest(L"..\\CodeGenHLSL\\minprec_imm.hlsl");
+}
+
 TEST_F(CompilerTest, CodeGenMultiUAVLoad1) {
 TEST_F(CompilerTest, CodeGenMultiUAVLoad1) {
   CodeGenTestCheck(L"..\\CodeGenHLSL\\multiUAVLoad1.hlsl");
   CodeGenTestCheck(L"..\\CodeGenHLSL\\multiUAVLoad1.hlsl");
 }
 }