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