st/mesa: properly guard fallback_copy_texsubimage aginst failed maps
Fixes random crashes in some packed_pixel GLES CTS tests Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4592>
This commit is contained in:
@@ -2312,6 +2312,10 @@ fallback_copy_texsubimage(struct gl_context *ctx,
|
||||
PIPE_TRANSFER_READ,
|
||||
srcX, srcY,
|
||||
width, height, &src_trans);
|
||||
if (!map) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexSubImage()");
|
||||
return;
|
||||
}
|
||||
|
||||
if ((baseFormat == GL_DEPTH_COMPONENT ||
|
||||
baseFormat == GL_DEPTH_STENCIL) &&
|
||||
@@ -2324,6 +2328,10 @@ fallback_copy_texsubimage(struct gl_context *ctx,
|
||||
destX, destY, slice,
|
||||
dst_width, dst_height, dst_depth,
|
||||
&transfer);
|
||||
if (!texDest) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexSubImage()");
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (baseFormat == GL_DEPTH_COMPONENT ||
|
||||
baseFormat == GL_DEPTH_STENCIL) {
|
||||
@@ -2371,7 +2379,7 @@ fallback_copy_texsubimage(struct gl_context *ctx,
|
||||
GLfloat *tempSrc =
|
||||
malloc(width * height * 4 * sizeof(GLfloat));
|
||||
|
||||
if (tempSrc && texDest) {
|
||||
if (tempSrc) {
|
||||
const GLint dims = 2;
|
||||
GLint dstRowStride;
|
||||
struct gl_texture_image *texImage = &stImage->base;
|
||||
@@ -2419,6 +2427,7 @@ fallback_copy_texsubimage(struct gl_context *ctx,
|
||||
}
|
||||
|
||||
st_texture_image_unmap(st, stImage, slice);
|
||||
err:
|
||||
pipe->transfer_unmap(pipe, src_trans);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user