[Mesa-dev] [PATCH] mesa: don't map depth+stencil buffer twice in glReadPixels()
Brian Paul
brianp at vmware.com
Wed Nov 16 08:57:38 PST 2011
On 11/16/2011 09:54 AM, Vadim Girlin wrote:
> On Wed, 2011-11-16 at 20:41 +0400, Vadim Girlin wrote:
>> On Wed, 2011-11-16 at 07:53 -0700, Brian Paul wrote:
>>> In slow_read_depth_stencil_pixels_separate() we might have separate
>>> depth and stencil buffers or a combined buffer. In the later case,
>>> don't map the buffer twice. This function is used when the depth
>>> scale/bias pixel transfer values are not the defaults.
>>>
>>> Fixes http://bugs.freedesktop.org/show_bug.cgi?id=42963
>>> ---
>>> src/mesa/main/readpix.c | 14 +++++++++++---
>>> 1 files changed, 11 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
>>> index 8550618..0b41de6 100644
>>> --- a/src/mesa/main/readpix.c
>>> +++ b/src/mesa/main/readpix.c
>>> @@ -402,10 +402,16 @@ slow_read_depth_stencil_pixels_separate(struct gl_context *ctx,
>>> GLubyte *depthMap, *stencilMap;
>>> int depthStride, stencilStride, j;
>>>
>>> + /* The depth and stencil buffers might be separate, or a single buffer.
>>> + * If one buffer, only map it once.
>>> + */
>>> ctx->Driver.MapRenderbuffer(ctx, depthRb, x, y, width, height,
>>> GL_MAP_READ_BIT,&depthMap,&depthStride);
>>> - ctx->Driver.MapRenderbuffer(ctx, stencilRb, x, y, width, height,
>>> - GL_MAP_READ_BIT,&stencilMap,&stencilStride);
>>> + if (stencilRb != depthRb) {
>>> + ctx->Driver.MapRenderbuffer(ctx, stencilRb, x, y, width, height,
>>> + GL_MAP_READ_BIT,&stencilMap,
>>> +&stencilStride);
>>> + }
>>>
>>
>> Probably we want the following here:
>>
>> else
>> stencilMap = depthMap;
>>
>>
>
> And I also forgot stencilStride.
>
> Vadim
Thanks for catching that. I'll post a new patch.
-Brian
More information about the mesa-dev
mailing list