With the depth GLint -> GLsizei type fixed, this is Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu>
On Mon, Jul 13, 2015 at 9:21 PM, Brian Paul <bri...@vmware.com> wrote: > For now, pass offsets of zero and width/height/depth equal to the > whole image. > --- > src/mesa/drivers/common/driverfuncs.c | 2 +- > src/mesa/main/dd.h | 9 ++++++--- > src/mesa/main/texgetimage.c | 28 ++++++++++++++++------------ > src/mesa/main/texgetimage.h | 9 ++++++--- > src/mesa/state_tracker/st_cb_texture.c | 2 +- > 5 files changed, 30 insertions(+), 20 deletions(-) > > diff --git a/src/mesa/drivers/common/driverfuncs.c > b/src/mesa/drivers/common/driverfuncs.c > index ce99620..6fe42b1 100644 > --- a/src/mesa/drivers/common/driverfuncs.c > +++ b/src/mesa/drivers/common/driverfuncs.c > @@ -101,7 +101,7 @@ _mesa_init_driver_functions(struct dd_function_table > *driver) > driver->TestProxyTexImage = _mesa_test_proxy_teximage; > driver->CompressedTexImage = _mesa_store_compressed_teximage; > driver->CompressedTexSubImage = _mesa_store_compressed_texsubimage; > - driver->GetCompressedTexImage = _mesa_GetCompressedTexImage_sw; > + driver->GetCompressedTexSubImage = _mesa_GetCompressedTexSubImage_sw; > driver->BindTexture = NULL; > driver->NewTextureObject = _mesa_new_texture_object; > driver->DeleteTexture = _mesa_delete_texture_object; > diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h > index 754abd5..0a54e7a 100644 > --- a/src/mesa/main/dd.h > +++ b/src/mesa/main/dd.h > @@ -335,9 +335,12 @@ struct dd_function_table { > /** > * Called by glGetCompressedTexImage. > */ > - void (*GetCompressedTexImage)(struct gl_context *ctx, > - struct gl_texture_image *texImage, > - GLvoid *data); > + void (*GetCompressedTexSubImage)(struct gl_context *ctx, > + struct gl_texture_image *texImage, > + GLint xoffset, GLint yoffset, > + GLint zoffset, GLsizei width, > + GLint height, GLint depth, > + GLvoid *data); > /*@}*/ > > /** > diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c > index 30a7d06..fb3c2c8 100644 > --- a/src/mesa/main/texgetimage.c > +++ b/src/mesa/main/texgetimage.c > @@ -772,13 +772,16 @@ _mesa_GetTexSubImage_sw(struct gl_context *ctx, > > > /** > - * This is the software fallback for Driver.GetCompressedTexImage(). > + * This is the software fallback for Driver.GetCompressedTexSubImage(). > * All error checking will have been done before this routine is called. > */ > void > -_mesa_GetCompressedTexImage_sw(struct gl_context *ctx, > - struct gl_texture_image *texImage, > - GLvoid *img) > +_mesa_GetCompressedTexSubImage_sw(struct gl_context *ctx, > + struct gl_texture_image *texImage, > + GLint xoffset, GLint yoffset, > + GLint zoffset, GLsizei width, > + GLint height, GLint depth, > + GLvoid *img) > { > const GLuint dimensions = > _mesa_get_texture_dimensions(texImage->TexObject->Target); > @@ -787,10 +790,8 @@ _mesa_GetCompressedTexImage_sw(struct gl_context *ctx, > GLubyte *dest; > > _mesa_compute_compressed_pixelstore(dimensions, texImage->TexFormat, > - texImage->Width, texImage->Height, > - texImage->Depth, > - &ctx->Pack, > - &store); > + width, height, depth, > + &ctx->Pack, &store); > > if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { > /* pack texture image into a PBO */ > @@ -816,8 +817,8 @@ _mesa_GetCompressedTexImage_sw(struct gl_context *ctx, > GLubyte *src; > > /* map src texture buffer */ > - ctx->Driver.MapTextureImage(ctx, texImage, slice, > - 0, 0, texImage->Width, texImage->Height, > + ctx->Driver.MapTextureImage(ctx, texImage, zoffset + slice, > + xoffset, yoffset, width, height, > GL_MAP_READ_BIT, &src, &srcRowStride); > > if (src) { > @@ -828,7 +829,7 @@ _mesa_GetCompressedTexImage_sw(struct gl_context *ctx, > src += srcRowStride; > } > > - ctx->Driver.UnmapTextureImage(ctx, texImage, slice); > + ctx->Driver.UnmapTextureImage(ctx, texImage, zoffset + slice); > > /* Advance to next slice */ > dest += store.TotalBytesPerRow * (store.TotalRowsPerSlice - > store.CopyRowsPerSlice); > @@ -1323,7 +1324,10 @@ _mesa_get_compressed_texture_image(struct gl_context > *ctx, > > _mesa_lock_texture(ctx, texObj); > { > - ctx->Driver.GetCompressedTexImage(ctx, texImage, pixels); > + ctx->Driver.GetCompressedTexSubImage(ctx, texImage, > + 0, 0, 0, > + texImage->Width, texImage->Height, > + texImage->Depth, pixels); > } > _mesa_unlock_texture(ctx, texObj); > } > diff --git a/src/mesa/main/texgetimage.h b/src/mesa/main/texgetimage.h > index 5124851..040495a 100644 > --- a/src/mesa/main/texgetimage.h > +++ b/src/mesa/main/texgetimage.h > @@ -44,9 +44,12 @@ _mesa_GetTexSubImage_sw(struct gl_context *ctx, > struct gl_texture_image *texImage); > > extern void > -_mesa_GetCompressedTexImage_sw(struct gl_context *ctx, > - struct gl_texture_image *texImage, > - GLvoid *data); > +_mesa_GetCompressedTexSubImage_sw(struct gl_context *ctx, > + struct gl_texture_image *texImage, > + GLint xoffset, GLint yoffset, > + GLint zoffset, GLsizei width, > + GLint height, GLint depth, > + GLvoid *data); > > extern void > _mesa_get_compressed_texture_image( struct gl_context *ctx, > diff --git a/src/mesa/state_tracker/st_cb_texture.c > b/src/mesa/state_tracker/st_cb_texture.c > index 8719ab8..715d69c 100644 > --- a/src/mesa/state_tracker/st_cb_texture.c > +++ b/src/mesa/state_tracker/st_cb_texture.c > @@ -1887,7 +1887,7 @@ st_init_texture_functions(struct dd_function_table > *functions) > > /* compressed texture functions */ > functions->CompressedTexImage = st_CompressedTexImage; > - functions->GetCompressedTexImage = _mesa_GetCompressedTexImage_sw; > + functions->GetCompressedTexSubImage = _mesa_GetCompressedTexSubImage_sw; > > functions->NewTextureObject = st_NewTextureObject; > functions->NewTextureImage = st_NewTextureImage; > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev