[Mesa-dev] [PATCH 10/13] mesa: add KHR_no_error support for FramebufferTextureLayer

Timothy Arceri tarceri at itsqueeze.com
Wed May 10 13:10:43 UTC 2017


On 10/05/17 22:00, Nicolai Hähnle wrote:
> On 10.05.2017 02:28, Eric Anholt wrote:
>> Timothy Arceri <tarceri at itsqueeze.com> writes:
>>
>>> ---
>>>  src/mapi/glapi/gen/ARB_framebuffer_object.xml |  2 +-
>>>  src/mesa/main/fbobject.c                      | 31 
>>> +++++++++++++++++++++++++++
>>>  src/mesa/main/fbobject.h                      |  4 ++++
>>>  3 files changed, 36 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/mapi/glapi/gen/ARB_framebuffer_object.xml 
>>> b/src/mapi/glapi/gen/ARB_framebuffer_object.xml
>>> index ce5e45d..76114eb 100644
>>> --- a/src/mapi/glapi/gen/ARB_framebuffer_object.xml
>>> +++ b/src/mapi/glapi/gen/ARB_framebuffer_object.xml
>>> @@ -239,21 +239,21 @@
>>>      <function name="FramebufferTexture3D" no_error="true">
>>>          <param name="target" type="GLenum"/>
>>>          <param name="attachment" type="GLenum"/>
>>>          <param name="textarget" type="GLenum"/>
>>>          <param name="texture" type="GLuint"/>
>>>          <param name="level" type="GLint"/>
>>>          <param name="layer" type="GLint"/>
>>>      <glx rop="4323"/>
>>>      </function>
>>>
>>> -    <function name="FramebufferTextureLayer" es2="3.0">
>>> +    <function name="FramebufferTextureLayer" es2="3.0" no_error="true">
>>>          <param name="target" type="GLenum"/>
>>>          <param name="attachment" type="GLenum"/>
>>>          <param name="texture" type="GLuint"/>
>>>          <param name="level" type="GLint"/>
>>>          <param name="layer" type="GLint"/>
>>>      <glx rop="237"/>
>>>      </function>
>>>
>>>      <function name="FramebufferRenderbuffer" es2="2.0">
>>>          <param name="target" type="GLenum"/>
>>> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
>>> index ba01d0c..08e7347 100644
>>> --- a/src/mesa/main/fbobject.c
>>> +++ b/src/mesa/main/fbobject.c
>>> @@ -3424,20 +3424,51 @@ void GLAPIENTRY
>>>  _mesa_FramebufferTexture3D(GLenum target, GLenum attachment,
>>>                             GLenum textarget, GLuint texture,
>>>                             GLint level, GLint layer)
>>>  {
>>>     framebuffer_texture_with_dims(3, target, attachment, textarget, 
>>> texture,
>>>                                   level, layer, 
>>> "glFramebufferTexture3D");
>>>  }
>>>
>>>
>>>  void GLAPIENTRY
>>> +_mesa_FramebufferTextureLayer_no_error(GLenum target, GLenum 
>>> attachment,
>>> +                                       GLuint texture, GLint level,
>>> +                                       GLint layer)
>>> +{
>>> +   GET_CURRENT_CONTEXT(ctx);
>>> +
>>> +   /* Get the framebuffer object */
>>> +   struct gl_framebuffer *fb = get_framebuffer_target(ctx, target);
>>> +
>>> +   /* Get the texture object */
>>> +   struct gl_texture_object *texObj =
>>> +      get_texture_for_framebuffer(ctx, texture);
>>> +
>>> +   struct gl_renderbuffer_attachment *att =
>>> +      get_attachment(ctx, fb, attachment, NULL);
>>> +
>>> +   GLenum textarget = 0;
>>> +   if (texObj) {
>>> +      if (texObj->Target == GL_TEXTURE_CUBE_MAP) {
>>> +         assert(layer >= 0 && layer < 6);
>>> +         textarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + layer;
>>> +         layer = 0;
>>> +      }
>>> +   }
>>> +
>>> +   _mesa_framebuffer_texture(ctx, fb, attachment, att, texObj, 
>>> textarget,
>>> +                             level, layer, GL_FALSE);
>>> +}
>>
>> I've got stuck on reading this series a couple of times because this
>> felt like too much code duplication.  I understand that you're
>> replicating what the current error-validating code does, but it seems
>> like for no_error we can do a lot better, quite easily.
>>
>> What I'd like for these last 4 patches is to have two patches, each of
>> which implements a Named and non-Named no_error function by doing the
>> appropriate lookup of the fb and then calling a helper function that
>> does the rest of their current bodies.
> 
> Not to be too annoying, but I still think that collapsing the functions 
> entirely (and using ALWAYS_INLINE) is a good idea as well.

Yeah I've done that with the Tex*SubImage fuctions in an upcoming series 
and I think I've changed my mind. I still think the extra complexity is 
a little ugly, but I think its worth it.

I'll redo these patches to share the inline function between the dsa/no 
error variants also.

> 
> Cheers,
> Nicolai
> 
>>
>> Assuming patch 4.5 is to be squashed into 4, then other than the ';'
>> comment patches 1-9 are:
>>
>> Reviewed-by: Eric Anholt <eric at anholt.net>
>>
>>
>>
>> _______________________________________________
>> 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