[Mesa-dev] [Mesa-stable] [PATCH 1/4] mesa/image: Make _mesa_clip_readpixels() work with renderbuffers

Brian Paul brianp at vmware.com
Mon Feb 8 23:47:35 UTC 2016


BTW, maybe the same thing could be done for _mesa_DrawPixels and 
_mesa_clip_drawpixels(), though I don't have time to look into it myself 
right now.

-Brian

On 02/08/2016 04:40 PM, Brian Paul wrote:
> Looks good to me too.
>
> Reviewed-by: Brian Paul <brianp at vmware.com>
>
> On 02/08/2016 04:36 PM, Ian Romanick wrote:
>> Series is
>>
>> Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
>>
>> Might wait 24 hours or so to see if anyone responsible for a non-Intel
>> driver has commentary... since this is shared code.
>>
>> On 02/08/2016 02:38 PM, Nanley Chery wrote:
>>> From: Nanley Chery <nanley.g.chery at intel.com>
>>>
>>> v2: Use gl_renderbuffer::{Width,Height} (Jason)
>>>
>>> Cc: "11.0 11.1" <mesa-stable at lists.freedesktop.org>
>>> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
>>> ---
>>>   src/mesa/main/image.c | 22 +++++++++++++++++-----
>>>   1 file changed, 17 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
>>> index e79e3e6..99f253c 100644
>>> --- a/src/mesa/main/image.c
>>> +++ b/src/mesa/main/image.c
>>> @@ -670,7 +670,7 @@ _mesa_clip_drawpixels(const struct gl_context *ctx,
>>>    * so that the image region is entirely within the window bounds.
>>>    * Note: this is different from _mesa_clip_drawpixels() in that the
>>>    * scissor box is ignored, and we use the bounds of the current
>>> readbuffer
>>> - * surface.
>>> + * surface or the attached image.
>>>    *
>>>    * \return  GL_TRUE if region to read is in bounds
>>>    *          GL_FALSE if region is completely out of bounds (nothing
>>> to read)
>>> @@ -682,6 +682,18 @@ _mesa_clip_readpixels(const struct gl_context *ctx,
>>>                         struct gl_pixelstore_attrib *pack)
>>>   {
>>>      const struct gl_framebuffer *buffer = ctx->ReadBuffer;
>>> +   struct gl_renderbuffer *rb = buffer->_ColorReadBuffer;
>>> +   GLsizei clip_width;
>>> +   GLsizei clip_height;
>>> +
>>> +   if (rb) {
>>> +      clip_width = rb->Width;
>>> +      clip_height = rb->Height;
>>> +   } else {
>>> +      clip_width = buffer->Width;
>>> +      clip_height = buffer->Height;
>>> +   }
>>> +
>>>
>>>      if (pack->RowLength == 0) {
>>>         pack->RowLength = *width;
>>> @@ -694,8 +706,8 @@ _mesa_clip_readpixels(const struct gl_context *ctx,
>>>         *srcX = 0;
>>>      }
>>>      /* right clipping */
>>> -   if (*srcX + *width > (GLsizei) buffer->Width)
>>> -      *width -= (*srcX + *width - buffer->Width);
>>> +   if (*srcX + *width > clip_width)
>>> +      *width -= (*srcX + *width - clip_width);
>>>
>>>      if (*width <= 0)
>>>         return GL_FALSE;
>>> @@ -707,8 +719,8 @@ _mesa_clip_readpixels(const struct gl_context *ctx,
>>>         *srcY = 0;
>>>      }
>>>      /* top clipping */
>>> -   if (*srcY + *height > (GLsizei) buffer->Height)
>>> -      *height -= (*srcY + *height - buffer->Height);
>>> +   if (*srcY + *height > clip_height)
>>> +      *height -= (*srcY + *height - clip_height);
>>>
>>>      if (*height <= 0)
>>>         return GL_FALSE;
>>>
>>
>> _______________________________________________
>> mesa-stable mailing list
>> mesa-stable at lists.freedesktop.org
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Dstable&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=T0t4QG7chq2ZwJo6wilkFznRSFy-8uDKartPGbomVj8&m=dd3NrKfL_XHyrqdlWxQir1-9ga_AoWHY9Usw18C241Q&s=YER38z62hz31sboT46OuHFaQwj9g6mKGNc_t_4Fd8ww&e=
>>
>>
>
> _______________________________________________
> 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