Commit Graph

15820 Commits

Author SHA1 Message Date
Jake Turner 4c72fdfd8a Specific DXIL disassembly handling for QuadVote
After
  bool _QuadVote2 = QuadAny(_32);
  bool _QuadVote = QuadAll(_37);

Before
  bool _QuadVote2 = QuadVote(/*cond*/ _32, /*op*/ 0);
  bool _QuadVote = QuadVote(/*cond*/ _37, /*op*/ 1);
2025-04-12 11:28:06 +01:00
Jake Turner 89d131ab3a Add D3D12_Workgroup_Zoo unit tests for QuadAny, QuadAll ops
For SM6.0, DXC will replace with SM6.0 instructions
For SM6.7, DXC will use SM6.7 instruction QuadVote
2025-04-12 11:26:30 +01:00
James Sumihiro c3f1ccc38e Fix image state merge with secondary command buffers.
If a secondary command buffer referenced an image but its layout is unknown, it remains unknown when merged into a primary command buffer.
2025-04-10 17:13:37 +01:00
baldurk 92c13a3247 Fix secondary draws from previous pass/instances with mesh shaders 2025-04-10 16:04:22 +01:00
Jake Turner a1cf098fe3 Extend Shader ControlFlow handling of external simulation updates
Previously automatic activation of merge points was only considered for the merge point head.
Now consider any point in the merge point list and prune above it, similar to how function return points are handled
2025-04-10 15:06:19 +01:00
Jake Turner e53b6d3bf4 Add DXIL Debugger Support for SM6.5 Wave ops
DXOp::WaveMatch
DXOp::WaveMultiPrefixOp
DXOp::WaveMultiPrefixBitCount
2025-04-10 10:48:27 +01:00
Jake Turner 21c576730c Add D3D12_Workgroup_Zoo unit tests for SM6.5 Wave ops
WaveMatch()
WaveMultiPrefixSum()
WaveMultiPrefixProduct()
WaveMultiPrefixCountBits()
WaveMultiPrefixBitAnd()
WaveMultiPrefixBitOr()
WaveMultiPrefixBitXor()
2025-04-10 10:48:27 +01:00
Jake Turner fcb688124f Specific DXIL disassembly handling for WaveMultiPrefixOp
After
int _WaveMultiPrefixOp12 = WaveMultiPrefixSum(_WaveGetLaneIndex, {_92,_93,_94,_95}); // Unsigned
int _WaveMultiPrefixOp10 = WaveMultiPrefixBitAnd(_127, {_117,_118,_119,_120}); // Signed
int _WaveMultiPrefixOp9 = WaveMultiPrefixBitOr(_WaveGetLaneIndex, {_117,_118,_119,_120}); // Signed
int _WaveMultiPrefixOp = WaveMultiPrefixBitXor(_WaveGetLaneIndex, {_117,_118,_119,_120}); // Signed
int _WaveMultiPrefixOp11 = WaveMultiPrefixProduct(_WaveGetLaneIndex, {_92,_93,_94,_95}); // Unsigned

Before
int _WaveMultiPrefixOp12 = WaveMultiPrefixOp(/*value*/ _WaveGetLaneIndex, /*mask0*/ _92, /*mask1*/ _93, /*mask2*/ _94, /*mask3*/ _95, /*op*/ 0, /*sop*/ 1);
int _WaveMultiPrefixOp10 = WaveMultiPrefixOp(/*value*/ _127, /*mask0*/ _117, /*mask1*/ _118, /*mask2*/ _119, /*mask3*/ _120, /*op*/ 1, /*sop*/ 0);
int _WaveMultiPrefixOp9 = WaveMultiPrefixOp(/*value*/ _WaveGetLaneIndex, /*mask0*/ _117, /*mask1*/ _118, /*mask2*/ _119, /*mask3*/ _120, /*op*/ 2, /*sop*/ 0);
int _WaveMultiPrefixOp = WaveMultiPrefixOp(/*value*/ _WaveGetLaneIndex, /*mask0*/ _117, /*mask1*/ _118, /*mask2*/ _119, /*mask3*/ _120, /*op*/ 3, /*sop*/ 0);
int _WaveMultiPrefixOp11 = WaveMultiPrefixOp(/*value*/ _WaveGetLaneIndex, /*mask0*/ _92, /*mask1*/ _93, /*mask2*/ _94, /*mask3*/ _95, /*op*/ 4, /*sop*/ 1);
2025-04-10 10:48:27 +01:00
baldurk def9422163 Apply framebuffer usage from dynamic rendering to secondary cmd draws 2025-04-09 11:36:54 +01:00
Jake Turner 42a1ace8d2 Specific DXIL disassembly handling for WaveActiveBit
After
  int _WaveActiveBit14 = WaveActiveBitAnd(_WaveGetLaneIndex);
  int _WaveActiveBit13 = WaveActiveBitOr(_WaveGetLaneIndex);
  int _WaveActiveBit = WaveActiveBitXor(_WaveGetLaneIndex);

Before
  int _WaveActiveBit14 = WaveActiveBit(/*value*/ _WaveGetLaneIndex, /*op*/ 0);
  int _WaveActiveBit13 = WaveActiveBit(/*value*/ _WaveGetLaneIndex, /*op*/ 1);
  int _WaveActiveBit = WaveActiveBit(/*value*/ _WaveGetLaneIndex, /*op*/ 2);
2025-04-07 18:07:13 +01:00
Jake Turner f0936cdf1b Add DXIL Debugger Support for Wave Reduction ops
DXOp::WaveActiveAllEqual
DXOp::WaveActiveBit
DXOp::WaveAllBitCount
DXOp::WaveActiveOp (WaveActiveOp::Product, WaveActiveOp::Min, WaveActiveOp::Max)
2025-04-07 17:51:43 +01:00
Jake Turner cc32e24d81 Add D3D12_Workgroup_Zoo unit tests for Wave Reduction ops
WaveActiveMax()
WaveActiveMin()
WaveActiveProduct()
WaveActiveSum()
WaveActiveAllEqual()
WaveActiveBitAnd()
WaveActiveBitOr()
WaveActiveBitXor()
WaveActiveCountBits()
2025-04-07 17:51:29 +01:00
Jake Turner ebd0648096 Add VK_Workgroup_Zoo unit tests for subgroup Reduction ops
subgroupMax()
subgroupMin()
subgroupMul()
subgroupAdd()
subgroupAllEqual()
subgroupAnd()
subgroupOr()
subgroupXor()
subgroupBallotBitCount()
2025-04-07 17:51:22 +01:00
baldurk 4b561b81bb Don't force BDA on memory allocs that will be used with dedicated images 2025-04-07 16:53:25 +01:00
baldurk af0a32db38 Remove centroid decorations when fetching postvs 2025-04-07 16:53:24 +01:00
baldurk 3a3e2c0540 Use flags from final linked pipeline with EXT_gpl if present 2025-04-07 16:53:24 +01:00
baldurk 26f2732268 Fix KHR_maintenance5 pipeline flags being put on wrong pNext chain 2025-04-07 16:53:24 +01:00
baldurk c084fc9cc3 Don't pass non-sparse resources to sparse reference function 2025-04-07 16:53:24 +01:00
Jake Turner 6f949b1fa9 Add DXIL Debugger Support for Wave Scan and Prefix ops
DXOp::WavePrefixOp
DxOp::WavePrefixBitCount
2025-04-07 13:42:24 +01:00
Jake Turner cf6e3d68fa Add D3D12_Workgroup_Zoo unit tests for Wave Scan and Prefix ops
WavePrefixCountBits()
WavePrefixSum()
WavePrefixProduct()
2025-04-07 13:20:39 +01:00
Jake Turner a4d916f033 Add VK_Workgroup_Zoo unit tests for subgroup Scan and Prefix ops
subgroupBallotExclusiveBitCount()
subgroupExclusiveAdd()
subgroupExclusiveMul()
2025-04-07 13:20:36 +01:00
Jake Turner 5be762a464 Add DXIL Debugger Support for Wave Broadcast Operations
HLSL
WaveReadLaneFirst()
WaveReadLaneAt()

DXIL
DXOp::WaveReadLaneAt
DXOp::WaveReadLaneFirst
2025-04-07 11:08:00 +01:00
Jake Turner 214d3f766f Add D3D12_Workgroup_Zoo unit tests for subgroup Broadcast ops
WaveReadLaneFirst()
WaveReadLaneAt()
2025-04-07 11:07:03 +01:00
Jake Turner b8f1d01b35 Add VK_Workgroup_Zoo unit tests for subgroup Broadcast/Shuffle ops
subgroupBroadcastFirst()
subgroupBroadcast()
subgroupShuffle()
2025-04-07 11:06:29 +01:00
Jake Turner 0e35fe6fcb Add DXIL Debugger Support for Wave Vote Operations
HLSL
WaveActiveAnyTrue()
WaveActiveAllTrue()
WaveActiveBallot()

DXIL
DXOp::WaveAnyTrue
DXOp::WaveAllTrue
DXOp::WaveActiveBallot
2025-04-07 11:05:07 +01:00
Jake Turner aefb21fa36 Add D3D12_Workgroup_Zoo unit tests for Wave Vote operations
WaveActiveAnyTrue()
WaveActiveAllTrue()
WaveActiveBallot()
2025-04-07 11:05:07 +01:00
Jake Turner 001539a3cd Add VK_Workgroup_Zoo unit tests for subgroup Vote operations
subgroupAny()
subgroupAll()
subgroupBallot()
2025-04-07 11:05:07 +01:00
baldurk b70254174f Handle marking sparse BDA buffers as referenced. Closes #3572 2025-04-07 10:48:08 +01:00
Cam Mannett b031e69597 Warn user if layer config application failed before JDWP failure 2025-04-07 10:17:05 +01:00
Jake Turner fa22effc77 Add DXIL Debugger Support for Quad Operations
HLSL
QuadReadLaneAt()
QuadReadAcrossDiagonal()
QuadReadAcrossX()
QuadReadAcrossY()

DXIL
DXOp::QuadReadLaneAt
DXOp::QuadOp
2025-04-06 14:39:49 +01:00
Jake Turner 038aee2459 Add D3D12_Workgroup_Zoo unit tests for Quad Shuffle operations
QuadReadLaneAt()
QuadReadAcrossDiagonal()
QuadReadAcrossX()
QuadReadAcrossY()
2025-04-06 14:38:13 +01:00
Jake Turner 7240cf8c57 Add VK_Workgroup_Zoo unit tests for Quad Shuffle operations
subgroupQuadBroadcast()
subgroupQuadSwapDiagonal()
subgroupQuadSwapHorizontal()
subgroupQuadSwapVertical()
2025-04-06 14:00:52 +01:00
Jake Turner e9f5c93062 Add DXIL Debugger Support for workgroup query functions
HLSL
WaveGetLaneCount()
WaveIsFirstLane()

DXIL
DXOp::WaveGetLaneCount
DXOp::WaveIsFirstLane
2025-04-06 12:55:52 +01:00
Jake Turner 5e6cfd73a0 Add D3D12_Workgroup_Zoo unit tests for workgroup query functions
WaveGetLaneCount()
WaveGetLaneIndex()
WaveIsFirstLane()
2025-04-06 12:55:29 +01:00
Jake Turner 88a9bde2f9 Add SubgroupSize to global_builtins for Vulkan shader debugging
Added for all stages (Vertex, Compute, Pixel)
2025-04-06 12:50:18 +01:00
Jake Turner e0f8f29fa7 Add VK_Workgroup_Zoo unit tests for workgroup query functions
gl_SubgroupSize
gl_SubgroupInvocationID
subgroupElect()
2025-04-06 12:50:08 +01:00
Jake Turner fdc2125e7b Add D3D12_Workgroup_Zoo convergence test with dynamic for loop
A different number of iterations per thread
2025-04-06 12:49:34 +01:00
Jake Turner 2af9015e04 Add VK_Workgroup_Zoo convergence test with dynamic for loop
A different number of iterations per thread
2025-04-06 12:49:16 +01:00
Jake Turner b7a40e644a Ignore Constant initialiser data that is undefined 2025-04-06 10:21:56 +01:00
Jake Turner 30fbb6b0f5 Switch to previous behaviour for finding Uniform Blocks
Use paths including loops
2025-04-06 10:21:51 +01:00
Jake Turner c83be4088a Change DXIL debugger control flow to use rdcshaders::ControlFlow
This emulates maximal re-convergence behaviour and matches how the SPRIV shader debugger control flow works.

Remove the quick fix for discard to skip over degenerate branches
Remove StepOverDegenerateBranch() method
2025-04-04 11:42:58 +01:00
Jake Turner ee4a2c40a9 Added OutputGraph to output control flow as a graphvis text file 2025-04-04 11:42:58 +01:00
Jake Turner 744c9a2899 Added GetDivergentBlocks(), GetConvergentBlocks() to DXIL::ControlFlow 2025-04-04 11:42:58 +01:00
Jake Turner 99260a9c9b Add d3d12_subgroup_zoo tests for maximal reconvergence behaviour
Diverged threads which re-converge at expected points
The tests copied over from vk_subgroup_zoo
2025-04-04 11:42:58 +01:00
Jake Turner ac5162d44c Fix DXIL Debugger WaveActiveOp ShaderVariable UI result
The result variable name was being set to the input variable name
The simulation was correct.
2025-04-04 11:42:58 +01:00
Jake Turner 6435986d2a Remove spammy warning about no callstack entry found for instruction 2025-04-04 11:42:18 +01:00
Jake Turner d7025e6bf7 Remove error "DXIL GlobalVar initialiser"
Valid for a DXIL global var to be uninitialized (treat it as zero initialized)
2025-04-04 11:41:48 +01:00
Jake Turner 59454dbecc ControlFlow do not add duplicate merge points on the top of the stack 2025-04-04 07:20:21 +01:00
Jake Turner 8eba23875e Specific DXIL disassembly handling for WaveActiveOp
After
  int _WaveActiveOp11 = WaveActiveSum(_WaveGetLaneIndex); // Unsigned

Before
  int _WaveActiveOp11 = WaveActiveOp(/*value*/ _WaveGetLaneIndex, /*op*/ 0, /*sop*/ 1);
2025-04-03 15:40:02 +01:00
Jake Turner 88752e2c20 Rename workgroundSize parameter to threadsInWorkgroup 2025-04-03 10:01:17 +01:00