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 1/2] [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

>From 5b25d49606d5d507dcc45c179843f735152c837b Mon Sep 17 00:00:00 2001
From: Tim Corringham <[email protected]>
Date: Thu, 16 Jul 2026 18:53:25 +0100
Subject: [PATCH 2/2] Fix test cases

Fix the tests I forgot to include previously.
---
 clang/test/AST/HLSL/Textures-AST.hlsl                        | 2 +-
 clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl | 2 +-
 clang/test/CodeGenHLSL/resources/Textures-Load.hlsl          | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/clang/test/AST/HLSL/Textures-AST.hlsl 
b/clang/test/AST/HLSL/Textures-AST.hlsl
index af3972febbb56..86ddb0a0308f7 100644
--- a/clang/test/AST/HLSL/Textures-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-AST.hlsl
@@ -1,7 +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
+// 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-ARRAY,UAV-STORE,UAV-NOTRUNC 
-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 8293d45995dac..38ee3f8679701 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl
@@ -12,7 +12,7 @@
 
 // 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
+// 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 -DIMG_FMT=1
 
 TEXTURE<float4> Tex;
 
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl 
b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
index 4502fbafc4a0c..a9b28f80eeead 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
@@ -11,8 +11,8 @@
 // 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
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm 
-disable-llvm-passes -finclude-default-header -DTEXTURE=RWTexture2DArray 
-DLOCATION_TYPE=int4 -DZEROS=" 0, 0" -o - %s | llvm-cxxfilt | FileCheck %s 
--check-prefixes=CHECK,DXIL -DTEXTURE=RWTexture2DArray -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=RWTexture2DArray 
-DLOCATION_TYPE=int4 -DZEROS=" 0, 0" -o - %s | llvm-cxxfilt | FileCheck %s 
--check-prefixes=CHECK,SPIRV -DTEXTURE=RWTexture2DArray -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;
 

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

Reply via email to