* If BDA capture/replay is not supported we patched the feature query for the
vulkan 1.2 struct, but if an application used the promoted KHR extension
struct we weren't patching that because it was previously invalid to query on
the extension itself.
This test renders a small triangle that casts a shadow from a point light, onto a larger triangle. The test runner then checks that various pixels in the final output are the correct colour.
There is also an arbitrary AS copy in the render loop just to hit more API coverage when manually capturing, but the test runner doesn't check its output.
Core test work originally done by martyn.jacques@arm.com
* As the aftermath headers can't be distributed currently this requires putting
those headers in the right place. Then the resulting build can load the
aftermath dll if it exists in the plugins folder.
* Otherwise such an invoke could delete untagged events out of the queue which
is definitely not what we want. Where is my draw? was doing this and it caused
internal untagged events which must not be dropped to be removed.
Support the case where cbuffer load is out of bounds from the declared constant buffer structure but within bounds of the attached data i.e. shader reads outside of array bounds
Moved memory tracking into struct MemoryTracking
Global variables go into global memory
All threads memory tracking is populated with global memory tracking
Treated as nops by the debugger and disassembler
Extended Function call classification to support LLVM intrinsics
Renamed enum LLVMDbgOp -> LLVMIntrinsicOp
Extended the enum to handle LLVM intrinsics:
* llvm.lifetime.start
* llvm.lifetime.end
* llvm.invariant.start
* llvm.invariant.end
* This requires setting vmaBDA to true, which is opt-in as it applies
universally to all memory allocations in the test. We don't know if there are
driver impacts from enabling BDA and it may also mess with our tests.
* Apparently the spec allows drivers to do extremely stupid things with
swapchain images and return them even when it's not valid for you to use them
yet because last frame's work to the image is still ongoing, which leads to a
validation warning about using a semaphore when it might technically still be
in flight.
* To get around this because AcquireNextImage doesn't actually block until an
image is ready inspite of having a timeout and being expected to return a
usable image it doesn't, we use a manual fence to do what AcquireNextImage
should be doing.
Highlight that the SSA value used as the phi result is captured from the block branched from, not the SSA value in the current block
i.e.
_label7: // preceded by _label9, _label6
float _375 = phi float [ _label9::_404, _label9 ], [ 1.00000, _label6 ];
float _376 = phi float [ _label9::_375, _label9 ], [ 1.00000, _label6 ];
Step over nop instructions when entering a function
Step over nop instructions after a simulation step
Changed ThreadsAreConverged() -> ThreadsAreDiverged()