[Mesa-dev] [PATCH v2 08/14] mesa: handle OES_texture_half_float formats in _mesa_base_tex_format()

Tapani Pälli tapani.palli at intel.com
Fri May 4 11:18:05 UTC 2018



On 05/04/2018 02:12 PM, Tapani Pälli wrote:
> 
> 
> On 05/04/2018 10:15 AM, Christian Gmeiner wrote:
>> Hi
>>
>>
>>> On 05/01/2018 05:48 PM, Christian Gmeiner wrote:
>>>> Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
>>>> Reviewed-by: Wladimir J. van der Laan <laanwj at gmail.com>
>>>> ---
>>>>    src/mesa/main/glformats.c | 19 +++++++++++++++++++
>>>>    1 file changed, 19 insertions(+)
>>>>
>>>> diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
>>>> index cba5e670db..1d3d524875 100644
>>>> --- a/src/mesa/main/glformats.c
>>>> +++ b/src/mesa/main/glformats.c
>>>> @@ -2424,6 +2424,25 @@ _mesa_base_tex_format(const struct gl_context
>> *ctx, GLint internalFormat)
>>>>             return GL_YCBCR_MESA;
>>>>       }
>>>>
>>>> +   if (ctx->Extensions.OES_texture_half_float) {
>>
>>> this could be
>>
>>> if ((ctx->Extensions.ARB_texture_float) ||
>>>      ctx->Extensions.OES_texture_half_float))
>>
>>
>> I tried to separate half float and float handling so I think this your
>> suggestion will
>> not work here.
>>
>>>> +       switch (internalFormat) {
>>>> +       case GL_ALPHA16F_ARB:
>>>> +          return GL_ALPHA;
>>>> +       case GL_RGBA16F_ARB:
>>>> +          return GL_RGBA;
>>>> +       case GL_RGB16F_ARB:
>>>> +          return GL_RGB;
>>>> +       case GL_INTENSITY16F_ARB:
>>>> +          return GL_INTENSITY;
>>>> +       case GL_LUMINANCE16F_ARB:
>>>> +          return GL_LUMINANCE;
>>>> +       case GL_LUMINANCE_ALPHA16F_ARB:
>>>> +          return GL_LUMINANCE_ALPHA;
>>>> +       default:
>>>> +          ; /* fallthrough */
>>>> +       }
>>>> +   }
>>>> +
>>
>>> It seems like we miss OES_texture_float as well .. with the above change
>>> (separation of half float formats from full float ones) we could have a
>>> OES_texture_float || ARB_texture_float check for the rest?
>>
>>
>> Yeah.. makes sense.
>>
>>
>>>>       if (ctx->Extensions.ARB_texture_float) {
>>>>          switch (internalFormat) {
>>>>          case GL_ALPHA16F_ARB:
>>>>
>>
>>
>> What about something like this:
>>
>> -----8<-------
>>
>> iff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
>> index cba5e670db..f6c252cdf0 100644
>> --- a/src/mesa/main/glformats.c
>> +++ b/src/mesa/main/glformats.c
>> @@ -2424,7 +2424,27 @@ _mesa_base_tex_format(const struct gl_context 
>> *ctx,
>> GLint internalFormat)
>>             return GL_YCBCR_MESA;
>>       }
>>
>> -   if (ctx->Extensions.ARB_texture_float) {
>> +   if (ctx->Extensions.OES_texture_half_float) {
>> +       switch (internalFormat) {
>> +       case GL_ALPHA16F_ARB:
>> +          return GL_ALPHA;
>> +       case GL_RGBA16F_ARB:
>> +          return GL_RGBA;
>> +       case GL_RGB16F_ARB:
>> +          return GL_RGB;
>> +       case GL_INTENSITY16F_ARB:
>> +          return GL_INTENSITY;
>> +       case GL_LUMINANCE16F_ARB:
>> +          return GL_LUMINANCE;
>> +       case GL_LUMINANCE_ALPHA16F_ARB:
>> +          return GL_LUMINANCE_ALPHA;
>> +       default:
>> +          ; /* fallthrough */
>> +       }
>> +   }
>> +
>> +   if (ctx->Extensions.ARB_texture_float ||
>> +       ctx->Extensions.OES_texture_float) {
>>          switch (internalFormat) {
>>          case GL_ALPHA16F_ARB:
>>          case GL_ALPHA32F_ARB:
>>
>> -----8<-------
> 
> 
> Right this is what I was after, I believe you should be able to also 
> remove all the 16F formats from the list below since they are already 
> checked above. So first check 16F ones and then 32F ones separately.
> 

So for this separation to happen we would have ...

for 16F ones:

if (ctx->Extensions.ARB_texture_float || 
ctx->Extensions.OES_texture_half_float)

and another one for 32F ones:

if (ctx->Extensions.ARB_texture_float ||
ctx->Extensions.OES_texture_float)


// Tapani


More information about the etnaviv mailing list