[Mesa-dev] [PATCH 2/3] mesa: enable ARB_texture_buffer_* extensions in the Compatibility profile

Marek Olšák maraeo at gmail.com
Thu Nov 2 17:18:09 UTC 2017


One possibility would be to discard each hunk in each patch until you
find the problematic one. It might be a bug in i965 that was just
uncovered and fixing it might be non-trivial. For example,
set_max_gl_versions in i965 doesn't allow creating GL 4.6 contexts
directly, but there might be more.

The bottom line is that the environment variables are not guaranteed
to work in all cases (they are hacks) and I wouldn't like to block the
series because of them.

Marek

On Thu, Nov 2, 2017 at 2:07 AM, Mark Janes <mark.a.janes at intel.com> wrote:
> The FC suffix does not help.  We are testing openglcts from
> opengl-cts-4.6.0 branch of gitlab.khronos.org:Tracker/vk-gl-cts.git:
>
> d6144a989       Fix attribute mapping in enhanced layouts tests for input arrays
>
>     MESA_GLES_VERSION_OVERRIDE=3.2 MESA_GLSL_VERSION_OVERRIDE=460 MESA_GL_VERSION_OVERRIDE=4.6FC ./glcts --deqp-runmode=xml-caselist
>     Writing test log into TestResults.qpa
>     dEQP Core git-d6144a989937b2829a9fc9813de994c4f514ebae (0xd6144a98) starting..
>       target implementation = 'X11 EGL'
>     Writing test cases from 'CTS-Configs' to file 'CTS-Configs-cases.xml'..
>     Writing test cases from 'dEQP-EGL' to file 'dEQP-EGL-cases.xml'..
>     Writing test cases from 'KHR-GLES2' to file 'KHR-GLES2-cases.xml'..
>     Writing test cases from 'dEQP-GLES2' to file 'dEQP-GLES2-cases.xml'..
>     Writing test cases from 'KHR-GLES3' to file 'KHR-GLES3-cases.xml'..
>     Writing test cases from 'dEQP-GLES3' to file 'dEQP-GLES3-cases.xml'..
>     Writing test cases from 'dEQP-GLES31' to file 'dEQP-GLES31-cases.xml'..
>     Writing test cases from 'KHR-GLES31' to file 'KHR-GLES31-cases.xml'..
>     Writing test cases from 'KHR-GLESEXT' to file 'KHR-GLESEXT-cases.xml'..
>     Writing test cases from 'KHR-GLES32' to file 'KHR-GLES32-cases.xml'..
>     Writing test cases from 'KHR-NoContext' to file 'KHR-NoContext-cases.xml'..
>     Writing test cases from 'KHR-GL30' to file 'KHR-GL30-cases.xml'..
>     Writing test cases from 'KHR-GL31' to file 'KHR-GL31-cases.xml'..
>     FATAL ERROR: Failed to initialize dEQP: Got EGL_BAD_MATCH: eglCreateContext() at egluGLUtil.cpp:198
>     ERROR: command failed
>
> Marek Olšák <maraeo at gmail.com> writes:
>
>> This should work (I added "FC" at the end):
>>
>> MESA_GLSL_VERSION_OVERRIDE=460 MESA_GL_VERSION_OVERRIDE=4.6FC
>>
>> Marek
>>
>> On Wed, Nov 1, 2017 at 11:16 PM, Mark Janes <mark.a.janes at intel.com> wrote:
>>> Mark Janes <mark.a.janes at intel.com> writes:
>>>
>>>> Marek Olšák <maraeo at gmail.com> writes:
>>>>
>>>>> Hi Mark,
>>>>>
>>>>> Can you try the attached patches instead?
>>>>
>>>> After talking with Ken and Dylan, I realize that I missed a one-line
>>>> patch from your thread with my last test (Oct 25 patch to
>>>> intel_extensions.c).  With that patch, there are no regressions in CI.
>>>>
>>>> I'm testing the attached patches as well.
>>>
>>> With the most recent patches, I'm unable to run the GL CTS 4.6:
>>>
>>>     MESA_GLSL_VERSION_OVERRIDE=460 MESA_GL_VERSION_OVERRIDE=4.6 ./glcts --deqp-runmode=xml-caselist
>>>     Writing test log into TestResults.qpa
>>>     dEQP Core git-d6144a989937b2829a9fc9813de994c4f514ebae (0xd6144a98) starting..
>>>       target implementation = 'X11 EGL'
>>>     Writing test cases from 'CTS-Configs' to file 'CTS-Configs-cases.xml'..
>>>     Writing test cases from 'dEQP-EGL' to file 'dEQP-EGL-cases.xml'..
>>>     Writing test cases from 'KHR-GLES2' to file 'KHR-GLES2-cases.xml'..
>>>     Writing test cases from 'dEQP-GLES2' to file 'dEQP-GLES2-cases.xml'..
>>>     Writing test cases from 'KHR-GLES3' to file 'KHR-GLES3-cases.xml'..
>>>     Writing test cases from 'dEQP-GLES3' to file 'dEQP-GLES3-cases.xml'..
>>>     Writing test cases from 'dEQP-GLES31' to file 'dEQP-GLES31-cases.xml'..
>>>     Writing test cases from 'KHR-GLES31' to file 'KHR-GLES31-cases.xml'..
>>>     Writing test cases from 'KHR-GLESEXT' to file 'KHR-GLESEXT-cases.xml'..
>>>     Writing test cases from 'KHR-GLES32' to file 'KHR-GLES32-cases.xml'..
>>>     Writing test cases from 'KHR-NoContext' to file 'KHR-NoContext-cases.xml'..
>>>     Writing test cases from 'KHR-GL30' to file 'KHR-GL30-cases.xml'..
>>>     Writing test cases from 'KHR-GL31' to file 'KHR-GL31-cases.xml'..
>>>     FATAL ERROR: Failed to initialize dEQP: Got EGL_BAD_MATCH: eglCreateContext() at egluGLUtil.cpp:198
>>>
>>> piglit, deqp, and gles-cts encountered no regressions.
>>>
>>>>> Thanks,
>>>>> Marek
>>>>>
>>>>> On Wed, Nov 1, 2017 at 9:49 PM, Mark Janes <mark.a.janes at intel.com> wrote:
>>>>>> Dylan Baker <dylan at pnwbakers.com> writes:
>>>>>>
>>>>>>> I haven't run the CTS tests, but both the deqp and the piglit test pass on my
>>>>>>> skl with Marek's patches applied.
>>>>>>
>>>>>> I must have tested with only the patch 2 applied.  Running with all
>>>>>> three patches in the series, I see no piglit/deqp regressions.
>>>>>>
>>>>>> However, GLES CTS fails thousands of ES31-CTS.functional.texture tests,
>>>>>> eg:
>>>>>>
>>>>>> ES31-CTS.functional.texture.format.buffer.rg8i_npot
>>>>>> glGetIntegerv() failed: glGetError() returned GL_INVALID_ENUM at gluContextInfo.cpp:229
>>>>>>
>>>>>> -Mark
>>>>>>
>>>>>>>
>>>>>>> Dylan
>>>>>>>
>>>>>>> Quoting Marek Olšák (2017-10-31 18:16:51)
>>>>>>>> This is how I run piglit on i965:
>>>>>>>> WAFFLE_GBM_DEVICE=/dev/dri/renderD128 PIGLIT_PLATFORM=gbm piglit/bin/glinfo|head
>>>>>>>> GL_RENDERER = Mesa DRI Intel(R) Ivybridge Desktop
>>>>>>>>
>>>>>>>> Of course I have Radeon as my main GPU.
>>>>>>>>
>>>>>>>> Marek
>>>>>>>>
>>>>>>>> On Wed, Nov 1, 2017 at 12:52 AM, Mark Janes <mark.a.janes at intel.com> wrote:
>>>>>>>> > No, please don't.  We can't have thousands of failures added to CI.
>>>>>>>> >
>>>>>>>> > Dylan, can you double check this for Marek?  I'm surprised that it
>>>>>>>> > doesn't reproduce for him.
>>>>>>>> >
>>>>>>>> > -Mark
>>>>>>>> >
>>>>>>>> > Marek Olšák <maraeo at gmail.com> writes:
>>>>>>>> >
>>>>>>>> >> I can't reproduce the issue on my IVB. How about I just push this and
>>>>>>>> >> you guys fix i965 when you have time?
>>>>>>>> >>
>>>>>>>> >> Marek
>>>>>>>> >>
>>>>>>>> >> On Thu, Oct 26, 2017 at 5:46 PM, Mark Janes <mark.a.janes at intel.com> wrote:
>>>>>>>> >>> That fixed many issues, but:
>>>>>>>> >>>
>>>>>>>> >>> On deqp EGL tests, we get:
>>>>>>>> >>>
>>>>>>>> >>> dEQP-EGL.functional.create_context_ext.gl_42.rgba8888_no_depth_no_stencil
>>>>>>>> >>> deqp-egl: main/api_exec.c:135: _mesa_initialize_exec_table: Assertion `ctx->Version > 0' failed.
>>>>>>>> >>>
>>>>>>>> >>> On ES31 CTS tests:
>>>>>>>> >>> ES31-CTS.functional.texture.texture_buffer.render.as_vertex_array_as_vertex_texture_as_fragment_texture.range_size_513
>>>>>>>> >>> glGetIntegerv() failed: glGetError() returned GL_INVALID_ENUM at
>>>>>>>> >>> gluContextInfo.cpp:229
>>>>>>>> >>>
>>>>>>>> >>> on GL46 CTS (27 failures):
>>>>>>>> >>> src/mesa/main/teximage.c:595: _mesa_tex_target_is_layered: Assertion
>>>>>>>> >>> `!"Invalid texture target."' failed.
>>>>>>>> >>>
>>>>>>>> >>> Piglit fails 3.5k tests with the same `ctx->Version > 0' assertion as
>>>>>>>> >>> deqp-egl.
>>>>>>>> >>>
>>>>>>>> >>> -Mark
>>>>>>>> >>>
>>>>>>>> >>> Dylan Baker <dylan at pnwbakers.com> writes:
>>>>>>>> >>>
>>>>>>>> >>>> I've pushed it to our CI, I'll let you know tomorrow what it looks like
>>>>>>>> >>>>
>>>>>>>> >>>> Dylan
>>>>>>>> >>>>
>>>>>>>> >>>> Quoting Marek Olšák (2017-10-25 19:52:43)
>>>>>>>> >>>>> Hi Dylan,
>>>>>>>> >>>>>
>>>>>>>> >>>>> Can you please add this and re-test?
>>>>>>>> >>>>>
>>>>>>>> >>>>> diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/
>>>>>>>> >>>>> dri/i965/intel_extensions.c
>>>>>>>> >>>>> index 21cf632..4d17393 100644
>>>>>>>> >>>>> --- a/src/mesa/drivers/dri/i965/intel_extensions.c
>>>>>>>> >>>>> +++ b/src/mesa/drivers/dri/i965/intel_extensions.c
>>>>>>>> >>>>> @@ -178,7 +178,7 @@ intelInitExtensions(struct gl_context *ctx)
>>>>>>>> >>>>>        ctx->Extensions.ARB_pipeline_statistics_query = true;
>>>>>>>> >>>>>        ctx->Extensions.ARB_sample_shading = true;
>>>>>>>> >>>>>        ctx->Extensions.ARB_shading_language_420pack = true;
>>>>>>>> >>>>> -      if (ctx->API == API_OPENGL_CORE) {
>>>>>>>> >>>>> +      if (ctx->API != API_OPENGL_COMPAT) {
>>>>>>>> >>>>>           ctx->Extensions.ARB_texture_buffer_object = true;
>>>>>>>> >>>>>           ctx->Extensions.ARB_texture_buffer_object_rgb32 = true;
>>>>>>>> >>>>>           ctx->Extensions.ARB_texture_buffer_range = true;
>>>>>>>> >>>>>
>>>>>>>> >>>>>
>>>>>>>> >>>>> Marek
>>>>>>>> >>>>>
>>>>>>>> >>>>> On Wed, Oct 25, 2017 at 11:42 PM, Dylan Baker <dylanx.c.baker at intel.com> wrote:
>>>>>>>> >>>>>
>>>>>>>> >>>>>     There are a significant number of i965 regressions from
>>>>>>>> >>>>>     d96c68146a781c79a23f5181d7050174f1070d90, largely related to texturing (I
>>>>>>>> >>>>>     can
>>>>>>>> >>>>>     send you a complete list of regressions if you care, but due to the large
>>>>>>>> >>>>>     number
>>>>>>>> >>>>>     of them I suspect it's something fairly simple).
>>>>>>>> >>>>>
>>>>>>>> >>>>>     For example:
>>>>>>>> >>>>>     ES31-CTS.functional.texture.format.buffer.r32ui_npot
>>>>>>>> >>>>>
>>>>>>>> >>>>>     glGetIntegerv() failed: glGetError() returned GL_INVALID_ENUM at
>>>>>>>> >>>>>     gluContextInfo.cpp:229
>>>>>>>> >>>>>
>>>>>>>> >>>>>     dEQP-GLES31.functional.state_query.integer.texture_buffer_
>>>>>>>> >>>>>     binding_getinteger:
>>>>>>>> >>>>>
>>>>>>>> >>>>>     glGetIntegerv(GL_TEXTURE_BUFFER_BINDING, 0x00007ffee0c43834);
>>>>>>>> >>>>>     // data = { -555819298 }
>>>>>>>> >>>>>     glGetError();
>>>>>>>> >>>>>     // GL_INVALID_ENUM returned
>>>>>>>> >>>>>      // ERROR: glGetIntegerv: glGetError() returned GL_INVALID_ENUM
>>>>>>>> >>>>>
>>>>>>>> >>>>>     Dylan
>>>>>>>> >>>>>
>>>>>>>> >>>>>     Quoting Emil Velikov (2017-10-24 09:30:03)
>>>>>>>> >>>>>     > Hi Marek,
>>>>>>>> >>>>>     >
>>>>>>>> >>>>>     > On 21 October 2017 at 13:54, Marek Olšák <maraeo at gmail.com> wrote:
>>>>>>>> >>>>>     > > From: Marek Olšák <marek.olsak at amd.com>
>>>>>>>> >>>>>     > >
>>>>>>>> >>>>>     > > We already have piglit tests testing alpha, luminance, and intensity
>>>>>>>> >>>>>     > > formats. They were skipped by piglit until now.
>>>>>>>> >>>>>     > >
>>>>>>>> >>>>>     > > Additionally, I'm enabling one ARB_texture_buffer_range piglit test to
>>>>>>>> >>>>>     run
>>>>>>>> >>>>>     > > with the compat profile.
>>>>>>>> >>>>>     >
>>>>>>>> >>>>>     > Can you please mention that ARB_texture_buffer_* on i965 is unchanged
>>>>>>>> >>>>>     > - aka still enabled only for core profiles.
>>>>>>>> >>>>>     > Out of curiosity - can you tried the series with anything more than
>>>>>>>> >>>>>     piglit?
>>>>>>>> >>>>>     >
>>>>>>>> >>>>>     > The Intel guys can run the lot through CTS, dEQP... admittedly only on
>>>>>>>> >>>>>     > Intel hardware.
>>>>>>>> >>>>>     > Still it should help catch if a piece is missing somewhere.
>>>>>>>> >>>>>     >
>>>>>>>> >>>>>     >
>>>>>>>> >>>>>     > -Emil
>>>>>>>> >>>>>     > _______________________________________________
>>>>>>>> >>>>>     > mesa-dev mailing list
>>>>>>>> >>>>>     > mesa-dev at lists.freedesktop.org
>>>>>>>> >>>>>     > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>>>>>> >>>>>
>>>>>>>> >>>>>
>>>>> From 1881027bf1840e4c83f31d30175ef2d1d11d2f8f Mon Sep 17 00:00:00 2001
>>>>> From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak at amd.com>
>>>>> Date: Thu, 19 Oct 2017 22:22:15 +0200
>>>>> Subject: [PATCH 1/2] mesa: enable ARB_texture_buffer_* extensions in the
>>>>>  Compatibility profile
>>>>> MIME-Version: 1.0
>>>>> Content-Type: text/plain; charset=UTF-8
>>>>> Content-Transfer-Encoding: 8bit
>>>>>
>>>>> We already have piglit tests testing alpha, luminance, and intensity
>>>>> formats. They were skipped by piglit until now.
>>>>>
>>>>> Additionally, I'm enabling one ARB_texture_buffer_range piglit test to run
>>>>> with the compat profile.
>>>>>
>>>>> i965 behavior is unchanged.
>>>>>
>>>>> Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>>>> Reviewed-by: Eric Anholt <eric at anholt.net>
>>>>> ---
>>>>>  src/mapi/glapi/gen/apiexec.py                | 12 +++++-------
>>>>>  src/mesa/drivers/dri/i965/intel_extensions.c |  8 +++++---
>>>>>  src/mesa/main/extensions_table.h             |  6 +++---
>>>>>  src/mesa/main/get.c                          |  2 --
>>>>>  src/mesa/main/get_hash_params.py             | 20 ++++++++++----------
>>>>>  src/mesa/main/tests/dispatch_sanity.cpp      |  8 ++++----
>>>>>  src/mesa/main/texparam.c                     |  4 ++--
>>>>>  src/mesa/state_tracker/st_context.c          |  2 +-
>>>>>  src/mesa/state_tracker/st_extensions.c       |  8 +++++++-
>>>>>  src/mesa/state_tracker/st_extensions.h       |  3 ++-
>>>>>  src/mesa/state_tracker/st_manager.c          |  2 +-
>>>>>  11 files changed, 40 insertions(+), 35 deletions(-)
>>>>>
>>>>> diff --git a/src/mapi/glapi/gen/apiexec.py b/src/mapi/glapi/gen/apiexec.py
>>>>> index 61eda4b..7da0818 100644
>>>>> --- a/src/mapi/glapi/gen/apiexec.py
>>>>> +++ b/src/mapi/glapi/gen/apiexec.py
>>>>> @@ -35,7 +35,7 @@ class exec_info():
>>>>>      Each of the attributes that is not None must have a valid value.  The
>>>>>      valid ranges are:
>>>>>
>>>>> -        compatiblity: [10, 30]
>>>>> +        compatibility: [10, )
>>>>>          core: [31, )
>>>>>          es1: [10, 11]
>>>>>          es2: [20, )
>>>>> @@ -66,9 +66,8 @@ class exec_info():
>>>>>          self.es2 = es2
>>>>>
>>>>>  functions = {
>>>>> -    # OpenGL 3.1 / GL_ARB_texture_buffer_object.  Mesa only exposes this
>>>>> -    # extension with core profile.
>>>>> -    "TexBuffer": exec_info(core=31, es2=31),
>>>>> +    # OpenGL 3.1 / GL_ARB_texture_buffer_object.
>>>>> +    "TexBuffer": exec_info(compatibility=20, core=31, es2=31),
>>>>>
>>>>>      # OpenGL 3.2 / GL_OES_geometry_shader.
>>>>>      "FramebufferTexture": exec_info(core=32, es2=31),
>>>>> @@ -144,9 +143,8 @@ functions = {
>>>>>      # GetFloati_v also GL_ARB_shader_atomic_counters
>>>>>      # GetDoublei_v also GL_ARB_shader_atomic_counters
>>>>>
>>>>> -    # OpenGL 4.3 / GL_ARB_texture_buffer_range.  Mesa can expose the extension
>>>>> -    # with OpenGL 3.1.
>>>>> -    "TexBufferRange": exec_info(core=31, es2=31),
>>>>> +    # OpenGL 4.3 / GL_ARB_texture_buffer_range.
>>>>> +    "TexBufferRange": exec_info(compatibility=20, core=31, es2=31),
>>>>>
>>>>>      # OpenGL 4.3 / GL_ARB_framebuffer_no_attachments.  Mesa can expose the
>>>>>      # extension with OpenGL 3.0.
>>>>> diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c
>>>>> index 519d0a5..4d17393 100644
>>>>> --- a/src/mesa/drivers/dri/i965/intel_extensions.c
>>>>> +++ b/src/mesa/drivers/dri/i965/intel_extensions.c
>>>>> @@ -178,9 +178,11 @@ intelInitExtensions(struct gl_context *ctx)
>>>>>        ctx->Extensions.ARB_pipeline_statistics_query = true;
>>>>>        ctx->Extensions.ARB_sample_shading = true;
>>>>>        ctx->Extensions.ARB_shading_language_420pack = true;
>>>>> -      ctx->Extensions.ARB_texture_buffer_object = true;
>>>>> -      ctx->Extensions.ARB_texture_buffer_object_rgb32 = true;
>>>>> -      ctx->Extensions.ARB_texture_buffer_range = true;
>>>>> +      if (ctx->API != API_OPENGL_COMPAT) {
>>>>> +         ctx->Extensions.ARB_texture_buffer_object = true;
>>>>> +         ctx->Extensions.ARB_texture_buffer_object_rgb32 = true;
>>>>> +         ctx->Extensions.ARB_texture_buffer_range = true;
>>>>> +      }
>>>>>        ctx->Extensions.ARB_texture_cube_map_array = true;
>>>>>        ctx->Extensions.ARB_texture_gather = true;
>>>>>        ctx->Extensions.ARB_texture_multisample = true;
>>>>> diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
>>>>> index 8d8b637..5b66e7d 100644
>>>>> --- a/src/mesa/main/extensions_table.h
>>>>> +++ b/src/mesa/main/extensions_table.h
>>>>> @@ -133,9 +133,9 @@ EXT(ARB_sync                                , ARB_sync
>>>>>  EXT(ARB_tessellation_shader                 , ARB_tessellation_shader                ,  x , GLC,  x ,  x , 2009)
>>>>>  EXT(ARB_texture_barrier                     , NV_texture_barrier                     , GLL, GLC,  x ,  x , 2014)
>>>>>  EXT(ARB_texture_border_clamp                , ARB_texture_border_clamp               , GLL,  x ,  x ,  x , 2000)
>>>>> -EXT(ARB_texture_buffer_object               , ARB_texture_buffer_object              ,  x , GLC,  x ,  x , 2008)
>>>>> -EXT(ARB_texture_buffer_object_rgb32         , ARB_texture_buffer_object_rgb32        ,  x , GLC,  x ,  x , 2009)
>>>>> -EXT(ARB_texture_buffer_range                , ARB_texture_buffer_range               ,  x , GLC,  x ,  x , 2012)
>>>>> +EXT(ARB_texture_buffer_object               , ARB_texture_buffer_object              , GLL, GLC,  x ,  x , 2008)
>>>>> +EXT(ARB_texture_buffer_object_rgb32         , ARB_texture_buffer_object_rgb32        , GLL, GLC,  x ,  x , 2009)
>>>>> +EXT(ARB_texture_buffer_range                , ARB_texture_buffer_range               , GLL, GLC,  x ,  x , 2012)
>>>>>  EXT(ARB_texture_compression                 , dummy_true                             , GLL,  x ,  x ,  x , 2000)
>>>>>  EXT(ARB_texture_compression_bptc            , ARB_texture_compression_bptc           , GLL, GLC,  x ,  x , 2010)
>>>>>  EXT(ARB_texture_compression_rgtc            , ARB_texture_compression_rgtc           , GLL, GLC,  x ,  x , 2004)
>>>>> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
>>>>> index e68a93b..ea8d932 100644
>>>>> --- a/src/mesa/main/get.c
>>>>> +++ b/src/mesa/main/get.c
>>>>> @@ -309,8 +309,6 @@ static const int extra_GLSL_130_es3[] = {
>>>>>  };
>>>>>
>>>>>  static const int extra_texture_buffer_object[] = {
>>>>> -   EXTRA_API_GL_CORE,
>>>>> -   EXTRA_VERSION_31,
>>>>>     EXT(ARB_texture_buffer_object),
>>>>>     EXTRA_END
>>>>>  };
>>>>> diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
>>>>> index acd5cd1..20ef6e4 100644
>>>>> --- a/src/mesa/main/get_hash_params.py
>>>>> +++ b/src/mesa/main/get_hash_params.py
>>>>> @@ -442,6 +442,16 @@ descriptor=[
>>>>>
>>>>>  # Enums in OpenGL and ES 3.1
>>>>>  { "apis": ["GL", "GL_CORE", "GLES31"], "params": [
>>>>> +# GL_ARB_texture_buffer_object / GL_OES_texture_buffer
>>>>> +  [ "MAX_TEXTURE_BUFFER_SIZE_ARB", "CONTEXT_INT(Const.MaxTextureBufferSize), extra_texture_buffer_object" ],
>>>>> +  [ "TEXTURE_BINDING_BUFFER_ARB", "LOC_CUSTOM, TYPE_INT, 0, extra_texture_buffer_object" ],
>>>>> +  [ "TEXTURE_BUFFER_DATA_STORE_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, TEXTURE_BUFFER_INDEX, extra_texture_buffer_object" ],
>>>>> +  [ "TEXTURE_BUFFER_FORMAT_ARB", "LOC_CUSTOM, TYPE_INT, 0, extra_texture_buffer_object" ],
>>>>> +  [ "TEXTURE_BUFFER_ARB", "LOC_CUSTOM, TYPE_INT, 0, extra_texture_buffer_object" ],
>>>>> +
>>>>> +# GL_ARB_texture_buffer_range
>>>>> +  [ "TEXTURE_BUFFER_OFFSET_ALIGNMENT", "CONTEXT_INT(Const.TextureBufferOffsetAlignment), extra_ARB_texture_buffer_range" ],
>>>>> +
>>>>>  # GL_ARB_shader_image_load_store / GLES 3.1
>>>>>    [ "MAX_IMAGE_UNITS", "CONTEXT_INT(Const.MaxImageUnits), extra_ARB_shader_image_load_store" ],
>>>>>    [ "MAX_VERTEX_IMAGE_UNIFORMS", "CONTEXT_INT(Const.Program[MESA_SHADER_VERTEX].MaxImageUniforms), extra_ARB_shader_image_load_store" ],
>>>>> @@ -602,16 +612,6 @@ descriptor=[
>>>>>  # GL_ARB_gpu_shader5 / GL_OES_geometry_shader
>>>>>    [ "MAX_GEOMETRY_SHADER_INVOCATIONS", "CONST(MAX_GEOMETRY_SHADER_INVOCATIONS), extra_ARB_gpu_shader5_or_oes_geometry_shader" ],
>>>>>
>>>>> -# GL_ARB_texture_buffer_object / GL_OES_texture_buffer
>>>>> -  [ "MAX_TEXTURE_BUFFER_SIZE_ARB", "CONTEXT_INT(Const.MaxTextureBufferSize), extra_texture_buffer_object" ],
>>>>> -  [ "TEXTURE_BINDING_BUFFER_ARB", "LOC_CUSTOM, TYPE_INT, 0, extra_texture_buffer_object" ],
>>>>> -  [ "TEXTURE_BUFFER_DATA_STORE_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, TEXTURE_BUFFER_INDEX, extra_texture_buffer_object" ],
>>>>> -  [ "TEXTURE_BUFFER_FORMAT_ARB", "LOC_CUSTOM, TYPE_INT, 0, extra_texture_buffer_object" ],
>>>>> -  [ "TEXTURE_BUFFER_ARB", "LOC_CUSTOM, TYPE_INT, 0, extra_texture_buffer_object" ],
>>>>> -
>>>>> -# GL_ARB_texture_buffer_range
>>>>> -  [ "TEXTURE_BUFFER_OFFSET_ALIGNMENT", "CONTEXT_INT(Const.TextureBufferOffsetAlignment), extra_ARB_texture_buffer_range" ],
>>>>> -
>>>>>  # GL_OES_primitive_bounding_box
>>>>>    [ "PRIMITIVE_BOUNDING_BOX_ARB", "CONTEXT_FLOAT8(PrimitiveBoundingBox), extra_OES_primitive_bounding_box" ],
>>>>>
>>>>> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
>>>>> index 8c51180..d7183de 100644
>>>>> --- a/src/mesa/main/tests/dispatch_sanity.cpp
>>>>> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
>>>>> @@ -504,6 +504,10 @@ const struct function common_desktop_functions_possible[] = {
>>>>>     { "glDrawArraysInstanced", 31, -1 },
>>>>>     { "glDrawElementsInstanced", 31, -1 },
>>>>>     { "glPrimitiveRestartIndex", 31, -1 },
>>>>> +   { "glTexBuffer", 31, -1 },
>>>>> +
>>>>> +   /* GL_ARB_texture_buffer_range */
>>>>> +   { "glTexBufferRange", 43, -1 },
>>>>>
>>>>>     /* GL_ARB_shader_objects */
>>>>>     { "glDeleteObjectARB", 31, -1 },
>>>>> @@ -1501,9 +1505,6 @@ const struct function gl_compatibility_functions_possible[] = {
>>>>>  };
>>>>>
>>>>>  const struct function gl_core_functions_possible[] = {
>>>>> -   /* GL 3.1 */
>>>>> -   { "glTexBuffer", 31, -1 },
>>>>> -
>>>>>     /* GL 3.2 */
>>>>>     { "glFramebufferTexture", 32, -1 },
>>>>>
>>>>> @@ -1808,7 +1809,6 @@ const struct function gl_core_functions_possible[] = {
>>>>>     { "glGetProgramResourceLocation", 43, -1 },
>>>>>     { "glGetProgramResourceLocationIndex", 43, -1 },
>>>>>  // { "glShaderStorageBlockBinding", 43, -1 },           // XXX: Add to xml
>>>>> -   { "glTexBufferRange", 43, -1 },
>>>>>  // { "glTextureBufferRangeEXT", 43, -1 },               // XXX: Add to xml
>>>>>     { "glTexStorage2DMultisample", 43, -1 },
>>>>>     { "glTexStorage3DMultisample", 43, -1 },
>>>>> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
>>>>> index 039b933..4a0f61e 100644
>>>>> --- a/src/mesa/main/texparam.c
>>>>> +++ b/src/mesa/main/texparam.c
>>>>> @@ -1287,8 +1287,8 @@ _mesa_legal_get_tex_level_parameter_target(struct gl_context *ctx, GLenum target
>>>>>         * From the OpenGL 3.1 spec:
>>>>>         * "target may also be TEXTURE_BUFFER, indicating the texture buffer."
>>>>>         */
>>>>> -      return (ctx->API == API_OPENGL_CORE && ctx->Version >= 31) ||
>>>>> -         _mesa_has_OES_texture_buffer(ctx);
>>>>> +      return (_mesa_is_desktop_gl(ctx) && ctx->Version >= 31) ||
>>>>> +             _mesa_has_OES_texture_buffer(ctx);
>>>>>     case GL_TEXTURE_CUBE_MAP_ARRAY:
>>>>>        return _mesa_has_texture_cube_map_array(ctx);
>>>>>     }
>>>>> diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
>>>>> index 5d8dd8b..a96e454 100644
>>>>> --- a/src/mesa/state_tracker/st_context.c
>>>>> +++ b/src/mesa/state_tracker/st_context.c
>>>>> @@ -408,7 +408,7 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe,
>>>>>     /* GL limits and extensions */
>>>>>     st_init_limits(pipe->screen, &ctx->Const, &ctx->Extensions);
>>>>>     st_init_extensions(pipe->screen, &ctx->Const,
>>>>> -                      &ctx->Extensions, &st->options);
>>>>> +                      &ctx->Extensions, &st->options, ctx->API);
>>>>>
>>>>>     if (st_have_perfmon(st)) {
>>>>>        ctx->Extensions.AMD_performance_monitor = GL_TRUE;
>>>>> diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
>>>>> index fa2d002..f21885f 100644
>>>>> --- a/src/mesa/state_tracker/st_extensions.c
>>>>> +++ b/src/mesa/state_tracker/st_extensions.c
>>>>> @@ -578,7 +578,8 @@ get_max_samples_for_formats(struct pipe_screen *screen,
>>>>>  void st_init_extensions(struct pipe_screen *screen,
>>>>>                          struct gl_constants *consts,
>>>>>                          struct gl_extensions *extensions,
>>>>> -                        struct st_config_options *options)
>>>>> +                        struct st_config_options *options,
>>>>> +                        gl_api api)
>>>>>  {
>>>>>     unsigned i;
>>>>>     GLboolean *extension_table = (GLboolean *) extensions;
>>>>> @@ -1095,6 +1096,11 @@ void st_init_extensions(struct pipe_screen *screen,
>>>>>     consts->MinMapBufferAlignment =
>>>>>        screen->get_param(screen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT);
>>>>>
>>>>> +   /* The OpenGL Compatibility profile requires arbitrary buffer swizzling. */
>>>>> +   if (api == API_OPENGL_COMPAT &&
>>>>> +       screen->get_param(screen, PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY))
>>>>> +      extensions->ARB_texture_buffer_object = GL_FALSE;
>>>>> +
>>>>>     if (extensions->ARB_texture_buffer_object) {
>>>>>        consts->MaxTextureBufferSize =
>>>>>           _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE),
>>>>> diff --git a/src/mesa/state_tracker/st_extensions.h b/src/mesa/state_tracker/st_extensions.h
>>>>> index 951185c..7bf1aa8 100644
>>>>> --- a/src/mesa/state_tracker/st_extensions.h
>>>>> +++ b/src/mesa/state_tracker/st_extensions.h
>>>>> @@ -40,7 +40,8 @@ extern void st_init_limits(struct pipe_screen *screen,
>>>>>  extern void st_init_extensions(struct pipe_screen *screen,
>>>>>                                 struct gl_constants *consts,
>>>>>                                 struct gl_extensions *extensions,
>>>>> -                               struct st_config_options *options);
>>>>> +                               struct st_config_options *options,
>>>>> +                               gl_api api);
>>>>>
>>>>>
>>>>>  #endif /* ST_EXTENSIONS_H */
>>>>> diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
>>>>> index eebde62..dab987c 100644
>>>>> --- a/src/mesa/state_tracker/st_manager.c
>>>>> +++ b/src/mesa/state_tracker/st_manager.c
>>>>> @@ -1168,7 +1168,7 @@ get_version(struct pipe_screen *screen,
>>>>>     _mesa_init_extensions(&extensions);
>>>>>
>>>>>     st_init_limits(screen, &consts, &extensions);
>>>>> -   st_init_extensions(screen, &consts, &extensions, options);
>>>>> +   st_init_extensions(screen, &consts, &extensions, options, api);
>>>>>
>>>>>     return _mesa_get_version(&extensions, &consts, api);
>>>>>  }
>>>>> --
>>>>> 2.7.4
>>>>>
>>>>> From bbcc2d52c00744324876f309227c1b8820afef60 Mon Sep 17 00:00:00 2001
>>>>> From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak at amd.com>
>>>>> Date: Fri, 20 Oct 2017 04:08:29 +0200
>>>>> Subject: [PATCH 2/2] mesa: final changes to expose OpenGL 3.1 with
>>>>>  ARB_compatibility
>>>>> MIME-Version: 1.0
>>>>> Content-Type: text/plain; charset=UTF-8
>>>>> Content-Transfer-Encoding: 8bit
>>>>>
>>>>> Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>>>> ---
>>>>>  docs/relnotes/17.4.0.html              |  1 +
>>>>>  src/mesa/drivers/dri/common/dri_util.c |  7 -------
>>>>>  src/mesa/main/extensions_table.h       |  1 +
>>>>>  src/mesa/main/mtypes.h                 |  1 +
>>>>>  src/mesa/main/version.c                | 13 ++++++++-----
>>>>>  5 files changed, 11 insertions(+), 12 deletions(-)
>>>>>
>>>>> diff --git a/docs/relnotes/17.4.0.html b/docs/relnotes/17.4.0.html
>>>>> index f81b5bd..a419a74 100644
>>>>> --- a/docs/relnotes/17.4.0.html
>>>>> +++ b/docs/relnotes/17.4.0.html
>>>>> @@ -45,6 +45,7 @@ Note: some of the new features are only available with certain drivers.
>>>>>
>>>>>  <ul>
>>>>>  <li>Disk shader cache support for i965 when MESA_GLSL_CACHE_DISABLE environment variable is set to "0" or "false"</li>
>>>>> +<li>OpenGL 3.1 with ARB_compatibility is supported on many gallium drivers (including radeonsi).
>>>>>  </ul>
>>>>>
>>>>>  <h2>Bug fixes</h2>
>>>>> diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
>>>>> index 1cff0dd..2af18ce 100644
>>>>> --- a/src/mesa/drivers/dri/common/dri_util.c
>>>>> +++ b/src/mesa/drivers/dri/common/dri_util.c
>>>>> @@ -362,13 +362,6 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
>>>>>      }
>>>>>      }
>>>>>
>>>>> -    /* Mesa does not support the GL_ARB_compatibilty extension or the
>>>>> -     * compatibility profile.  This means that we treat a API_OPENGL_COMPAT 3.1 as
>>>>> -     * API_OPENGL_CORE and reject API_OPENGL_COMPAT 3.2+.
>>>>> -     */
>>>>> -    if (mesa_api == API_OPENGL_COMPAT && major_version == 3 && minor_version == 1)
>>>>> -       mesa_api = API_OPENGL_CORE;
>>>>> -
>>>>>      if (mesa_api == API_OPENGL_COMPAT
>>>>>          && ((major_version > 3)
>>>>>              || (major_version == 3 && minor_version >= 2))) {
>>>>> diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
>>>>> index 5b66e7d..2fb668e 100644
>>>>> --- a/src/mesa/main/extensions_table.h
>>>>> +++ b/src/mesa/main/extensions_table.h
>>>>> @@ -40,6 +40,7 @@ EXT(ARB_clear_buffer_object                 , dummy_true
>>>>>  EXT(ARB_clear_texture                       , ARB_clear_texture                      , GLL, GLC,  x ,  x , 2013)
>>>>>  EXT(ARB_clip_control                        , ARB_clip_control                       , GLL, GLC,  x ,  x , 2014)
>>>>>  EXT(ARB_color_buffer_float                  , ARB_color_buffer_float                 , GLL, GLC,  x ,  x , 2004)
>>>>> +EXT(ARB_compatibility                       , ARB_compatibility                      , GLL,  x ,  x ,  x , 2009)
>>>>>  EXT(ARB_compressed_texture_pixel_storage    , dummy_true                             , GLL, GLC,  x ,  x , 2011)
>>>>>  EXT(ARB_compute_shader                      , ARB_compute_shader                     , GLL, GLC,  x ,  x , 2012)
>>>>>  EXT(ARB_compute_variable_group_size         , ARB_compute_variable_group_size        , GLL, GLC,  x ,  x , 2013)
>>>>> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
>>>>> index 2acf64e..fd5306c 100644
>>>>> --- a/src/mesa/main/mtypes.h
>>>>> +++ b/src/mesa/main/mtypes.h
>>>>> @@ -4026,6 +4026,7 @@ struct gl_extensions
>>>>>     GLboolean ARB_clear_texture;
>>>>>     GLboolean ARB_clip_control;
>>>>>     GLboolean ARB_color_buffer_float;
>>>>> +   GLboolean ARB_compatibility;
>>>>>     GLboolean ARB_compute_shader;
>>>>>     GLboolean ARB_compute_variable_group_size;
>>>>>     GLboolean ARB_conditional_render_inverted;
>>>>> diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
>>>>> index 90c5c5f..06b8e4d 100644
>>>>> --- a/src/mesa/main/version.c
>>>>> +++ b/src/mesa/main/version.c
>>>>> @@ -579,11 +579,11 @@ _mesa_get_version(const struct gl_extensions *extensions,
>>>>>  {
>>>>>     switch (api) {
>>>>>     case API_OPENGL_COMPAT:
>>>>> -      /* Disable GLSL 1.40 and later for legacy contexts.
>>>>> -       * This disallows creation of the GL 3.1 compatibility context. */
>>>>> +      /* Disable higher GLSL versions for legacy contexts.
>>>>> +       * This disallows creation of higher compatibility contexts. */
>>>>>        if (!consts->AllowHigherCompatVersion) {
>>>>> -         if (consts->GLSLVersion > 130) {
>>>>> -            consts->GLSLVersion = 130;
>>>>> +         if (consts->GLSLVersion > 140) {
>>>>> +            consts->GLSLVersion = 140;
>>>>>           }
>>>>>        }
>>>>>        /* fall through */
>>>>> @@ -611,10 +611,13 @@ _mesa_compute_version(struct gl_context *ctx)
>>>>>     ctx->Version = _mesa_get_version(&ctx->Extensions, &ctx->Const, ctx->API);
>>>>>     ctx->Extensions.Version = ctx->Version;
>>>>>
>>>>> +   if (ctx->API == API_OPENGL_COMPAT && ctx->Version >= 31)
>>>>> +      ctx->Extensions.ARB_compatibility = GL_TRUE;
>>>>> +
>>>>>     /* Make sure that the GLSL version lines up with the GL version. In some
>>>>>      * cases it can be too high, e.g. if an extension is missing.
>>>>>      */
>>>>> -   if (ctx->API == API_OPENGL_CORE) {
>>>>> +   if (_mesa_is_desktop_gl(ctx) && ctx->Version >= 31) {
>>>>>        switch (ctx->Version) {
>>>>>        case 31:
>>>>>           ctx->Const.GLSLVersion = 140;
>>>>> --
>>>>> 2.7.4
>>>> _______________________________________________
>>>> mesa-dev mailing list
>>>> mesa-dev at lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list