From 49d7e48b33264d94e30af6129c281b6acafa9427 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 3 Feb 2011 17:26:02 -0800 Subject: mesa: Add new MESA_multithread_makecurrent extension. 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. --- docs/MESA_multithread_makecurrent.spec | 135 +++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 docs/MESA_multithread_makecurrent.spec (limited to 'docs') diff --git a/docs/MESA_multithread_makecurrent.spec b/docs/MESA_multithread_makecurrent.spec new file mode 100644 index 00000000000..68ade762436 --- /dev/null +++ b/docs/MESA_multithread_makecurrent.spec @@ -0,0 +1,135 @@ +Name + + MESA_multithread_makecurrent + +Name Strings + + GLX_MESA_multithread_makecurrent + +Contact + + Eric Anholt (eric@anholt.net) + +Status + + Not shipping. + +Version + + Last Modified Date: 21 February 2011 + +Number + + TBD + +Dependencies + + OpenGL 1.0 or later is required. + GLX 1.3 or later is required. + +Overview + + The GLX context setup encourages multithreaded applications to + create a context per thread which each operate on their own + objects in parallel, and leaves synchronization for write access + to shared objects up to the application. + + For some applications, maintaining per-thread contexts and + ensuring that the glFlush happens in one thread before another + thread starts working on that object is difficult. For them, + using the same context across multiple threads and protecting its + usage with a mutex is both higher performance and easier to + implement. This extension gives those applications that option by + relaxing the context binding requirements. + + This new behavior matches the requirements of AGL, while providing + a feature not specified in WGL. + +IP Status + + Open-source; freely implementable. + +Issues + + None. + +New Procedures and Functions + + None. + +New Tokens + + None. + +Changes to Chapter 3 of the GLX 1.3 Specification (Functions and Errors) + + Remove the following sentence from section 3.3.7 Rendering Contexts: + If ctx is current to some other thread, then + glXMakeContextCurrent will generate a BadAccess error. + + Remove the following sentence from section 3.5 Rendering Contexts: + If ctx is current to some other thread, then + glXMakeCurrent will generate a BadAccess error. + +GLX Protocol + + None. The GLX extension is client-side. + +Errors + + None. + +New State + + None. + +Issues + + (1) What happens if the app binds a context/drawable in multiple + threads, then binds a different context/thread in one of them? + + As with binding a new context from the current thread, the old + context's refcount is reduced and the new context's refcount is + increased. + + (2) What happens if the app binds a context/drawable in multiple + threads, then binds None/None in one of them? + + The GLX context is unreferenced from that thread, and the other + threads retain their GLX context binding. + + (3) What happens if the app binds a context/drawable in 7 threads, + then destroys the context in one of them? + + As with GLX context destruction previously, the XID is destroyed + but the context remains usable by threads that have the context + current. + + (4) What happens if the app binds a new drawable/readable with + glXMakeCurrent() when it is already bound to another thread? + + The context becomes bound to the new drawable/readable, and + further rendering in either thread will use the new + drawable/readable. + + (5) What requirements should be placed on the user managing contexts + from multiple threads? + + The intention is to allow multithreaded access to the GL at the + minimal performance cost, so requiring that the GL do general + synchronization (beyond that already required by context sharing) + is not an option, and synchronizing of GL's access to the GL + context between multiple threads is left to the application to do + across GL calls. However, it would be unfortunate for a library + doing multithread_makecurrent to require that other libraries + share in synchronization for binding of their own contexts, so the + refcounting of the contexts is required to be threadsafe. + +Revision History + + 20 November 2009 Eric Anholt - initial specification + 22 November 2009 Eric Anholt - added issues from Ian Romanick. + 3 February 2011 Eric Anholt - updated with resolution to issues 1-3 + 3 February 2011 Eric Anholt - added issue 4, 5 + 21 February 2011 Eric Anholt - Include glXMakeCurrent() sentence + along with glXMakeContextCurrent() for removal. -- cgit v1.2.3 From 5f889c5bf5221f2af2f34e47f20bd1b98c061fbe Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 24 Feb 2011 15:25:59 -0800 Subject: glx: Adjust the MESA_multithread_makecurrent spec to match implementation. This came out of discussion at the office today, and we agreed that solving this for indirect wasn't really interesting, though the server-side change would be of a similar level of difficulty. --- docs/MESA_multithread_makecurrent.spec | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'docs') diff --git a/docs/MESA_multithread_makecurrent.spec b/docs/MESA_multithread_makecurrent.spec index 68ade762436..5065c2fc0a3 100644 --- a/docs/MESA_multithread_makecurrent.spec +++ b/docs/MESA_multithread_makecurrent.spec @@ -61,19 +61,37 @@ New Tokens None. +Changes to Chapter 2 of the GLX 1.3 Specification (Functions and Errors) + + Replace the following sentence from section 2.2 Rendering Contexts: + In addition, a rendering context can be current for only one + thread at a time. + with: + In addition, an indirect rendering context can be current for + only one thread at a time. A direct rendering context may be + current to multiple threads, with synchronization of access to + the context thruogh the GL managed by the application through + mutexes. + Changes to Chapter 3 of the GLX 1.3 Specification (Functions and Errors) - Remove the following sentence from section 3.3.7 Rendering Contexts: + Replace the following sentence from section 3.3.7 Rendering Contexts: If ctx is current to some other thread, then glXMakeContextCurrent will generate a BadAccess error. + with: + If ctx is an indirect context current to some other thread, + then glXMakeContextCurrent will generate a BadAccess error. - Remove the following sentence from section 3.5 Rendering Contexts: + Replace the following sentence from section 3.5 Rendering Contexts: If ctx is current to some other thread, then glXMakeCurrent will generate a BadAccess error. + with: + If ctx is an indirect context current to some other thread, + then glXMakeCurrent will generate a BadAccess error. GLX Protocol - None. The GLX extension is client-side. + None. The GLX extension only extends to direct rendering contexts. Errors @@ -125,6 +143,11 @@ Issues share in synchronization for binding of their own contexts, so the refcounting of the contexts is required to be threadsafe. + (6) Does this apply to indirect contexts? + + This was ignored in the initial revision of the spec. Behavior + for indirect contexts is left as-is. + Revision History 20 November 2009 Eric Anholt - initial specification -- cgit v1.2.3 From e107a3aa08cc3106fd7b939ea203c4b5195f1b5b Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 28 Feb 2011 13:43:32 +1000 Subject: rgtc: update docs --- docs/GL3.txt | 2 +- docs/relnotes-7.11.html | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/GL3.txt b/docs/GL3.txt index 9ff25a95297..0c53bc42d54 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -27,7 +27,7 @@ Non-normalized Integer texture/framebuffer formats ~50% done 1D/2D Texture arrays core Mesa, swrast done Packed depth/stencil formats DONE Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE -GL_EXT_texture_compression_rgtc not started +GL_EXT_texture_compression_rgtc DONE (swrast, gallium r600) Red and red/green texture formats DONE (swrast, i965, gallium) Transform feedback (GL_EXT_transform_feedback) ~50% done glBindFragDataLocation, glGetFragDataLocation, diff --git a/docs/relnotes-7.11.html b/docs/relnotes-7.11.html index 6c6622ed3f4..4b1730b17ec 100644 --- a/docs/relnotes-7.11.html +++ b/docs/relnotes-7.11.html @@ -38,6 +38,7 @@ tbd
  • GL_ARB_draw_instanced extension (gallium drivers, swrast)
  • GL_ARB_instanced_arrays extension (gallium drivers) +
  • GL_ARB_texture_compression_rgtc (gallium r600, swrast)
  • GL_ARB_draw_buffers_blend (gallium)
  • GL_EXT_texture_sRGB_decode (gallium drivers, swrast, i965)
-- cgit v1.2.3