================
@@ -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