2026-06-18 - HLSL Working Group Minutes
Discussion Topics
- This week in HLSL
Meeting Notes
This Week in HLSL
65 PRs were merged this week across a few areas:
- HLSL Frontend
- Improved handling of CBuffers in arguments and globals.
- User defined types no longer have implicit constructors.
- An issue with transpose not respecting matrix layout was fixed.
- Infrastructure for differentiating resources was improved.
- The HLSL function QuadReadAcrossDiagonal was implemented.
- The -fspv-preserve-interface compatibility flag was implemented.
- DirectX Backend
- We now clean up unused resource globals before assigning bindings.
- SimplifyCFG no longer generates invalid
i8lookup tables.
- Debug Info & PDB:
- We can now create PDBs alongside DirectX objects.
- There has been a lot of progress on translating modern LLVM’s debug info to DXIL / LLVM 3.7 debug info.
- Offload Test Suite:
- Several raytracing tests are now possible and have been added to the suite.
- The work to generalize the three APIs and reduce code duplication is making progress.
- More tests were created.
- Various infrastructural fixes and improvements were put in place for CI.
- SPIR-V Backend
- A number of general lowering improvements have gone in.
- Some verifier crashes were fixed.
For a full list of merged PRs, see the appendix.
There are also 22 newly opened PRs and 47 currently ongoing PRs.
Appendix: Merged PRs
HLSL Frontend
- [HLSL] Codegen for passing cbuffer structs as function args (llvm/llvm-project#203961)
- [HLSL] Set visibility of cbuffer global variables to internal (2nd attempt) (llvm/llvm-project#202745)
- [HLSL] Disable implicit constructors for user-defined structs/classes (llvm/llvm-project#194989)
- [Matrix][HLSL] Fix transpose matrix layout bugs (llvm/llvm-project#202486, llvm/offload-test-suite#1320)
- [HLSL][DXIL][SPIRV] QuadReadAcrossDiagonal intrinsic support (llvm/llvm-project#188567, llvm/offload-test-suite#1316)
- Reapply “[clang][SPIR-V] Implement -fspv-preserve-interface (#196404)” (llvm/llvm-project#204249)
DirectX Backend
- [DirectX] Add DXILRemoveUnusedResources pass (llvm/llvm-project#200965)
- [SimplifyCFG][DirectX] Honor target minimum lookup table element width (llvm/llvm-project#203103)
Debug Info & PDB
- [DirectX] Generate PDB file with debug info (llvm/llvm-project#202762)
- [DirectX] Lower DbgAssign to DbgValue (llvm/llvm-project#200267)
- [DirectX] Drop DICommonBlock metadata (llvm/llvm-project#201948)
- [DirectX] Replace unrepresentable debug info with i1 undef (llvm/llvm-project#203545)
- [Clang][HLSL][DebugInfo] Emit dx.source metadata nodes (llvm/llvm-project#199689)
- [Driver][DirectX] Add
-Zssand-Zsbflags (llvm/llvm-project#203960) - [DirectX] Fix IO sandbox violation in DXContainerPDB pass (llvm/llvm-project#204461)
Offload Test Suite
- Cover basic
RayQuerymethods on the single-triangle BLAS (llvm/offload-test-suite#1271) - Add CommittedPrimitiveIndex test on a multi-triangle BLAS (llvm/offload-test-suite#1272)
- Add InstanceInclusionMask filtering test (llvm/offload-test-suite#1274)
- Add
RAY_FLAG_CULL_BACK_FACING_TRIANGLEStest (llvm/offload-test-suite#1276) - [VK] Apply automatic layout transitions on Texture objects in the CommandEncoders (llvm/offload-test-suite#1299)
- Add support for 64-bit formats (llvm/offload-test-suite#1302)
- Improve buffer creation API to cover all needed current use cases (llvm/offload-test-suite#1306)
- Add
createTextureWithDatafunction (llvm/offload-test-suite#1307) - [Metal] MTLDevice BufferCreateDesc needs to be fully initialized (llvm/offload-test-suite#1312)
- Add ScreenSpaceUV Graphics test (llvm/offload-test-suite#488)
- [DirectX] Enable WaveReadLaneAt test (llvm/offload-test-suite#1308)
- Use the internal lit shell (llvm/offload-test-suite#1313)
- [WARP] Include warp dlls in install distribution step (llvm/offload-test-suite#1315)
- Pass warp architecture through to lit configuration (llvm/offload-test-suite#1317)
- Improve logging on mismatched values (llvm/offload-test-suite#1318)
- [Utils] Add ci_results script (llvm/offload-test-suite#1303)
SPIR-V Backend
- Emit debug type vector (llvm/llvm-project#200056)
- [LLVM][CodeGen][SPIRV] Match NULL splat to OpConstantNull (llvm/llvm-project#201313)
- [SPIR-V] Skip dead second result load for frexp and modf (llvm/llvm-project#201891)
- [SPIR-V] Deduce pointee type for all global variables, not only initialized ones (llvm/llvm-project#202047)
- [SPIR-V] Fix division by zero on byte addressing GEP into a subbyte array (llvm/llvm-project#202593)
- [SPIR-V] Preserve pointer-to-pointer element type for T*& parameters (llvm/llvm-project#203113)
- [SPIR-V] Return false after non-constant offset error in generateSampleImage (llvm/llvm-project#203512)
- [SPIR-V] Don’t lower metadata-argument intrinsics to functions (llvm/llvm-project#203654)
- [SPIR-V] Order alias-decl instructions so definitions precede uses (llvm/llvm-project#203699)
- [SPIR-V] Fix verifier crash on aggregate extract into a mutated callsite (llvm/llvm-project#203729)
- [SPIR-V] Constrain OpExtInst on the modf integral part path (llvm/llvm-project#203946)
- [SPIRV] Let atomic load load pointers (llvm/llvm-project#202823)
- [SPIR-V] Lower freeze instructions with aggregate operands (llvm/llvm-project#203584)
- [SPIR-V] Add Int64Atomics to Vulkan available capabilities (llvm/llvm-project#203194)
Code Cleanups
- [HLSL] Add IsArray resource attribute (llvm/llvm-project#201163)
- [DirectX][ObjectYAML] Fix SRCI round-trip tests that use zlib compression (llvm/llvm-project#202479)
- [SPIR-V] Merge duplicate case bodies in addInstrRequirements (NFC) (llvm/llvm-project#203177)
- [SPIR-V] Replace custom bitcast in FPMaxError decoration handling (NFC) (llvm/llvm-project#203179)
- Fix “not all control paths return” warnings; NFC (llvm/llvm-project#203361)
- [NFC][DirectX][SPIRV] Remove helper from HLSLFrontend (llvm/llvm-project#203401)
- [HLSL][NFC] Remove unused location argument (llvm/llvm-project#203467)
- [HLSL][NFC] Move HLSLBufferCopyEmitter class (llvm/llvm-project#203595)
- [SPIR-V] Take ArrayRef instead of owning containers in selection helpers (NFC) (llvm/llvm-project#203908)
- [SPIR-V] Remove duplicate collectReqs call in runOnModule (NFC) (llvm/llvm-project#203947)
- [DirectX][ObjectYAML][NFC] Remove unused function (llvm/llvm-project#204019)
- [DirectX][NFC] Use addSection to create SRCI in DXContainerGlobals (llvm/llvm-project#204028)
- [llvm-objcopy][DirectX][NFC] Reuse isProgramPart() in DXContainerObjcopy (llvm/llvm-project#204032)
- [NFC] clang-tidy (llvm/offload-test-suite#1319)
- [SPIRV] Replace unordered_{map,set} with DenseMap/SmallPtrSet (llvm/llvm-project#204046)