瀏覽代碼

Fix D3DCOLORtoUBYTE4 intrinsic expansion (#1570)

Tex Riddell 7 年之前
父節點
當前提交
aba2d60dd0

+ 2 - 3
lib/HLSL/HLOperationLower.cpp

@@ -605,9 +605,8 @@ Value *TranslateD3DColorToUByte4(CallInst *CI, IntrinsicOp IOP,
         ConstantVector::getSplat(Ty->getVectorNumElements(), toByteConst);
   }
   Value *byte4 = Builder.CreateFMul(toByteConst, val);
-  byte4 =
-      TrivialDxilUnaryOperation(OP::OpCode::Round_z, byte4, hlslOP, Builder);
-  return Builder.CreateBitCast(byte4, CI->getType());
+  byte4 = TrivialDxilUnaryOperation(OP::OpCode::Round_ne, byte4, hlslOP, Builder);
+  return Builder.CreateCast(Instruction::CastOps::FPToSI, byte4, CI->getType());
 }
 
 // Returns true if pow can be implemented using Fxc's mul-only code gen pattern.

+ 2 - 1
tools/clang/test/CodeGenHLSL/intrinsic5.hlsl

@@ -1,6 +1,7 @@
 // RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
 
-// CHECK: Round_z
+// CHECK: Round_ne
+// CHECK: fptosi
 // CHECK: IsInf
 // CHECK: IsNaN
 // CHECK: IsFinite

+ 2 - 1
tools/clang/test/CodeGenHLSL/intrinsic5_minprec.hlsl

@@ -1,6 +1,7 @@
 // RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
 
-// CHECK: Round_z
+// CHECK: Round_ne
+// CHECK: fptosi
 // CHECK: IsInf
 // CHECK: IsNaN
 // CHECK: IsFinite