https://github.com/tcorringham updated https://github.com/llvm/llvm-project/pull/208725
>From e502ab113167d9b87e5521c96038ab3075fe3cb3 Mon Sep 17 00:00:00 2001 From: Tim Corringham <[email protected]> Date: Wed, 8 Jul 2026 18:49:48 +0100 Subject: [PATCH] [HLSL] Implement RWTexture2DArray Add front-end support for RWTexture2DArray, and update related tests to include coverage of this resource. Fixes #194947 --- clang/lib/Sema/HLSLExternalSemaSource.cpp | 20 +++++++++++++++++++ clang/test/AST/HLSL/Textures-AST.hlsl | 1 + .../resources/Textures-GetDimensions.hlsl | 4 +++- .../CodeGenHLSL/resources/Textures-Load.hlsl | 4 ++++ .../Resources/RWTexture2D-mips-errors.hlsl | 1 + ...WTexture2D-unsupported-methods-errors.hlsl | 1 + .../Resources/Textures-GetDimensions.hlsl | 1 + .../Resources/Textures-Load-errors.hlsl | 1 + 8 files changed, 32 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp index 115795ca74bae..7578f20a27f18 100644 --- a/clang/lib/Sema/HLSLExternalSemaSource.cpp +++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp @@ -745,6 +745,26 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() { /*IsArray=*/true, ResourceDimension::Dim2D) .completeDefinition(); }); + + // RWTexture2DArray — same as RWTexture2D but IsArray=true + Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace, "RWTexture2DArray") + .addSimpleTemplateParams({"element_type"}, {Float4Ty}, + TypedBufferConcept) + .finalizeForwardDeclaration(); + + onCompletion(Decl, [this](CXXRecordDecl *Decl) { + setupRWTextureType(Decl, *SemaPtr, /*IsArray=*/true, + ResourceDimension::Dim2D) + .completeDefinition(); + }); + + auto *PartialSpecRW2DA = addVectorTexturePartialSpecialization( + *SemaPtr, HLSLNamespace, Decl->getDescribedClassTemplate()); + onCompletion(PartialSpecRW2DA, [this](CXXRecordDecl *Decl) { + setupRWTextureType(Decl, *SemaPtr, /*IsArray=*/true, + ResourceDimension::Dim2D) + .completeDefinition(); + }); } // Build a single overload of an HLSL atomic intrinsic in the hlsl namespace. diff --git a/clang/test/AST/HLSL/Textures-AST.hlsl b/clang/test/AST/HLSL/Textures-AST.hlsl index 8f40838557b09..af3972febbb56 100644 --- a/clang/test/AST/HLSL/Textures-AST.hlsl +++ b/clang/test/AST/HLSL/Textures-AST.hlsl @@ -1,6 +1,7 @@ // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2D -o - %s | FileCheck %s --check-prefixes=CHECK,SRV -DTEXTURE=Texture2D -DINDEX_SIZE=2 // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2DArray -o - %s | FileCheck %s --check-prefixes=CHECK,SRV,SRV-ARRAY -DTEXTURE=Texture2DArray -DINDEX_SIZE=3 // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2D -DRW=1 -o - %s | FileCheck %s --check-prefixes=CHECK,UAV,UAV-STORE,UAV-TRUNC -DTEXTURE=RWTexture2D -DINDEX_SIZE=2 +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2DArray -DRW=1 -o - %s | FileCheck %s --check-prefixes=CHECK,UAV,UAV-STORE,UAV-TRUNC -DTEXTURE=RWTexture2DArray -DINDEX_SIZE=3 // CHECK: ClassTemplateDecl {{.*}} [[TEXTURE]] // CHECK: TemplateTypeParmDecl {{.*}} element_type diff --git a/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl b/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl index 626051e28d0ef..8293d45995dac 100644 --- a/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl +++ b/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl @@ -10,7 +10,9 @@ // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm -disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2D -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,DXIL -DTEXTURE=RWTexture2D -DDXIL_TY=2 -DRW=1 // RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2D -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SPIRV -DTEXTURE=RWTexture2D -DARRAYED=0 -DSAMPLED=2 -DIMG_FMT=1 -// When RWTexture2DArray is implemented, add DXIL/SPIRV runs with DXIL_TY=7, RW=1, ARRAYED=1, SAMPLED=2, IMG_FMT=1. +// RWTexture2DArray +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm -disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2DArray -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,DXIL -DTEXTURE=RWTexture2DArray -DDXIL_TY=7 -DRW=1 +// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2DArray -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SPIRV -DTEXTURE=RWTexture2DArray -DARRAYED=1 -DSAMPLED=2 -DFORMAT=1 TEXTURE<float4> Tex; diff --git a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl index c0d14c963d5a8..4502fbafc4a0c 100644 --- a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl +++ b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl @@ -10,6 +10,10 @@ // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm -disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2D -DLOCATION_TYPE=int3 -DZEROS=0 -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,DXIL -DTEXTURE=RWTexture2D -DLOCATION_DIM=3 -DCOORD_DIM=2 -DCOORD_MASK="<i32 0, i32 1>" -DDXIL_TY=2 -DRW=1 // RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2D -DLOCATION_TYPE=int3 -DZEROS=0 -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SPIRV -DTEXTURE=RWTexture2D -DLOCATION_DIM=3 -DCOORD_DIM=2 -DCOORD_MASK="<i32 0, i32 1>" -DARRAYED=0 -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 -DFORMAT24=24 -DFORMAT25=25 +// RWTexture2DArray +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2DArray -DLOCATION_TYPE=int4 -DZEROS=" 0, 0" -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,DXIL -DTEXTURE=Texture2DArray -DLOCATION_DIM=4 -DCOORD_DIM=3 -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DDXIL_TY=7 -DRW=1 +// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2DArray -DLOCATION_TYPE=int4 -DZEROS=" 0, 0" -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SPIRV -DTEXTURE=Texture2DArray -DLOCATION_DIM=4 -DCOORD_DIM=3 -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DARRAYED=1 -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 -DFORMAT24=24 -DFORMAT25=25 + TEXTURE<float4> t; // CHECK: define hidden {{.*}} <4 x float> @test_load(int vector[2]) diff --git a/clang/test/SemaHLSL/Resources/RWTexture2D-mips-errors.hlsl b/clang/test/SemaHLSL/Resources/RWTexture2D-mips-errors.hlsl index 34f704043e55e..e53157d6e9660 100644 --- a/clang/test/SemaHLSL/Resources/RWTexture2D-mips-errors.hlsl +++ b/clang/test/SemaHLSL/Resources/RWTexture2D-mips-errors.hlsl @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -finclude-default-header -DTEXTURE=RWTexture2D -verify %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -finclude-default-header -DTEXTURE=RWTexture2DArray -verify %s // RWTexture2D has no mips view (contrast with Texture2D-mips-errors.hlsl, // which exercises private/protected mips_type on Texture2D). diff --git a/clang/test/SemaHLSL/Resources/RWTexture2D-unsupported-methods-errors.hlsl b/clang/test/SemaHLSL/Resources/RWTexture2D-unsupported-methods-errors.hlsl index 61c7497217284..b02d4d61c8522 100644 --- a/clang/test/SemaHLSL/Resources/RWTexture2D-unsupported-methods-errors.hlsl +++ b/clang/test/SemaHLSL/Resources/RWTexture2D-unsupported-methods-errors.hlsl @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -finclude-default-header -DTEXTURE=RWTexture2D -verify %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -finclude-default-header -DTEXTURE=RWTexture2DArray -verify %s // SRV-style texture methods are not available on RWTexture2D or RWTexture2DArray (UAV). diff --git a/clang/test/SemaHLSL/Resources/Textures-GetDimensions.hlsl b/clang/test/SemaHLSL/Resources/Textures-GetDimensions.hlsl index 6a6c2b1e2da4e..56dfcd659b25c 100644 --- a/clang/test/SemaHLSL/Resources/Textures-GetDimensions.hlsl +++ b/clang/test/SemaHLSL/Resources/Textures-GetDimensions.hlsl @@ -1,6 +1,7 @@ // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -finclude-default-header -fsyntax-only -DTEXTURE=Texture2D -verify %s // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -finclude-default-header -fsyntax-only -DTEXTURE=Texture2DArray -verify %s // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -finclude-default-header -fsyntax-only -DTEXTURE=RWTexture2D -verify %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -finclude-default-header -fsyntax-only -DTEXTURE=RWTexture2DArray -verify %s TEXTURE<float4> tex; diff --git a/clang/test/SemaHLSL/Resources/Textures-Load-errors.hlsl b/clang/test/SemaHLSL/Resources/Textures-Load-errors.hlsl index 88e1f81d07094..03e64b62fddc1 100644 --- a/clang/test/SemaHLSL/Resources/Textures-Load-errors.hlsl +++ b/clang/test/SemaHLSL/Resources/Textures-Load-errors.hlsl @@ -1,6 +1,7 @@ // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -finclude-default-header -DTEXTURE=Texture2D -DARRAYED=0 -verify %s // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -finclude-default-header -DTEXTURE=Texture2DArray -DARRAYED=1 -verify %s // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -finclude-default-header -DTEXTURE=RWTexture2D -DARRAYED=0 -verify %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -finclude-default-header -DTEXTURE=RWTexture2DArray -DARRAYED=1 -verify %s #if ARRAYED #define ITY int4 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
