From 7577ca7e6a41029be3a336a48382e73549573a5d Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Mon, 2 May 2022 13:10:07 -0700 Subject: [PATCH] mesa: Avoid temp images in _mesa_texstore_*_dxt* for stride = 0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We're getting a source stride of 0 here sometimes, which I believe means to just use the natural stride, which is what we wanted anyway. No need to fall back to a temporary image in that case. Reviewed-by: Marek Olšák Part-of: --- src/mesa/main/texcompress_s3tc.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/mesa/main/texcompress_s3tc.c b/src/mesa/main/texcompress_s3tc.c index b6695512dcb..5f41320a67f 100644 --- a/src/mesa/main/texcompress_s3tc.c +++ b/src/mesa/main/texcompress_s3tc.c @@ -59,7 +59,7 @@ _mesa_texstore_rgb_dxt1(TEXSTORE_PARAMS) if (!(srcFormat == GL_RGB || srcFormat == GL_RGBA) || srcType != GL_UNSIGNED_BYTE || ctx->_ImageTransferState || - ALIGN(srcPacking->RowLength, srcPacking->Alignment) != srcWidth || + _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType) != srccomps * srcWidth * sizeof(GLubyte) || srcPacking->SkipImages || srcPacking->SwapBytes) { /* convert image to RGB/GLubyte */ @@ -105,6 +105,7 @@ _mesa_texstore_rgba_dxt1(TEXSTORE_PARAMS) const GLubyte *pixels; GLubyte *dst; const GLubyte *tempImage = NULL; + int rgbaRowStride = 4 * srcWidth * sizeof(GLubyte); assert(dstFormat == MESA_FORMAT_RGBA_DXT1 || dstFormat == MESA_FORMAT_SRGBA_DXT1); @@ -112,12 +113,11 @@ _mesa_texstore_rgba_dxt1(TEXSTORE_PARAMS) if (srcFormat != GL_RGBA || srcType != GL_UNSIGNED_BYTE || ctx->_ImageTransferState || - ALIGN(srcPacking->RowLength, srcPacking->Alignment) != srcWidth || + _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType) != rgbaRowStride || srcPacking->SkipImages || srcPacking->SwapBytes) { /* convert image to RGBA/GLubyte */ GLubyte *tempImageSlices[1]; - int rgbaRowStride = 4 * srcWidth * sizeof(GLubyte); tempImage = malloc(srcWidth * srcHeight * 4 * sizeof(GLubyte)); if (!tempImage) return GL_FALSE; /* out of memory */ @@ -160,6 +160,7 @@ _mesa_texstore_rgba_dxt3(TEXSTORE_PARAMS) const GLubyte *pixels; GLubyte *dst; const GLubyte *tempImage = NULL; + int rgbaRowStride = 4 * srcWidth * sizeof(GLubyte); assert(dstFormat == MESA_FORMAT_RGBA_DXT3 || dstFormat == MESA_FORMAT_SRGBA_DXT3); @@ -167,12 +168,11 @@ _mesa_texstore_rgba_dxt3(TEXSTORE_PARAMS) if (srcFormat != GL_RGBA || srcType != GL_UNSIGNED_BYTE || ctx->_ImageTransferState || - ALIGN(srcPacking->RowLength, srcPacking->Alignment) != srcWidth || + _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType) != rgbaRowStride || srcPacking->SkipImages || srcPacking->SwapBytes) { /* convert image to RGBA/GLubyte */ GLubyte *tempImageSlices[1]; - int rgbaRowStride = 4 * srcWidth * sizeof(GLubyte); tempImage = malloc(srcWidth * srcHeight * 4 * sizeof(GLubyte)); if (!tempImage) return GL_FALSE; /* out of memory */ @@ -214,6 +214,7 @@ _mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS) const GLubyte *pixels; GLubyte *dst; const GLubyte *tempImage = NULL; + int rgbaRowStride = 4 * srcWidth * sizeof(GLubyte); assert(dstFormat == MESA_FORMAT_RGBA_DXT5 || dstFormat == MESA_FORMAT_SRGBA_DXT5); @@ -221,12 +222,11 @@ _mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS) if (srcFormat != GL_RGBA || srcType != GL_UNSIGNED_BYTE || ctx->_ImageTransferState || - ALIGN(srcPacking->RowLength, srcPacking->Alignment) != srcWidth || + _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType) != rgbaRowStride || srcPacking->SkipImages || srcPacking->SwapBytes) { /* convert image to RGBA/GLubyte */ GLubyte *tempImageSlices[1]; - int rgbaRowStride = 4 * srcWidth * sizeof(GLubyte); tempImage = malloc(srcWidth * srcHeight * 4 * sizeof(GLubyte)); if (!tempImage) return GL_FALSE; /* out of memory */