* This will rarely be relevant, but it ensures if the function is decref'd and
the lambda is still alive, that we keep the python object alive until we are
done with it. The primary case for this is persistent callbacks where the
module is then reloaded.
When selecting "Quad Overdraw (Pass)" from the texture viewer, I get this warning :
Log - Got a Debug message from GL_DEBUG_SOURCE_API, type GL_DEBUG_TYPE_ERROR, ID 81, severity GL_DEBUG_SEVERITY_HIGH:
'GL_INVALID_OPERATION in glUniform1("overdrawImage"@12 is image, not uint)'
The OpExecutionMode entries were being left in place, but pointing
to functions which are no longer entry points. This caused the GPU
driver to crash (probably trying to look it up).
At this point we don't have Intel GL counters. But the current logic
assumes there is only AMD ones (and that if it's not AMD's, it must be
the generic ones).
A missing \n was triggering a compile error for example :
#extension GL_ARB_shader_storage_buffer_object : require#define SHADER_RESTYPE 1
#define UINT_TEX 0
* Someone encountered miscompiled SPIR-V such that 1.1, 2.2 etc were compiled to
1.0, 2.0. I couldn't reproduce it and I don't know how glslang would
miscompile, but this workaround is at least safe to apply.
* When flattening array slices or remapping to a cube cruciform, we can remap to
RGBA32 when the output format is itself greater than 8bpp, to ensure we don't
lose quality before output.
* For pipelines using tessellation or containing a geometry shader we use
transform feedback to fetch the output of the vertex pipeline after these
stages.
* This self-insertion has the same kind of problem as overlapping ranges in
memcpy, the act of inserting items can affect the input range by shifting
things around. For inserting a single object we just copy it, for inserting a
range we duplicate the whole array and then do the insert from the old range
(and destruct it).
* Clearly this is not the most efficient implementation, a better solution would
be to append onto the existing array (potentially not even reallocating then)
and doing a rotate/shift in place.