HLSL Working Group

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 i8 lookup 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 -Zss and -Zsb flags (llvm/llvm-project#203960)
  • [DirectX] Fix IO sandbox violation in DXContainerPDB pass (llvm/llvm-project#204461)

Offload Test Suite

  • Cover basic RayQuery methods 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_TRIANGLES test (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 createTextureWithData function (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)