[Mesa-dev] [PATCH 5/5] st/mesa: don't expose ARB_color_buffer_float without driver support in GL core

Marek Olšák maraeo at gmail.com
Fri Mar 29 11:35:40 PDT 2013


On Fri, Mar 29, 2013 at 4:21 PM, Brian Paul <brianp at vmware.com> wrote:

> On 03/28/2013 03:24 PM, Marek Olšák wrote:
>
>> ---
>>   src/mesa/state_tracker/st_**extensions.c |   11 +++++++++++
>>   1 file changed, 11 insertions(+)
>>
>> diff --git a/src/mesa/state_tracker/st_**extensions.c
>> b/src/mesa/state_tracker/st_**extensions.c
>> index 11db9d3..2d8b9ef 100644
>> --- a/src/mesa/state_tracker/st_**extensions.c
>> +++ b/src/mesa/state_tracker/st_**extensions.c
>> @@ -629,6 +629,7 @@ void st_init_extensions(struct st_context *st)
>>         ctx->Const.**PrimitiveRestartInSoftware = GL_TRUE;
>>      }
>>
>> +   /* ARB_color_buffer_float. */
>>      if (screen->get_param(screen, PIPE_CAP_VERTEX_COLOR_**UNCLAMPED)) {
>>         ctx->Extensions.ARB_color_**buffer_float = GL_TRUE;
>>
>> @@ -639,6 +640,16 @@ void st_init_extensions(struct st_context *st)
>>         if (!screen->get_param(screen, PIPE_CAP_FRAGMENT_COLOR_**CLAMPED))
>> {
>>            st->clamp_frag_color_in_shader = TRUE;
>>         }
>> +
>> +      /* For drivers which cannot do color clamping, it's better to just
>> +       * disable ARB_color_buffer_float in the core profile, because
>> +       * the clamping is deprecated there anyway. */
>> +      if (ctx->API == API_OPENGL_CORE&&
>> +          (st->clamp_frag_color_in_**shader || st->clamp_vert_color_in_*
>> *shader)) {
>> +         st->clamp_vert_color_in_shader = GL_FALSE;
>> +         st->clamp_frag_color_in_shader = GL_FALSE;
>> +         ctx->Extensions.ARB_color_**buffer_float = GL_FALSE;
>> +      }
>>      }
>>
>
> I've read that comment and code several times but I still can't quite
> parse it.
>
> If we disable ARB_color_buffer_float, we'll never get version 3.0 (see
> compute_version()) so there's no core profile.
>
> I'm probably missing something, but could you elaborate on or clarify the
> comments somehow?
>

Yes. The last hunk of the 4th patch is:

diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
index 3d4af59..ecca446 100644
--- a/src/mesa/main/version.c
+++ b/src/mesa/main/version.c
@@ -233,7 +233,8 @@ compute_version(struct gl_context *ctx)
    const GLboolean ver_3_0 = (ver_2_1 &&
                               ctx->Const.GLSLVersion >= 130 &&
                               ctx->Const.MaxSamples >= 4 &&
-                              ctx->Extensions.ARB_color_buffer_float &&
+                              (ctx->API == API_OPENGL_CORE ||
+                               ctx->Extensions.ARB_color_buffer_float) &&
                               ctx->Extensions.ARB_depth_buffer_float &&
                               ctx->Extensions.ARB_half_float_pixel &&
                               ctx->Extensions.ARB_half_float_vertex &&

So basically, if the profile is "core", ARB_color_buffer_float is not
required to get GL 3.0 and higher.

The subset of ARB_color_buffer_float which remained part of the core
profile is only the read color clamping, which is always supported by our
common ReadPixels code. The 4th patch makes necessary changes for
GL_CLAMP_READ_COLOR to be accepted without ARB_color_buffer_float in the
core profile.

Marek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130329/c8c5fa5c/attachment.html>


More information about the mesa-dev mailing list