summaryrefslogtreecommitdiffstats
path: root/src/glx/glxcurrent.c
Commit message (Collapse)AuthorAgeFilesLines
* Revert "glx: Lift sending the MakeCurrent request to top-level code"Adam Jackson2019-09-261-164/+50
| | | | | | | | | Apparently this provokes crashes elsewhere in code unrelated to MakeCurrent. I hate GLX so very very much. This reverts commit 999c2aed8826f403b071f52b040ce25b56d35f9d. Gitlab: https://gitlab.freedesktop.org/mesa/mesa/issues/1207
* glx: Lift sending the MakeCurrent request to top-level codeAdam Jackson2019-09-231-50/+164
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Somewhat terrifyingly, we never sent this for direct contexts, which means the server never knew the context/drawable bindings. To handle this sanely, pull the request code up out of the indirect backend, and rewrite the context switch path to call it as appropriate. This attempts to preserve the existing behavior of not calling unbind() on the context if its refcount would not drop to zero. Of course, you can't just do this indiscriminately, because this is GLX and extant X servers have bugs and everything is terrible. To wit: - For 1.20.x prior to 1.20.6, you can bind a direct context once, but the second time you try to modify the context's binding you will get GLXBadContextTag. This includes unbinding the context. And "deleting" the context will leak memory, because it will still appear to be current. - For 1.19 and earlier, glXMakeCurrent(dpy, None, ctx) should be legal for GL 3.0+ contexts, but the server will throw BadMatch. To guard against this, we only send the request for indirect contexts unless the server is known good, and only mention one context at a time in such a request; if switching between contexts, we first unbind the old, and then bind the new. Note that the second VendorRelease() version is to catch XFree86 4.x and Xorg [67].x, which almost certainly have the above bugs. Other servers might report different version numbers here, but we can't do direct rendering against them, so this should be safe. Fixes glx-make-context, glx-multi-window-single-context and glx-query-drawable-glx_fbconfig_id-window. Sufficiently old piglit will regress on glx-make-glxdrawable-current (throwing BadMatch), which is fixed by mesa/piglit!116.
* glx: Move vertex array protocol state into the indirect backendAdam Jackson2019-09-231-12/+0
| | | | | Only relevant for indirect contexts, so let's get that code out of the common path.
* mesa: Rename GLX_USE_TLS to USE_ELF_TLS.Bas Nieuwenhuizen2019-08-031-2/+2
| | | | | | | These days it is not GLX only and it does not work with all TLS implementations. Reviewed-by: Eric Engestrom <[email protected]>
* glx: Don't allow glXMakeContextCurrent() with only one valid drawableAdam Jackson2018-07-091-0/+7
| | | | | | | | Drawable and readable need to either both be None or both be non-None. Cc: <[email protected]> Signed-off-by: Adam Jackson <[email protected]> Reviewed-by: Eric Anholt <[email protected]>
* glx: Use __glXSendError instead of open-coding itAdam Jackson2017-12-011-17/+3
| | | | | | | | This also fixes a bug, the error path through MakeCurrent didn't translate the error code by the extension's error base. Signed-off-by: Adam Jackson <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
* glx: Call __glXInitVertexArrayState() with a usable gc.Colin McDonald2016-07-081-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For each indirect context the indirect vertex array state must be initialised by __glXInitVertexArrayState in indirect_vertex_array.c. As noted in the routine header it requires that the glx context has been setup prior to the call, in order to test the server version and extensions. Currently __glXInitVertexArrayState is called from indirect_bind_context in indirect_glx.c, as follows: state = gc->client_state_private; if (state->array_state == NULL) { glGetString(GL_EXTENSIONS); glGetString(GL_VERSION); __glXInitVertexArrayState(gc); } But, the gc context is not yet usable at this stage, so the server queries fail, and __glXInitVertexArrayState is called without the server version and extension information it needs. This breaks multi-texturing as glXInitVertexArrayState doesn't get GL_MAX_TEXTURE_UNITS. It probably also breaks setup of other arrays: fog, secondary colour, vertex attributes. To fix this I have moved the call to __glXInitVertexArrayState to the end of MakeContextCurrent in glxcurrent.c, where the glx context is usable. Fixes a regression caused by commit 4fbdde889c. Fixes ARB_vertex_program usage in the arbvparray Mesa demo when run with indirect GLX and also the tex-skipped-unit piglit test when run with indirect GLX. Reviewed-by: Matt Turner <[email protected]> Acked-by: Ian Romanick <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61907
* glx: Implement the libglvnd interface.Kyle Brenneman2016-05-301-5/+5
| | | | | | | | | | | | | | | | With reference to the libglvnd branch: https://cgit.freedesktop.org/mesa/mesa/log/?h=libglvnd This is a squashed commit containing all of Kyle's commits, all but two of Emil's commits (to follow), and a small fixup from myself to mark the rest of the glX* functions as _GLX_PUBLIC so they are not exported when building for libglvnd. I (ajax) squashed them together both for ease of review, and because most of the changes are un-useful intermediate states representing the evolution of glvnd's internal API. Co-author: Emil Velikov <[email protected]> Reviewed-by: Adam Jackson <[email protected]>
* glx: remove support for non-multithreaded platformsEmil Velikov2015-03-111-11/+0
| | | | | | | | | Implicitly required for a while, although commit 9385c592c68 (mapi: remove u_thread.h) was the one that put the final nail on the coffin. Signed-off-by: Emil Velikov <[email protected]> Reviewed-by: Brian Paul <[email protected]>
* glx: remove final reference to THREADSEmil Velikov2015-03-111-4/+0
| | | | | | | | Left over from commit 18db13f5865(mapi: THREADS was always defined, remove it) Signed-off-by: Emil Velikov <[email protected]> Reviewed-by: Brian Paul <[email protected]>
* Revert "glx: remove final reference to THREADS"Emil Velikov2015-03-061-0/+4
| | | | | | This reverts commit 8b15a883e0ba72c9156d7192a798bb272e0bc528. Not meant to go in yet. Lacking review.
* Revert "glx: remove support for non-multithreaded platforms"Emil Velikov2015-03-061-0/+11
| | | | | | This reverts commit 38591295cd4b68f89f257b20f476f98de3772a47. Not meant to go in yet. Lacking review.
* glx: remove support for non-multithreaded platformsEmil Velikov2015-03-061-11/+0
| | | | | | | | Implicitly required for a while, although commit 9385c592c68 (mapi: remove u_thread.h) was the one that put the final nail on the coffin. Signed-off-by: Emil Velikov <[email protected]>
* glx: remove final reference to THREADSEmil Velikov2015-03-061-4/+0
| | | | | | | Left over from commit 18db13f5865(mapi: THREADS was always defined, remove it) Signed-off-by: Emil Velikov <[email protected]>
* Fix build of appleglxJon TURNEY2014-05-231-6/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Define GLX_USE_APPLEGL, as config/darwin used to, to turn on specific code to use the applegl direct renderer Convert src/glx/apple/Makefile to automake Since the applegl libGL is now built by linking libappleglx into libGL, rather than by linking selected files into a special libGL: - Remove duplicate code in apple/glxreply.c and apple/apple_glx.c. This makes apple/glxreply.c empty, so remove it - Some indirect rendering code is already guarded by !GLX_USE_APPLEGL, but we need to add those guards to indirect_glx.c, indirect_init.c (via it's generator), render2.c and vertarr.c so they don't generate anything Fix and update various includes glapi_gentable.c (which is only used on darwin), should be included in shared glapi as well, to provide _glapi_create_table_from_handle() Note that neither swrast nor indirect is supported in the APPLEGL path at the moment, which makes things more complex than they need to be. More untangling is needed to allow that v2: Correct apple/Makefile.am for srcdir != builddir Signed-off-by: Jon TURNEY <[email protected]> Reviewed-by: Jeremy Huddleston Sequoia <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
* mesa: remove remaining uses of _glthread_GetID()Brian Paul2014-03-051-10/+0
| | | | | | | | | | | | | | | It was really only used in the radeon driver for a debug printf. And evidently, libGL.so referenced it just to work around some sort of linker issue. This patch removes the two calls to the function and the function itself. Fixes undefined _glthread_GetID symbol in libGL reported by 'nm'. Though, the missing symbol doesn't cause any issues on my system but it does cause glxinfo to fail on one of our test systems. Reviewed-by: Jose Fonseca <[email protected]>
* glx: Generate fewer errors in MakeContextCurrentAdam Jackson2013-10-081-10/+0
| | | | | | | | | | | | | | | | | | For a few reasons. 1: In the (current) common case, these conditionals are never true. All we're doing by checking them is slowing down MakeCurrent. The server does these checks already anyway. 2: GLX >= 3.0 contexts may legally be made current without a bound framebuffer. This does not fix piglit/glx-create-context-current-no-framebuffer, but is a prerequisite for fixing it. Cc: "9.1 9.2" <[email protected]> Reviewed-by: Brian Paul <[email protected]> Signed-off-by: Adam Jackson <[email protected]>
* build: Use AX_PTHREAD's HAVE_PTHREAD preprocessor definitionMatt Turner2012-10-011-2/+2
|
* glx: Fix compile.Stéphane Marchesin2011-06-201-1/+1
|
* glx: Bind to our context before __glXSetCurrentContextJeremy Huddleston2011-06-201-9/+16
| | | | | | | We want to bind to our context before calling __glXSetCurrentContext or messing with the gc rect in order to properly handle error conditions. Signed-off-by: Jeremy Huddleston <[email protected]>
* glx: Destroy the old context only after the new one has been boundJeremy Huddleston2011-06-201-7/+7
| | | | | | This fixes a regression introduced by 49d7e48b33264d94e30af6129c281b6acafa9427 Signed-off-by: Jeremy Huddleston <[email protected]>
* glx: implement drawable refcounting.Stéphane Marchesin2011-06-171-7/+7
| | | | | | | | | | | | The current dri context unbind logic will leak drawables until the process dies (they will then get released by the GEM code). There are two ways to fix this: either always call driReleaseDrawables every time we unbind a context (but that costs us round trips to the X server at getbuffers() time) or implement proper drawable refcounting. This patch implements the latter. Signed-off-by: Antoine Labour <[email protected]> Signed-off-by: Stéphane Marchesin <[email protected]> Reviewed-by: Adam Jackson <[email protected]>
* glx: Remove some GLX_USE_APPLEGL guards around glapiJeremy Huddleston2011-06-081-7/+3
| | | | | | Now that we're using glapi, we don't need some GLX_USE_APPLEGL ifdef-foo Signed-off-by: Jeremy Huddleston <[email protected]>
* glx: Dead code removalJeremy Huddleston2011-06-051-2/+0
| | | | | | Remove a redundant ifndef GLX_USE_APPLEGL Signed-off-by: Jeremy Huddleston <[email protected]>
* apple: ifdef out come glapi-foo on darwinJeremy Huddleston2011-06-051-0/+4
| | | | Signed-off-by: Jeremy Huddleston <[email protected]>
* glx: fix null pointer deref in __glXGenerateError()Brian Paul2011-03-101-5/+5
| | | | | | | | | | The gc var would be NULL if called from line 238. Instead, get the opcode from __glXSetupForCommand(dpy) as done in other places. And remove the unused gc parameter. Fixes a bug reported by "John Doe" on 3/9/2011. NOTE: This is a candidate for the 7.10 branch.
* mesa: Add new MESA_multithread_makecurrent extension.Eric Anholt2011-02-261-22/+33
| | | | | | | This extension allows a client to bind one context in multiple threads simultaneously. It is then up to the client to manage synchronization of access to the GL, just as normal multithreaded GL from multiple contexts requires synchronization management to shared objects.
* glx: Optimize out no-op make current callsKristian Høgsberg2010-09-091-0/+4
| | | | | This make a lot more sense now that we might have to recreate the glx drawables for legacy code paths.
* glx: Fix use after free problemKristian Høgsberg2010-09-081-6/+7
|
* glx: Drop broken drawable garbage collectionKristian Høgsberg2010-09-081-3/+3
| | | | | | Doesn't work for pixmaps, was looking up the GLX XID and was never thread safe. Instead, just destroy the client side structures when the drawable is no long current for a context.
* glx: Set an all NULL vtable for dummyContextKristian Høgsberg2010-09-071-1/+2
| | | | | | This reverts 6a6e6d7b0a84e20f9754af02a575ae34081d310c and initializes dummyContext with an all NULL vtable. The context vtable pointer is supposed to always be non-NULL, but the vtable entries can be NULL.
* glx: Compare old ctx against dummyCtx, not NULLKristian Høgsberg2010-07-291-1/+1
| | | | https://bugs.freedesktop.org/show_bug.cgi?id=29302
* glx: Split indirect and applegl implementations into different filesKristian Høgsberg2010-07-281-147/+0
|
* glx: Move bind and unbind to context vtableKristian Høgsberg2010-07-281-172/+74
|
* glx: Rename __GLXcontext and __GLXdisplayPrivate to struct types.Kristian Høgsberg2010-07-281-16/+18
|
* glx: Rename __GLXscreenConfigs to struct glx_screenKristian Høgsberg2010-07-281-2/+2
| | | | Because double underscores in private type names is painful.
* glx: Use _X_EXPORT instead of our own PUBLIC macroKristian Høgsberg2010-07-281-5/+5
| | | | We're an X client library, so we can use Xfuncproto.h.
* glx: Rename __GLcontextModes to struct glx_configKristian Høgsberg2010-07-281-1/+1
| | | | | With this rename, we use 'config' consitently to refer to GLX configurations instead of the modes/configs/visual mess before.
* glx: Move context destroy to context vtableKristian Høgsberg2010-07-231-21/+2
|
* glx: Allocate the __GLXcontext in the DRI driversKristian Høgsberg2010-07-221-5/+3
|
* glx: Move drawHash to display privateKristian Høgsberg2010-07-191-3/+3
| | | | | The XIDs are display wide so the natural location of the hash is here. This way we don't have to lookup in each of the screen hashes.
* glx: Add screen privates for dri drivers and moved some fields thereKristian Høgsberg2010-07-191-1/+1
| | | | | | GLXscreenConfigs is badly named and a dumping ground for a lot of stuff. This patch creates private screen structs for the dri drivers and moves some of their fields over there.
* apple: Change ifdefs for DRI to be DRI && !APPLEJeremy Huddleston2010-04-271-10/+10
| | | | Signed-off-by: Jeremy Huddleston <[email protected]>
* apple: Initial import of libGL for OSX from AppleSGLX svn repository.Jeremy Huddleston2010-04-271-5/+48
| | | | Signed-off-by: Jeremy Huddleston <[email protected]>
* Revert accidental commits from the xquartz treeJeremy Huddleston2010-04-011-56/+13
| | | | | | | | | | | This reverts commit 9aadc793f3db64cefa0b08f18abad424a659dacc. This reverts commit 69ea4e7718efb60b6b0d795a355cebd6712ceac1. This reverts commit dbe8b013936d977ec63d6607bfd2fc6772d29787. This reverts commit 23215ef4d60a86d9f3b3fdc08e3fdadc59e98890. This reverts commit 9495e3703062d1ddaf3161f4efc23f0b51284d9b. This reverts commit 0594cf70883b64692ba617d85f4f9b4e636e5c2b. This reverts commit 86a7978d37393ee34f876569ac06ffdb8d7289ae. This reverts commit 437902ce978cde9a0e1aa260f12dc232a8501c42.
* apple: Change ifdefs for DRI to be DRI && !APPLEJeremy Huddleston2010-04-011-10/+10
| | | | Signed-off-by: Jeremy Huddleston <[email protected]>
* apple: Initial import of libGL for OSX from AppleSGLX svn repository.Jeremy Huddleston2010-04-011-5/+48
| | | | Signed-off-by: Jeremy Huddleston <[email protected]>
* Retire miniglx and move the actual glx code up to src/glxKristian Høgsberg2010-02-091-0/+513