The size of some core Gallium state structures has changed so the
padding on some cell structs needed to be adjusted to keep them
a multiple of 16 bytes.
Simply skip cleanup when contexts are still active.
This addresses two issues:
- in some situations the ICD DLL may be unloaded before the DLL that is
using GL contexts is, so we may receive GL calls after stw_cleanup.
- when aborting (exception, or control-c) the contexts may have been left
in an inconsistent state and attempting to destroy can cause
unpredictable results.
Windows doesn't really expect things to fail at this point -- it
will try many times until it finally gives up, worse, something bad
happens.
The WGL state tracker will gracefully decline to do work even when it
is loaded.
It's possible for min_index and max_index to be ~0 if the min/max
values were not actually set or computed in the state tracker.
Skip some assertions in that case.
This only effects the debug build error checking.
(cherry picked from commit 408f32dc16)
saves us a dword in sampler state, hw can't do non-integer aniso degree anyway.
To allow aniso 1x (which seems of dubious value but some hardware (radeons)
have such a mode, and even d3d allows specifiying it) redefine anisotropic
filtering as disabled only if max_anistropy is 0.
Pass either the fbconfig ID or the visual ID, as appropriate, to
CreateContext. Now CreateContext does not derefernce fbconfig or vis
(which no longer exists as a parameter).
For the direct rendering case, the DRI createContext function wants an
fbconfig. When glXCreateContext is called, we have to convert the
visual to an fbconfig. This work was done in CreateContext, but it
makes more sense for it to be done in glXCreateContext.
A long time ago I was a bit over-agressive in refactoring context
creation into a single function. The creation code for
glXImportContextEXT does not belong in CreateContext because it does
not use any GLX protocol. The big if-statement for the import case
routed around almost the entire function anyway.
Passing the opcode directly instead of having CreateContext infer it
from the value of fbconfig and the use_glx_1_3 flag will simplify some
changes that are coming.
It appears that, in spite of what the spec says, the interval
parameter to glXSwapIntervalMESA has been an unsigned int since
day-1. This made the 'if (interval < 0)' test useless. The test is
removed and the spec is updated to note that the interval is an
unsigned value.
The wrapper macro GC_IS_DIRECT is used in CreateContext and a couple
other places to eliminate the need for some of the '#ifdef
GLX_DIRECT_RENDERING' madness. There appear to be a *LOT* of places
in glxcmds.c where '#ifdef GLX_DIRECT_RENDERING' is missing.