mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
mesa: use single memcpy when strides match in glReadPixels, texstore code
v2: fix indentation Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
da2ac19511
commit
a4019a81ab
2 changed files with 21 additions and 9 deletions
|
|
@ -220,7 +220,7 @@ readpixels_memcpy(struct gl_context *ctx,
|
|||
struct gl_renderbuffer *rb =
|
||||
_mesa_get_read_renderbuffer_for_format(ctx, format);
|
||||
GLubyte *dst, *map;
|
||||
int dstStride, stride, j, texelBytes;
|
||||
int dstStride, stride, j, texelBytes, bytesPerRow;
|
||||
|
||||
/* Fail if memcpy cannot be used. */
|
||||
if (!readpixels_can_use_memcpy(ctx, format, type, packing)) {
|
||||
|
|
@ -239,12 +239,17 @@ readpixels_memcpy(struct gl_context *ctx,
|
|||
}
|
||||
|
||||
texelBytes = _mesa_get_format_bytes(rb->Format);
|
||||
bytesPerRow = texelBytes * width;
|
||||
|
||||
/* memcpy*/
|
||||
for (j = 0; j < height; j++) {
|
||||
memcpy(dst, map, width * texelBytes);
|
||||
dst += dstStride;
|
||||
map += stride;
|
||||
if (dstStride == stride && dstStride == bytesPerRow) {
|
||||
memcpy(dst, map, bytesPerRow * height);
|
||||
} else {
|
||||
for (j = 0; j < height; j++) {
|
||||
memcpy(dst, map, bytesPerRow);
|
||||
dst += dstStride;
|
||||
map += stride;
|
||||
}
|
||||
}
|
||||
|
||||
ctx->Driver.UnmapRenderbuffer(ctx, rb);
|
||||
|
|
|
|||
|
|
@ -1360,10 +1360,17 @@ _mesa_store_compressed_texsubimage(struct gl_context *ctx, GLuint dims,
|
|||
if (dstMap) {
|
||||
|
||||
/* copy rows of blocks */
|
||||
for (i = 0; i < store.CopyRowsPerSlice; i++) {
|
||||
memcpy(dstMap, src, store.CopyBytesPerRow);
|
||||
dstMap += dstRowStride;
|
||||
src += store.TotalBytesPerRow;
|
||||
if (dstRowStride == store.TotalBytesPerRow &&
|
||||
dstRowStride == store.CopyBytesPerRow) {
|
||||
memcpy(dstMap, src, store.CopyBytesPerRow * store.CopyRowsPerSlice);
|
||||
src += store.CopyBytesPerRow * store.CopyRowsPerSlice;
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < store.CopyRowsPerSlice; i++) {
|
||||
memcpy(dstMap, src, store.CopyBytesPerRow);
|
||||
dstMap += dstRowStride;
|
||||
src += store.TotalBytesPerRow;
|
||||
}
|
||||
}
|
||||
|
||||
ctx->Driver.UnmapTextureImage(ctx, texImage, slice + zoffset);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue