[Mesa-dev] [PATCH 2/4] common: Correct PBO 2D_ARRAY handling.

Laura Ekstrand laura at jlekstrand.net
Fri Feb 20 17:27:41 PST 2015


There needs to be some corresponding Piglit test to guarantee that skip
pixels is really a problem here.  Otherwise, I'm flying blind trying to fix
it.

On Fri, Feb 20, 2015 at 5:04 PM, Jason Ekstrand <jason at jlekstrand.net>
wrote:

> This is mostly correct and it's a good solution.  The only problem is that
> it doesn't handle the skipRows packing property properly.  This property
> tells the driver the stride (in rows) between image planes in the data.
> Most of the places where depth is used below, we should be using the stride
> (in rows) between images.  Look at the _mesa_get_image_stride familiy of
> functions to see exactly how to handle this.
>
> On Fri, Feb 20, 2015 at 4:30 PM, Laura Ekstrand <laura at jlekstrand.net>
> wrote:
>
>> Changes PBO uploads and downloads to use a tall (height * depth) 2D
>> texture
>> for blitting.  This fixes the bug where 2D_ARRAY, 3D, and CUBE_MAP_ARRAY
>> textures are not properly uploaded and downloaded.
>> ---
>>  src/mesa/drivers/common/meta_tex_subimage.c | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/mesa/drivers/common/meta_tex_subimage.c
>> b/src/mesa/drivers/common/meta_tex_subimage.c
>> index f4f7716..ee3295b 100644
>> --- a/src/mesa/drivers/common/meta_tex_subimage.c
>> +++ b/src/mesa/drivers/common/meta_tex_subimage.c
>> @@ -110,7 +110,7 @@ create_texture_for_pbo(struct gl_context *ctx, bool
>> create_pbo,
>>     internal_format = _mesa_get_format_base_format(pbo_format);
>>
>>     tex_image = _mesa_get_tex_image(ctx, tex_obj, tex_obj->Target, 0);
>> -   _mesa_init_teximage_fields(ctx, tex_image, width, height, depth,
>> +   _mesa_init_teximage_fields(ctx, tex_image, width, height * depth, 1,
>>                                0, internal_format, pbo_format);
>>
>
>>     read_only = pbo_target == GL_PIXEL_UNPACK_BUFFER;
>> @@ -227,7 +227,7 @@ _mesa_meta_pbo_TexSubImage(struct gl_context *ctx,
>> GLuint dims,
>>        _mesa_update_state(ctx);
>>
>>        _mesa_meta_BlitFramebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>> -                                 0, 0, width, height,
>> +                                 0, z * height, width, (z + 1) * height,
>>                                   xoffset, yoffset,
>>                                   xoffset + width, yoffset + height,
>>                                   GL_COLOR_BUFFER_BIT, GL_NEAREST);
>> @@ -349,7 +349,7 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx,
>> GLuint dims,
>>        _mesa_meta_BlitFramebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer,
>>                                   xoffset, yoffset,
>>                                   xoffset + width, yoffset + height,
>> -                                 0, 0, width, height,
>> +                                 0, z * height, width, (z + 1) * height,
>>                                   GL_COLOR_BUFFER_BIT, GL_NEAREST);
>>     }
>>
>> --
>> 2.1.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150220/48643e7d/attachment.html>


More information about the mesa-dev mailing list