Commit Graph

15857 Commits

Author SHA1 Message Date
Jake Turner eeac056816 VK and D3D12 Workgroup & Subgroup Zoo tests fail on Asserts or Errors
Check the renderdoc log for lines matching "Assertion" or "Error"
Using new helper function in testcase.py
def check_renderdoc_log(self, asserts: bool = True, errors: bool = True):
2025-04-22 12:33:56 +01:00
Jake Turner 1c4520534d new helper function in testcase.py to check RD log for Asserts/Errors
def check_renderdoc_log(self, asserts: bool = True, errors: bool = True):
2025-04-22 12:33:50 +01:00
Jake Turner 261f957d5b SPIRV workgroup debugger, add padding lanes to align to subgroup size 2025-04-18 13:58:10 +01:00
Jake Turner 5f00ed9d39 SPIRV Debugger workgroup debugging fixes
Set the thread property SubgroupId for the extra lanes outside of the subgroup
pass the workgroup laneIndex to BeginDebug
Set the thread property GroupThreadIndex, GroupFlatIndex for all workgroup lanes
2025-04-18 13:58:10 +01:00
Jake Turner c1fb809f17 SPIRV Debugger, add asserts to ensure the lane index is in range
Specifically when computing the active lanes from the activeMask array
2025-04-18 13:58:09 +01:00
Jake Turner f5222ed547 DXIL Debugger tweak subgroup active lanes helper
add asserts to ensure the lane index is in range
return the first lane in the subgroup
2025-04-18 13:58:09 +01:00
Jake Turner ede0c1d0ee D3D12 Workgroup debugger, add padding lanes to align to subgroup size 2025-04-18 13:58:09 +01:00
Jake Turner 53ad61b6a5 D3D12 Workgroup debugger, use SV_GroupThreadID for threadid
Use SV_GroupThreadID to fill in threadid in the compute fetcher instead of SV_DispatchThreadID
Keep SV_DispatchThreadID to identify the candidate thread
2025-04-18 13:58:09 +01:00
Jake Turner e14bc98e18 Added VK_Workgroup_Zoo, D3D12_Workgroup_Zoo tests
Tests specifically aimed at workgroup debugging i.e GSM and non-aligned subgroups
Not focused on unit tests of subgroup/quad instructions that is handled by *_Subgroup_Zoo
2025-04-18 13:58:09 +01:00
baldurk a8a0e9628d Update VK_CBuffer_Zoo test to account for glslang regression
* glslang now requires and uses scalar block layout for hlsl cbuffer packing
2025-04-18 13:28:19 +01:00
baldurk f837af3066 Make sure functional test sections always match begin/end 2025-04-18 12:54:53 +01:00
baldurk eb05d1b0a6 Fix forced references failing on ASs 2025-04-18 11:20:04 +01:00
baldurk 3b29508f2f Fix vulkan structured data conversion 2025-04-18 11:19:47 +01:00
baldurk 933a91e47c Update shaderc build script (VS2015 no longer supported) 2025-04-18 11:19:34 +01:00
baldurk e1dd947e1e work around compile error asserting on static const 2025-04-17 17:16:50 +01:00
baldurk 506d6c6d7b Fix self-capture for vulkan captures using ASs
* The problem here is that due to design flaws in the extension when ASs are in
  use we don't know whether a memory allocation will need BDA or not an the
  application doesn't have to set any flag - unlike for normal buffer BDA. So we
  promote (almost) all memory allocations to BDA when using ASs even if they're
  not needed.
* This normally works fine except if during self-capture the replay process
  allocates some normal memory before all application replayed allocations have
  been made, the self-capturing will promote it to BDA and request a replayable
  address that might clash with a later address the application had used and
  would be needed.
* To solve this, we ensure that during capture we don't create wrapped
  allocations more than necessary - to avoid causing clashes - as well as
  ensuring that on replay we only create new allocations after all replayed
  allocations.
* We also take advantage of dedicated allocations for fake swapchain images,
  since dedicated image allocations will not be promoted to BDA.
2025-04-17 16:21:19 +01:00
Martyn Jacques 84aa4c7fb6 Reset planar flag when remapping textures on vulkan replay 2025-04-17 16:20:21 +01:00
Jake Turner b02980faa2 Extend D3D12 barrier special case code in FillWithDiscardPattern
Change educated guess for D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS resources
2025-04-17 13:38:02 +01:00
baldurk 5deab91b40 Fix CGL 2025-04-16 22:53:45 +01:00
baldurk 6e2dea6219 Fix linux/mac compilation 2025-04-16 21:16:39 +01:00
baldurk d38d9594a2 Fix emulation of glCopySubImageData. Closes #3589
* It was not working for some formats/dimensions, tested against GL_Texture_Zoo.
2025-04-16 18:36:00 +01:00
baldurk 621698e7dc Ignore port in device IDs for target control connection. Closes #3590 2025-04-16 18:02:39 +01:00
baldurk 06003bb1ad Implement support for manual swapchain image creation. Closes #3586 2025-04-16 17:39:51 +01:00
baldurk f6eee16baf Check for files with extra .pdb if the original filename didn't have it 2025-04-16 17:39:51 +01:00
baldurk 7d464fed60 Add verification that HASH matches in debug info if present
* We keep searching if we find a file that matches but has the wrong hash.
2025-04-16 17:39:51 +01:00
baldurk 0f019eafb9 Add option to make shader search paths non-recursive
* For very large shader symbol stores especially those on network drives, the
  bad behaviour that PIX has to recursively search all possible subdirectories
  and enumerate all files can be really slow. Most of the time a file is
  identified by its hash filename and looked up directly - if that isn't a hit,
  in many cases users would rather a fast exit to having no symbols.
2025-04-16 17:39:51 +01:00
baldurk 67960c740c Improve error detection for windows directory enumeration 2025-04-16 17:39:51 +01:00
baldurk e14ff38a37 Use lock instead of atomic to protect debug files cache lookup 2025-04-16 17:39:51 +01:00
baldurk abb0b9d843 Fix validation issue with ASs as memory can't be used without buffer 2025-04-16 12:37:23 +01:00
baldurk f9d03761b3 Avoid libraries loading and unloading for GL hooks on windows
* This can cause the hooks to get out of sync if the libraries move between
  loads, so should be avoided. Most applications won't do this anyway.
2025-04-16 12:08:49 +01:00
baldurk 99c4d5a588 Add more detail to message for failed mesh shader fetches on D3D12 2025-04-16 12:08:49 +01:00
Jake Turner 29544f34e2 Remove VK, D3D12 Workgroup lane value is active assert
It will fire on lanes when workgroup size is not a multiple of the subgroup size
2025-04-14 17:25:09 +01:00
Jake Turner 2ce4c0fb74 Initialise WaveActiveBallot accumulator to zero 2025-04-14 16:32:27 +01:00
Jake Turner c723941946 Add DXIL debug helper ConvertShaderVariableStructToVector
Used by WaveActiveBallot and WaveMatch
2025-04-14 16:32:22 +01:00
Jake Turner 187f7bd523 Reset s_NextTangleId to zero when constructing ControlFlow 2025-04-14 16:32:17 +01:00
Jake Turner 13588f3962 Alter VK, D3D12 Subgroup_Zoo tests to increase convergence/merge usage 2025-04-14 08:46:12 +01:00
Jake Turner df6a58c9c0 Add DXIL Debugger Support for SM6.7 Quad ops
DXOp::QuadVote
DXOp::WaveMultiPrefixOp
2025-04-12 11:36:23 +01:00
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