Commit Graph

16303 Commits

Author SHA1 Message Date
Jake Turner 3e38a63ebb D3D12_Shader_Debug_Zoo test for helper lane UAV writes are ignored 2025-10-04 07:16:49 +01:00
Jake Turner a0db9d5a1f Comment about thread safety requirements in Spirv debugger ids container 2025-10-03 15:20:57 +01:00
Jake Turner d7f7be63a9 Spirv debugger small tidy up for consistency
Rename:
simulationFinished -> atomic_simulationFinished
Vulkan_Hack_ShaderDebugUsesJobSystemQueue -> Vulkan_Hack_ShaderDebugUsesJobSystemJobs
2025-10-03 06:24:49 +01:00
baldurk 36f8d654dc Add NULL aliasing barrier around buffer discard patterns 2025-10-02 14:17:20 +01:00
baldurk 2018b5d790 Use the correct state for creating whole memory buffers on D3D12 2025-09-30 11:26:01 +01:00
baldurk a92e0d2669 Ensure capabilities are properly cached when only prepared once 2025-09-30 11:26:01 +01:00
Zackery Mason-Blaug 30f5a4023d Add support for VK_EXT_vertex_attribute_robustness 2025-09-30 19:10:06 +09:00
Zackery Mason-Blaug 9711e0eb57 Add support for maintenance9 vertex attribute robustness 2025-09-30 19:10:06 +09:00
Jake Turner c03b2e2fb0 Remove unused methods from GpuMathOperation & GpuSampleGatherOperation
Clear() methods are not used
2025-09-29 17:09:04 +01:00
baldurk 8864a1d81e Improve time listing available demos
* Remove redundant repeated calls when preparing multiple tests
2025-09-29 16:40:15 +01:00
baldurk dadf4a14d5 Serialise D3D12 buffer initial contents less memory-intensivesly 2025-09-29 16:37:45 +01:00
baldurk 41e9f3c426 Add a demo project with extremely high overlap/sparseness buffers
* For stressing memory overhead in buffer initial states
2025-09-29 16:37:45 +01:00
Jake Turner 9952483f2b Make D3D12_Groupshared test deterministic 2025-09-28 07:26:30 +01:00
Jake Turner 1ccdf7f4f4 Op::ControlBarrier requires full lockstep when being simulated
Lockstep before executing the instruction
Lockstep after executing the instruction
2025-09-28 07:26:30 +01:00
Jake Turner 357102fd3f Make VK_Groupshared test deterministic 2025-09-28 07:26:30 +01:00
Jake Turner d6a49c4c18 Make D3D12_Workgroup_Zoo test determistic 2025-09-28 07:26:30 +01:00
Jake Turner 9e63b3fb8c Enable VK_Groupshared test 2025-09-28 07:26:30 +01:00
Jake Turner 11a4104bde DXIL Debugger support for thread local global memory 2025-09-28 07:26:30 +01:00
Jake Turner 61cc31062e Change D3D12_Shader_Debug_Zoo test to exercise thread local global mem 2025-09-28 07:26:15 +01:00
Jake Turner a5c3ee4b70 Tweak to DXIL debugger cbuffer handling
Initialise the ShaderVariable for the handle to 0xCC
Only memory copy the bytes available (do not assume the source buffer is a multiple of 16 bytes in size)

Fixes non-determinism problem (exposed by root constant buffer of size four bytes)
2025-09-25 17:35:35 +01:00
Jake Turner fa40e51e7d Tweak d3d12_workgroup_zoo : set both root constants for both dispatches 2025-09-25 17:35:35 +01:00
Jake Turner 8ecc23e78d Return 0,0,0,0 when sampling NULL resources in Spirv Shader Debugger 2025-09-25 17:35:35 +01:00
baldurk 4df53b41d3 Delete parents after base objects
* This fixes a potential crash deleting an image view after an image, by
  ensuring a non-owning pointer to the image's resinfo remains valid until after
  the image view is destroyed.
2025-09-25 16:17:46 +01:00
Jake Turner 39c7dc1027 Fix python message handling reading out of bounds read 2025-09-24 15:47:14 +01:00
Jake Turner 8203032ec3 Fix out of bounds writes during spirv debugging
Previously it would allow writes to width/height/depth
2025-09-24 15:46:06 +01:00
Jake Turner da03329b12 Improve handling of NULL resources in Spirv Shader Debugger 2025-09-24 15:35:01 +01:00
Jake Turner 8898fa2e3e Use liveID to find the descriptor buffer resource in shader debug 2025-09-24 15:34:51 +01:00
Jake Turner 668fa75660 Change some asserts to be development only in Spirv Debugger
Asserts used during development of multi-threading and related to the consistency of expected state
2025-09-24 15:31:49 +01:00
Jake Turner 56415992ac Added CHECK_DEBUGGER_THREAD() to Spirv_Debug.cpp
Does nothing in RELEASE, replaces calls to

RDCASSERT(debugger.IsDeviceThread());
2025-09-24 15:29:01 +01:00
Jake Turner 5222954723 Add a lock when simulating Atomic Memory instructions 2025-09-24 15:21:41 +01:00
Jake Turner 234a78ecf2 Remove Vulkan_Hack_EnableGroupCaps 2025-09-24 15:18:14 +01:00
Jake Turner b536bbaf95 Spirv Debugger run jobs in a hot spin loop in a single JobQueue job
Each JobQueue Job runs SimulationJobHelper which is a while loop looking for threads to simulate
2025-09-24 15:14:55 +01:00
Jake Turner e9e081a55f Spirv Debugger run multiple simulation steps per job 2025-09-24 15:08:43 +01:00
Jake Turner d78edcbbea Added Debugger::GetBufferLength() 2025-09-24 15:02:32 +01:00
Jake Turner b9945d563e Active thread runs scope changes on the device thread
Run EnterFunction(), EnterEntryPoint(), ProcessScopeChange() on device thread
2025-09-24 14:59:28 +01:00
Jake Turner 7bdf8a8d88 Make pointer read/write methods return DeviceOpResult
ThreadState

  DeviceOpResult ReadPointerValue(Id pointer, ShaderVariable &ret);

Debugger

  DeviceOpResult ReadFromPointer(const ShaderVariable &ptr, ShaderVariable &ret) const;
  DeviceOpResult GetPointerValue(const ShaderVariable &v, ShaderVariable &ret) const;
2025-09-24 14:52:42 +01:00
Jake Turner 781984703b Change WritePointerValue, WriteThroughPointer to return DeviceOpResult
Mark any pointer writes that require a callback to run on the device thread
2025-09-24 14:50:46 +01:00
Jake Turner d93be6f2b2 Multi-threaded support for SPIRV wrapper APIs ReadTexel, WriteTexel 2025-09-24 14:45:14 +01:00
Jake Turner 8d9bb3f168 Add Spirv Debugger APIs to wrap API Wrapper APIs
The Debugger APIs run on the device thread if required,

FillInputValue(), ReadTexel(), WriteTexel()
2025-09-24 14:38:33 +01:00
Jake Turner 35fdf44c20 Spirv debugger support for queue and run of Simulation on Device Thread 2025-09-24 14:33:01 +01:00
Jake Turner 6e28ff1ca8 Convert Spirv Debugger to run Thread steps via the JobSystem
Enabled by default : config option "Vulkan_Debug_EnableShaderDebugMT"
2025-09-24 14:29:59 +01:00
Jake Turner 94d7f4365d Batch Spirv debugger MathOp and SampleGatherOp GPU operations
Thread Simulation queues MathOp, SampleGatherOp requests and then the Thread is paused.
The Debugger loop processes the MathOp queue, batches MathOps together into a single command list, Submit, Sync.
The Debugger loop processes the SampleGatherOp queue, batches GPU SampleGatherOps together into a single command list, Submit, Sync. Some SampleGatherOps are run on the CPU and do not use the GPU.

When the queued operations are completed, the results are written back into the Thread Simulation and the paused Threads are rerun.
2025-09-24 14:22:04 +01:00
Jake Turner b9d86315ff Change Spirv Shader Debugger steps chunk size to 1,000,000
Helps to reduce the number of replays during shader debugging which helps when captures have non-deterministic replay
2025-09-24 14:18:43 +01:00
Jake Turner f12aa91ba2 Python helpers to generate and check a full trace from shader debug 2025-09-24 14:13:59 +01:00
Jake Turner e6f75e1530 Update Spirv debugger methods to be const methods
Add read/write locking for containers "usedNames" and "dynamicNames"
2025-09-24 14:09:43 +01:00
Jake Turner 64b9e517e0 VK_Shader_Debug_Zoo test of overlapped GPU math and sampling operations 2025-09-24 14:01:47 +01:00
Jake Turner fc2c080a77 Remove unused cycles variable in VK_ShaderDebugZoo 2025-09-24 14:01:30 +01:00
Jake Turner d0d385ceef Use const reference for ShaderBindIndex argument passing 2025-09-24 13:53:56 +01:00
Jake Turner 3b74e038d2 Assert for SPIRV Subgroup Ops that the subgroup is converged 2025-09-24 13:49:51 +01:00
Jake Turner e5121962f3 Spirv Debugger control flow helper variable tweaks
Removed unused mergeBlock
Made control flow variables private with helper methods to get them
2025-09-24 13:46:00 +01:00