microsoft / microsoft/DirectXShaderCompiler

[SPIR-V] SPV_EXT_descriptor_heap RasterizerOrdered flag lost on heap buffer alias re-derivation, suppressing ROV interlock

Open Beginner friendly
#8,829 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug needs-triage spirv
Dominant language
C++
Stars
3.7k
Forks
900
Avg merge
2d 11h
Merged PRs (30d)
44

Description

Description

When a heap buffer alias pointer is re-derived in emitDescriptorHeapBufferPointer (SpirvEmitter.cpp), the new SpirvInstruction does not copy the RasterizerOrdered flag set on the original pointer in emitDescriptorHeapBufferAccess. Accesses through a local RasterizerOrderedStructuredBuffer or RasterizerOrderedByteAddressBuffer alias therefore do not cause SpirvBuilder to emit the required begin/end invocation interlock. This is a silent correctness bug.

Fix

Add bufferDataPtr->setRasterizerOrdered(isRasterizerOrderedView(decl->getType())) after restoring the storage class and layout rule on the re-derived pointer.

References

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in SpirvEmitter.cpp at emitDescriptorHeapBufferPointer and compare it with emitDescriptorHeapBufferAccess, where RasterizerOrdered is set on the original pointer. Verify the re-derived pointer preserves that flag after storage class and layout restoration. Done means local RasterizerOrderedStructuredBuffer and RasterizerOrderedByteAddressBuffer aliases cause SpirvBuilder to emit the required begin/end invocation interlock.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
85/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.