From e5648d443753d5e7fc30c5a7ff89a30c2cebdf89 Mon Sep 17 00:00:00 2001
From: Epifanov Ivan <[EMAIL REDACTED]>
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 7cfbaf18af368..afa2ee23f8b04 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)