[llvm-branch-commits] [clang] [HLSL] Implement Texture2D::Load methods and builtin (PR #185708)
Helena Kotas via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Mar 10 19:24:02 PDT 2026
================
@@ -3459,6 +3459,56 @@ static bool CheckGatherBuiltin(Sema &S, CallExpr *TheCall, bool IsCmp) {
return false;
}
+static bool CheckLoadLevelBuiltin(Sema &S, CallExpr *TheCall) {
+ if (S.checkArgCountRange(TheCall, 2, 3))
+ return true;
+
+ // Check the texture handle.
+ if (CheckResourceHandle(&S, TheCall, 0,
+ [](const HLSLAttributedResourceType *ResType) {
+ return ResType->getAttrs().ResourceDimension ==
+ llvm::dxil::ResourceDimension::Unknown;
+ }))
+ return true;
+
+ auto *ResourceTy =
+ TheCall->getArg(0)->getType()->castAs<HLSLAttributedResourceType>();
+
+ // Check the location + lod (int3 for Texture2D).
+ unsigned ExpectedDim =
+ getResourceDimensions(ResourceTy->getAttrs().ResourceDimension);
+ QualType CoordLODTy = TheCall->getArg(1)->getType();
+ if (CheckVectorElementCount(&S, CoordLODTy, S.Context.IntTy, ExpectedDim + 1,
+ TheCall->getArg(1)->getBeginLoc()))
+ return true;
+
+ QualType EltTy = CoordLODTy;
+ if (const auto *VTy = EltTy->getAs<VectorType>())
+ EltTy = VTy->getElementType();
+ if (!EltTy->isIntegerType()) {
+ S.Diag(TheCall->getArg(1)->getBeginLoc(), diag::err_typecheck_expect_int)
+ << CoordLODTy;
+ return true;
+ }
+
+ // Check the offset operand.
+ if (TheCall->getNumArgs() > 2) {
+ if (CheckVectorElementCount(&S, TheCall->getArg(2)->getType(),
+ S.Context.IntTy, ExpectedDim,
+ TheCall->getArg(2)->getBeginLoc()))
+ return true;
+ }
+
+ QualType ReturnType = ResourceTy->getContainedType();
+ if (const auto *VecTy = ReturnType->getAs<VectorType>())
+ ReturnType = VecTy->getElementType();
+ ReturnType = S.Context.getExtVectorType(ReturnType, 4);
+
+ TheCall->setType(ReturnType);
----------------
hekota wrote:
```suggestion
TheCall->setType(ResourceTy->getContainedType(););
```
I believe the return type should be the texture's template type.
https://github.com/llvm/llvm-project/pull/185708
More information about the llvm-branch-commits
mailing list