From e5648d443753d5e7fc30c5a7ff89a30c2cebdf89 Mon Sep 17 00:00:00 2001 From: Epifanov Ivan Date: Wed, 8 Jul 2026 17:10:57 +0300 Subject: [PATCH] VITA: invalidate texture in render state on update (#15957) (cherry picked from commit 425c6a26958bdc0a54f20cfa01048e110d5058bb) --- src/render/vitagxm/SDL_render_vita_gxm.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/render/vitagxm/SDL_render_vita_gxm.c b/src/render/vitagxm/SDL_render_vita_gxm.c index 7cfbaf18af..afa2ee23f8 100644 --- a/src/render/vitagxm/SDL_render_vita_gxm.c +++ b/src/render/vitagxm/SDL_render_vita_gxm.c @@ -336,6 +336,7 @@ static bool VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch) { VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *)texture->internal; + VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; Uint8 *dst; int row, length, dpitch; @@ -422,6 +423,7 @@ static bool VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, } #endif + data->drawstate.texture = NULL; return true; } @@ -435,6 +437,7 @@ static bool VITA_GXM_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *textu Uint8 *dst; int row, length, dpitch; SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; + VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; VITA_GXM_SetYUVProfile(renderer, texture); @@ -497,6 +500,7 @@ static bool VITA_GXM_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *textu } } + data->drawstate.texture = NULL; return true; } @@ -509,6 +513,7 @@ static bool VITA_GXM_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *textur Uint8 *dst; int row, length, dpitch; SDL_Rect UVrect = { rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2 }; + VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; VITA_GXM_SetYUVProfile(renderer, texture); @@ -552,6 +557,7 @@ static bool VITA_GXM_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *textur } } + data->drawstate.texture = NULL; return true; } @@ -580,6 +586,8 @@ static void VITA_GXM_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) // No need to update texture data on ps vita. // VITA_GXM_LockTexture already returns a pointer to the texture pixels buffer. // This really improves framerate when using lock/unlock. + VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal; + data->drawstate.texture = NULL; } static bool VITA_GXM_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) @@ -1259,6 +1267,12 @@ static void VITA_GXM_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture SDL_free(vita_texture); texture->internal = NULL; + if (data->drawstate.texture == texture) { + data->drawstate.texture = NULL; + } + if (data->drawstate.target == texture) { + data->drawstate.target = NULL; + } } static void VITA_GXM_DestroyRenderer(SDL_Renderer *renderer)