@@ -199,6 +199,7 @@ enum ArBasicKind {
199199 AR_OBJECT_VK_SPV_INTRINSIC_TYPE,
200200 AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID,
201201 AR_OBJECT_VK_BUFFER_POINTER,
202+ AR_OBJECT_VK_SAMPLED_TEXTURE2D,
202203#endif // ENABLE_SPIRV_CODEGEN
203204 // SPIRV change ends
204205
@@ -559,6 +560,7 @@ const UINT g_uBasicKindProps[] = {
559560 BPROP_OBJECT, // AR_OBJECT_VK_SPV_INTRINSIC_TYPE use recordType
560561 BPROP_OBJECT, // AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID use recordType
561562 BPROP_OBJECT, // AR_OBJECT_VK_BUFFER_POINTER use recordType
563+ BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_VK_SAMPLED_TEXTURE2D
562564#endif // ENABLE_SPIRV_CODEGEN
563565 // SPIRV change ends
564566
@@ -1267,6 +1269,8 @@ static const ArBasicKind g_LinAlgMatrixCT[] = {AR_OBJECT_LINALG_MATRIX,
12671269#ifdef ENABLE_SPIRV_CODEGEN
12681270static const ArBasicKind g_VKBufferPointerCT[] = {AR_OBJECT_VK_BUFFER_POINTER,
12691271 AR_BASIC_UNKNOWN};
1272+ static const ArBasicKind g_VKSampledTexture2DCT[] = {
1273+ AR_OBJECT_VK_SAMPLED_TEXTURE2D, AR_BASIC_UNKNOWN};
12701274#endif
12711275
12721276// Basic kinds, indexed by a LEGAL_INTRINSIC_COMPTYPES value.
@@ -1329,7 +1333,8 @@ const ArBasicKind *g_LegalIntrinsicCompTypes[] = {
13291333 g_LinAlgCT, // LICOMPTYPE_LINALG
13301334 g_BuiltInTrianglePositionsCT, // LICOMPTYPE_BUILTIN_TRIANGLE_POSITIONS
13311335#ifdef ENABLE_SPIRV_CODEGEN
1332- g_VKBufferPointerCT, // LICOMPTYPE_VK_BUFFER_POINTER
1336+ g_VKBufferPointerCT, // LICOMPTYPE_VK_BUFFER_POINTER
1337+ g_VKSampledTexture2DCT, // LICOMPTYPE_VK_SAMPLED_TEXTURE2D
13331338#endif
13341339};
13351340static_assert(
@@ -1389,7 +1394,7 @@ static const ArBasicKind g_ArBasicKindsAsTypes[] = {
13891394 AR_OBJECT_VK_SPIRV_TYPE, AR_OBJECT_VK_SPIRV_OPAQUE_TYPE,
13901395 AR_OBJECT_VK_INTEGRAL_CONSTANT, AR_OBJECT_VK_LITERAL,
13911396 AR_OBJECT_VK_SPV_INTRINSIC_TYPE, AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID,
1392- AR_OBJECT_VK_BUFFER_POINTER,
1397+ AR_OBJECT_VK_BUFFER_POINTER, AR_OBJECT_VK_SAMPLED_TEXTURE2D,
13931398#endif // ENABLE_SPIRV_CODEGEN
13941399 // SPIRV change ends
13951400
@@ -1501,6 +1506,7 @@ static const uint8_t g_ArBasicKindsTemplateCount[] = {
15011506 1, // AR_OBJECT_VK_SPV_INTRINSIC_TYPE
15021507 1, // AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID
15031508 2, // AR_OBJECT_VK_BUFFER_POINTER
1509+ 1, // AR_OBJECT_VK_SAMPLED_TEXTURE2D
15041510#endif // ENABLE_SPIRV_CODEGEN
15051511 // SPIRV change ends
15061512
@@ -1654,6 +1660,7 @@ static const SubscriptOperatorRecord g_ArBasicKindsSubscripts[] = {
16541660 {0, MipsFalse, SampleFalse}, // AR_OBJECT_VK_SPV_INTRINSIC_TYPE
16551661 {0, MipsFalse, SampleFalse}, // AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID
16561662 {0, MipsFalse, SampleFalse}, // AR_OBJECT_VK_BUFFER_POINTER
1663+ {0, MipsFalse, SampleFalse}, // AR_OBJECT_VK_SAMPLED_TEXTURE2D
16571664#endif // ENABLE_SPIRV_CODEGEN
16581665 // SPIRV change ends
16591666
@@ -1823,6 +1830,7 @@ static const char *g_ArBasicTypeNames[] = {
18231830 "ext_type",
18241831 "ext_result_id",
18251832 "BufferPointer",
1833+ "SampledTexture2D",
18261834#endif // ENABLE_SPIRV_CODEGEN
18271835 // SPIRV change ends
18281836
@@ -2475,6 +2483,12 @@ static void GetIntrinsicMethods(ArBasicKind kind,
24752483 *intrinsics = g_RayQueryMethods;
24762484 *intrinsicCount = _countof(g_RayQueryMethods);
24772485 break;
2486+ #ifdef ENABLE_SPIRV_CODEGEN
2487+ case AR_OBJECT_VK_SAMPLED_TEXTURE2D:
2488+ *intrinsics = g_VkSampledTexture2DMethods;
2489+ *intrinsicCount = _countof(g_VkSampledTexture2DMethods);
2490+ break;
2491+ #endif
24782492 case AR_OBJECT_HIT_OBJECT:
24792493 *intrinsics = g_DxHitObjectMethods;
24802494 *intrinsicCount = _countof(g_DxHitObjectMethods);
@@ -3073,6 +3087,7 @@ class HLSLExternalSource : public ExternalSemaSource {
30733087 ClassTemplateDecl *m_vkIntegralConstantTemplateDecl;
30743088 ClassTemplateDecl *m_vkLiteralTemplateDecl;
30753089 ClassTemplateDecl *m_vkBufferPointerTemplateDecl;
3090+ ClassTemplateDecl *m_vkSampledTextureTemplateDecl;
30763091
30773092 // Declarations for Work Graph Output Record types
30783093 ClassTemplateDecl *m_GroupNodeOutputRecordsTemplateDecl;
@@ -4078,6 +4093,15 @@ class HLSLExternalSource : public ExternalSemaSource {
40784093 recordDecl = DeclareVkBufferPointerType(*m_context, m_vkNSDecl);
40794094 recordDecl->setImplicit(true);
40804095 m_vkBufferPointerTemplateDecl = recordDecl->getDescribedClassTemplate();
4096+ } else if (kind == AR_OBJECT_VK_SAMPLED_TEXTURE2D) {
4097+ if (!m_vkNSDecl)
4098+ continue;
4099+ QualType float4Type =
4100+ LookupVectorType(HLSLScalarType::HLSLScalarType_float, 4);
4101+ recordDecl = DeclareVkSampledTextureType(
4102+ *m_context, m_vkNSDecl, "SampledTexture2D", float4Type);
4103+ m_vkSampledTextureTemplateDecl =
4104+ recordDecl->getDescribedClassTemplate();
40814105 }
40824106#endif
40834107 else if (templateArgCount == 0) {
@@ -4191,7 +4215,8 @@ class HLSLExternalSource : public ExternalSemaSource {
41914215 : m_matrixTemplateDecl(nullptr), m_vectorTemplateDecl(nullptr),
41924216 m_vkIntegralConstantTemplateDecl(nullptr),
41934217 m_vkLiteralTemplateDecl(nullptr),
4194- m_vkBufferPointerTemplateDecl(nullptr), m_hlslNSDecl(nullptr),
4218+ m_vkBufferPointerTemplateDecl(nullptr),
4219+ m_vkSampledTextureTemplateDecl(nullptr), m_hlslNSDecl(nullptr),
41954220 m_vkNSDecl(nullptr), m_dxNSDecl(nullptr), m_context(nullptr),
41964221 m_sema(nullptr), m_hlslStringTypedef(nullptr) {
41974222 memset(m_matrixTypes, 0, sizeof(m_matrixTypes));
0 commit comments