================
@@ -524,6 +545,226 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned 
BuiltinID,
     return Builder.CreateIntrinsic(
         RetTy, CGM.getHLSLRuntime().getSampleClampIntrinsic(), Args);
   }
+  case Builtin::BI__builtin_hlsl_resource_sample_bias: {
+    Value *HandleOp = EmitScalarExpr(E->getArg(0));
+    Value *SamplerOp = EmitScalarExpr(E->getArg(1));
+    Value *CoordOp = EmitScalarExpr(E->getArg(2));
+    Value *BiasOp = EmitScalarExpr(E->getArg(3));
+    if (BiasOp->getType() != Builder.getFloatTy())
+      BiasOp = Builder.CreateFPCast(BiasOp, Builder.getFloatTy());
+
+    SmallVector<Value *, 6> Args; // Max 6 arguments for SampleBias
+    Args.push_back(HandleOp);
+    Args.push_back(SamplerOp);
+    Args.push_back(CoordOp);
+    Args.push_back(BiasOp); // Bias is always the 4th argument (index 3)
+
+    // Handle optional Offset (E->getArg(4))
+    Value *OffsetOp;
+    if (E->getNumArgs() > 4) { // if E has at least 5 arguments (Handle,
+                               // Sampler, Coord, Bias, Offset)
+      OffsetOp = EmitScalarExpr(E->getArg(4));
+    } else {
+      // Default offset is 0.
+      llvm::Type *CoordTy = CoordOp->getType();
+      llvm::Type *Int32Ty = Builder.getInt32Ty();
+      llvm::Type *OffsetTy = Int32Ty;
+      if (auto *VT = dyn_cast<llvm::FixedVectorType>(CoordTy))
+        OffsetTy = llvm::FixedVectorType::get(Int32Ty, VT->getNumElements());
+      OffsetOp = llvm::Constant::getNullValue(OffsetTy);
----------------
s-perron wrote:

I had looked it, and originally decided it was not enough to extract into a 
function. However, when I do the code become clearer. I did the same with the 
"clamp" operand.

https://github.com/llvm/llvm-project/pull/179322
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to