The Meta PBO upload path does not exist in 10.4, so we don't need to worry about a backport.
On Tue, Mar 3, 2015 at 6:01 PM, Emil Velikov <emil.l.veli...@gmail.com> wrote: > On 24 February 2015 at 23:20, Laura Ekstrand <la...@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. > > > > Removes the option to use a 2D ARRAY texture for the PBO during upload > and > > download. This option didn't work because the miptree couldn't be set up > > reliably. > > > > v2: Review from Jason Ekstrand and Neil Roberts: > > -Delete the depth parameter from create_texture_for_pbo > > -Abandon the option to create a 2D ARRAY texture in > create_texture_for_pbo > > --- > > src/mesa/drivers/common/meta_tex_subimage.c | 26 > +++++++++++++++++--------- > > 1 file changed, 17 insertions(+), 9 deletions(-) > > > > diff --git a/src/mesa/drivers/common/meta_tex_subimage.c > b/src/mesa/drivers/common/meta_tex_subimage.c > > index 2d2b9d8..b659426 100644 > > --- a/src/mesa/drivers/common/meta_tex_subimage.c > > +++ b/src/mesa/drivers/common/meta_tex_subimage.c > > @@ -44,7 +44,7 @@ > > > > static struct gl_texture_image * > > create_texture_for_pbo(struct gl_context *ctx, bool create_pbo, > > - GLenum pbo_target, int width, int height, int > depth, > > + GLenum pbo_target, int width, int height, > > GLenum format, GLenum type, const void *pixels, > > const struct gl_pixelstore_attrib *packing, > > GLuint *tmp_pbo, GLuint *tmp_tex) > > @@ -57,8 +57,7 @@ create_texture_for_pbo(struct gl_context *ctx, bool > create_pbo, > > struct gl_texture_image *tex_image; > > bool read_only; > > > > - if ((packing->ImageHeight != 0 && packing->ImageHeight != height) || > > - packing->SwapBytes || > > + if (packing->SwapBytes || > > packing->LsbFirst || > > packing->Invert) > > return NULL; > > @@ -99,7 +98,6 @@ create_texture_for_pbo(struct gl_context *ctx, bool > create_pbo, > > > > _mesa_GenTextures(1, tmp_tex); > > tex_obj = _mesa_lookup_texture(ctx, *tmp_tex); > > - tex_obj->Target = depth > 1 ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; > > _mesa_initialize_texture_object(ctx, tex_obj, *tmp_tex, > GL_TEXTURE_2D); > > /* This must be set after _mesa_initialize_texture_object, not > before. */ > > tex_obj->Immutable = GL_TRUE; > > @@ -109,7 +107,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, 1, > > 0, internal_format, pbo_format); > > > > read_only = pbo_target == GL_PIXEL_UNPACK_BUFFER; > > @@ -169,9 +167,14 @@ _mesa_meta_pbo_TexSubImage(struct gl_context *ctx, > GLuint dims, > > return true; > > } > > > > + /* Only accept tightly packed pixels from the user. */ > > + if (packing->ImageHeight != 0 && packing->ImageHeight != height) > > + return false; > > + > > + /* For arrays, use a tall (height * depth) 2D texture. */ > > pbo_tex_image = create_texture_for_pbo(ctx, create_pbo, > > GL_PIXEL_UNPACK_BUFFER, > > - width, height, depth, > > + width, height * depth, > > format, type, pixels, packing, > > &pbo, &pbo_tex); > > if (!pbo_tex_image) > > @@ -225,7 +228,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); > > @@ -285,8 +288,13 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context > *ctx, GLuint dims, > > return true; > > } > > > > + /* Only accept tightly packed pixels from the user. */ > > + if (packing->ImageHeight != 0 && packing->ImageHeight != height) > > + return false; > > + > > + /* For arrays, use a tall (height * depth) 2D texture. */ > > pbo_tex_image = create_texture_for_pbo(ctx, false, > GL_PIXEL_PACK_BUFFER, > > - width, height, depth, > > + width, height * depth, > > format, type, pixels, packing, > > &pbo, &pbo_tex); > > if (!pbo_tex_image) > > @@ -347,7 +355,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); > > } > > > > -- > Hi Laura, > > This patch and 03 from the series, is rather impossible to pick for > the 10.4 series. The code has changed drastically since 3+ months ago. > Can you send over a backport against the 10.4 tree. > > Thanks > Emil >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev