* This is better than testing by platform/platform version, because we can check
specifically for extensions and avoid running a test we know will fail because
extensions aren't supported.
* Instead of only doing a very lightweight check to see if the API is available
up-front, we now share the API initialisation among all API tests far enough
to determine availability of extensions, features, etc. Then we can precisely
determine which tests are available and which aren't before running.
* This is required because we add MAP_READ_BIT and the spec doesn't allow maps
that are both unsynchronized and reading.
* Also add a test for unsynchronised persistent maps, and update the
GL_Buffer_Updates test to not require a reference image but check each quad
individually for the expected colour.
* This is primarily for the benefit of GL/VK where we need to feature-detect for
some extensions or functionality that requires selecting a device, e.g. D3D12
can be more easily detected with a quick check.
* We'll run this once and cache the results when running tests from python so we
can do a better job of filtering out tests that the current machine doesn't
support.
* This is primarily around initial states - either a resource which is from a
previous frame and maybe wasn't dirtied and needs initial states created for
it when it's modified mid-frame, or a resource that's created and destroyed
all within one frame.
* This is useful when writing automated tests that want to test the output of
rendering which only happens to outputs, such as mesh rendering, or could
potentially be bypassed with direct readback like GetTextureData vs rendering
a texture.
* This suppresses the use of a global try/except to catch exceptions then log &
continue. Instead it runs the test and lets the debugger catch any exceptions
that happen.
* This is a simple test using descriptor indexing in fragment and compute
shaders, with sampled images and storage buffers, including passing bindless
arrays through functions to be sure that's tracked properly.
* There's also a define to turn on a reasonably bad case (though not
worst/extreme) of # of descriptors - roughly 5 million descriptors allocated
in total, with roughly 1 million bound at draw time.
* The extension is not yet whitelisted as there is no solution currently for
feedback on used bindings or handling of pointers in data structures within
the UI or shader reflection.