GPUOpen-Tools / GPU-Reshape

GPU Reshape (GRS) is an API & vendor agnostic instrumentation framework, with instruction level validation.
Other
374 stars 12 forks source link

[Vulkan] debug build crashes the application #29

Closed aurolou closed 8 months ago

aurolou commented 1 year ago

When I have a debug build of GPUReshape running with discoverability enabled, my Vulkan application crashes with following callstack:

Crash detected, current frames: [00007FFC9DA4BDD0] DebugBreak C:\Windows\System32\KERNELBASE.dll [00007FFBBA43D92B] Hook_vkGetDeviceProcAddr D:\Tools\GPU Reshape\23-6-28\artifacts-debug\Bin\MSVC\Debug\GRS.Backends.Vulkan.Layer.dll [00007FFBBA43D92B] Hook_vkGetDeviceProcAddr D:\Tools\GPU Reshape\23-6-28\artifacts-debug\Bin\MSVC\Debug\GRS.Backends.Vulkan.Layer.dll [00007FFBBA43D92B] Hook_vkGetDeviceProcAddr [00007FFBBA43D92B] Hook_vkGetDeviceProcAddr [00007FFBBA43D92B] Hook_vkGetDeviceProcAddr [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC0D63EAF0] vkDestroyDescriptorPool [00007FFC9F792690] BaseThreadInitThunk [00007FFCA034A9D0] RtlUserThreadStart

Waiting for debugger to attach...

This does not happen with the release build of GPUReshape. Also note, that at this point I have not added the Vulkan application to my workspace nor instrumented anything. Are there any validation layers enabled in debug mode that are not enabled in release mode?

miguel-petersen commented 1 year ago

Hi Lou,

There should be no differences between the debug / release Vulkan layer in terms of what's injected and what's not. However, the callstack above seems indicative of an assert of mine hitting, so it's catching something bad. Anything in the output log?

aurolou commented 1 year ago

Callstack from GPUReshape:

KernelBase.dll!00007ffd6577bdd2() Unknown GRS.Backends.Vulkan.Layer.dll!Detail::Break(const char message) Line 52 C++ GRS.Backends.Vulkan.Layer.dll!PhysicalResourceMappingTable::Defragment() Line 305 C++ GRS.Backends.Vulkan.Layer.dll!PhysicalResourceMappingTable::Update(VkCommandBuffer_T commandBuffer) Line 217 C++ GRS.Backends.Vulkan.Layer.dll!ShaderExportStreamer::RecordPreCommandBuffer(ShaderExportQueueState state, ShaderExportStreamSegment segment) Line 693 C++ GRS.Backends.Vulkan.Layer.dll!Hook_vkQueueSubmit(VkQueue_T queue, unsigned int submitCount, const VkSubmitInfo pSubmits, VkFence_T * userFence) Line 181 C++

It's hitting the ASSERT in PhysicalResourceMappingTable::Defragment(), line 302. liveHead = 56 liveSegmentCount = 57

miguel-petersen commented 1 year ago

Ah it's the defragmentation that fails, that can lead to a heap of false positives. Thanks!

I assume this is a NDA'd application, and not something public?

aurolou commented 1 year ago

It's the game Strange Brigade, Vulkan version.

miguel-petersen commented 8 months ago

Would it be possible to test against latest?

Descriptor defragmentation issues should be fixed now.