From fc898d016b329edaa3feb8477c9459d1c382202c Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 8 Nov 2021 17:07:17 +0100 Subject: [PATCH] (GX2) wiiu_gfx_load_texture - make it safer - get rid of unused wiiu pointer; do early return when image is NULL --- gfx/drivers/gx2_gfx.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index 0aee3063b4..2ff2df1dd9 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -1570,16 +1570,20 @@ static void wiiu_gfx_viewport_info(void *data, } static uintptr_t wiiu_gfx_load_texture(void *video_data, void *data, - bool threaded, enum texture_filter_type filter_type) + bool threaded, enum texture_filter_type filter_type) { uint32_t i; - wiiu_video_t *wiiu = (wiiu_video_t *) video_data; - struct texture_image *image = (struct texture_image *)data; + GX2Texture *texture = NULL; + struct texture_image *image = (struct texture_image *)data; - if (!wiiu) + if (!image) return 0; - GX2Texture *texture = calloc(1, sizeof(GX2Texture)); + texture = (GX2Texture*) + calloc(1, sizeof(GX2Texture)); + + if (!texture) + return 0; texture->surface.width = image->width; texture->surface.height = image->height; @@ -1593,13 +1597,18 @@ static uintptr_t wiiu_gfx_load_texture(void *video_data, void *data, GX2CalcSurfaceSizeAndAlignment(&texture->surface); GX2InitTextureRegs(texture); - texture->surface.image = MEM2_alloc(texture->surface.imageSize, texture->surface.alignment); + texture->surface.image = MEM2_alloc( + texture->surface.imageSize, texture->surface.alignment); for (i = 0; (i < image->height) && (i < texture->surface.height); i++) - memcpy((uint32_t *)texture->surface.image + (i * texture->surface.pitch), - image->pixels + (i * image->width), image->width * sizeof(image->pixels)); + memcpy((uint32_t *)texture->surface.image + + (i * texture->surface.pitch), + image->pixels + (i * image->width), + image->width * sizeof(image->pixels)); - GX2Invalidate(GX2_INVALIDATE_MODE_CPU_TEXTURE, texture->surface.image, texture->surface.imageSize); + GX2Invalidate(GX2_INVALIDATE_MODE_CPU_TEXTURE, + texture->surface.image, + texture->surface.imageSize); return (uintptr_t)texture; } @@ -1614,7 +1623,9 @@ static void wiiu_gfx_unload_texture(void *data, MEM2_free(texture->surface.image); free(texture); } -static void wiiu_gfx_set_filtering(void *data, unsigned index, bool smooth, bool ctx_scaling) + +static void wiiu_gfx_set_filtering(void *data, + unsigned index, bool smooth, bool ctx_scaling) { wiiu_video_t *wiiu = (wiiu_video_t *) data; @@ -1630,8 +1641,9 @@ static void wiiu_gfx_apply_state_changes(void *data) wiiu->should_resize = true; } -static void wiiu_gfx_set_texture_frame(void *data, const void *frame, bool rgb32, - unsigned width, unsigned height, float alpha) +static void wiiu_gfx_set_texture_frame(void *data, + const void *frame, bool rgb32, + unsigned width, unsigned height, float alpha) { uint32_t i; const uint16_t *src = NULL;