From cb895e05c57bfff130dec5d73d13e8d51f3d8dfe Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Tue, 15 Jul 2025 14:44:05 +0200 Subject: [PATCH] defer texture delete to avoid overwriting the texture during a frame --- CONFIG/vita/cxml/config_plugin.xml | 287 +++++++++++++++++- CONFIG/vita/cxml/locale/en.xml | 38 +++ CONFIG/vita/cxml/textures/shark.png | Bin 0 -> 15334 bytes CONFIG/vita/cxml/textures/tex_settings_bg.gim | Bin 0 -> 9936 bytes CONFIG/vita/src/main.cpp | 8 +- miniwin/src/d3drm/backends/gxm/renderer.cpp | 63 ++-- miniwin/src/internal/d3drmrenderer_gxm.h | 17 +- 7 files changed, 357 insertions(+), 56 deletions(-) create mode 100644 CONFIG/vita/cxml/locale/en.xml create mode 100644 CONFIG/vita/cxml/textures/shark.png create mode 100644 CONFIG/vita/cxml/textures/tex_settings_bg.gim diff --git a/CONFIG/vita/cxml/config_plugin.xml b/CONFIG/vita/cxml/config_plugin.xml index d6f66d71..2bce7c2e 100644 --- a/CONFIG/vita/cxml/config_plugin.xml +++ b/CONFIG/vita/cxml/config_plugin.xml @@ -1,13 +1,229 @@ - + + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -16,18 +232,71 @@ - - - + + + + + + + + + + + + + + + + + + + + + + - + + + + + + \ No newline at end of file diff --git a/CONFIG/vita/cxml/locale/en.xml b/CONFIG/vita/cxml/locale/en.xml new file mode 100644 index 00000000..79bb95af --- /dev/null +++ b/CONFIG/vita/cxml/locale/en.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CONFIG/vita/cxml/textures/shark.png b/CONFIG/vita/cxml/textures/shark.png new file mode 100644 index 0000000000000000000000000000000000000000..58b96386644318f0f0de9fb705508bfe1012c882 GIT binary patch literal 15334 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 literal 0 HcmV?d00001 diff --git a/CONFIG/vita/cxml/textures/tex_settings_bg.gim b/CONFIG/vita/cxml/textures/tex_settings_bg.gim new file mode 100644 index 0000000000000000000000000000000000000000..ee68e0ee3d0bfa9b79216d7f78250ff071349263 GIT binary patch literal 9936 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 literal 0 HcmV?d00001 diff --git a/CONFIG/vita/src/main.cpp b/CONFIG/vita/src/main.cpp index f881dd14..b856b664 100644 --- a/CONFIG/vita/src/main.cpp +++ b/CONFIG/vita/src/main.cpp @@ -12,11 +12,15 @@ void loadPluginCB(paf::Plugin* plugin) paf::Plugin::PageOpenParam pageOpenParam; pageOpenParam.option = paf::Plugin::PageOption_None; + plugin->SetLocale(Locale_EN); + paf::ui::Scene* pScene = plugin->PageOpen("page_main", pageOpenParam); g_rootPage = pScene; - paf::ui::Widget* pText = (paf::ui::Text*) pScene->FindChild("test_strings_id"); - pText->SetString(L"Test Text"); + pScene->SetDebugMode(paf::ui::Scene::DEBUG_AUTH_LAYOUT_RULER); + + //paf::ui::Widget* pText = (paf::ui::Text*) pScene->FindChild("title_text"); + //pText->SetString(L"Test Text"); } int paf_main(void) diff --git a/miniwin/src/d3drm/backends/gxm/renderer.cpp b/miniwin/src/d3drm/backends/gxm/renderer.cpp index c83e4d0f..05274899 100644 --- a/miniwin/src/d3drm/backends/gxm/renderer.cpp +++ b/miniwin/src/d3drm/backends/gxm/renderer.cpp @@ -80,12 +80,16 @@ typedef struct GXMVertex { typedef struct GXMDisplayData { void* address; + int index; } GXMDisplayData; static void display_callback(const void* callback_data) { const GXMDisplayData* display_data = (const GXMDisplayData*) callback_data; + GXMRenderer* renderer = static_cast(DDRenderer); + renderer->DeleteTextures(display_data->index); + SceDisplayFrameBuf framebuf; SDL_memset(&framebuf, 0x00, sizeof(SceDisplayFrameBuf)); framebuf.size = sizeof(SceDisplayFrameBuf); @@ -154,7 +158,7 @@ int gxm_library_init() return 0; } -#ifdef WITH_RAZOR +#ifdef GXM_WITH_RAZOR load_razor(); #endif @@ -654,6 +658,7 @@ void GXMContext::swap_display() // display GXMDisplayData displayData; displayData.address = this->displayBuffers[this->backBufferIndex]; + displayData.index = this->backBufferIndex; sceGxmDisplayQueueAddEntry( this->displayBuffersSync[this->frontBufferIndex], this->displayBuffersSync[this->backBufferIndex], @@ -913,21 +918,24 @@ void GXMRenderer::AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* textu [](IDirect3DRMObject* obj, void* arg) { auto* ctx = static_cast(arg); auto& cache = ctx->renderer->m_textures[ctx->textureId]; - for (int i = 0; i < cache.bufferCount; i++) { - if (cache.notifications[i]) { - sceGxmNotificationWait(cache.notifications[i]); - } - void* textureData = sceGxmTextureGetData(&cache.gxmTexture[i]); - gxm->free(textureData); - memset(&cache.gxmTexture[i], 0, sizeof(SceGxmTexture)); - } + ctx->renderer->m_textures_delete[gxm->backBufferIndex].push_back(cache.gxmTexture); cache.texture = nullptr; + memset(&cache.gxmTexture, 0, sizeof(SceGxmTexture)); delete ctx; }, ctx ); } +void GXMRenderer::DeleteTextures(int index) +{ + for(auto& del : this->m_textures_delete[index]) { + void* textureData = sceGxmTextureGetData(&del); + gxm->free(textureData); + } + this->m_textures_delete[index].clear(); +} + static void convertTextureMetadata( SDL_Surface* surface, bool* supportedFormat, @@ -1046,22 +1054,9 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture, bool isUi, float auto& tex = m_textures[i]; if (tex.texture == texture) { if (tex.version != texture->m_version) { - if (tex.bufferCount != GXM_TEXTURE_BUFFER_COUNT) { - for (int i = 1; i < GXM_TEXTURE_BUFFER_COUNT; i++) { - tex.gxmTexture[i] = tex.gxmTexture[0]; - uint8_t* textureData = (uint8_t*) gxm->alloc(textureSize, textureAlignment); - sceGxmTextureSetData(&tex.gxmTexture[i], textureData); - } - tex.bufferCount = GXM_TEXTURE_BUFFER_COUNT; - } - if (tex.bufferCount > 1) { - tex.currentIndex = (tex.currentIndex + 1) % GXM_TEXTURE_BUFFER_COUNT; - } - if (tex.notifications[tex.currentIndex]) { - sceGxmNotificationWait(tex.notifications[tex.currentIndex]); - } - tex.notifications[tex.currentIndex] = &this->fragmentNotifications[this->currentFragmentBufferIndex]; - uint8_t* textureData = (uint8_t*) sceGxmTextureGetData(&tex.gxmTexture[tex.currentIndex]); + sceGxmNotificationWait(tex.notification); + tex.notification = &this->fragmentNotifications[this->currentFragmentBufferIndex]; + uint8_t* textureData = (uint8_t*) sceGxmTextureGetData(&tex.gxmTexture); copySurfaceToGxm(surface, textureData, textureStride, textureSize); tex.version = texture->m_version; } @@ -1107,10 +1102,8 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture, bool isUi, float memset(&tex, 0, sizeof(tex)); tex.texture = texture; tex.version = texture->m_version; - tex.bufferCount = 1; - tex.currentIndex = 0; - tex.gxmTexture[0] = gxmTexture; - tex.notifications[0] = &this->fragmentNotifications[this->currentFragmentBufferIndex]; + tex.gxmTexture = gxmTexture; + tex.notification = &this->fragmentNotifications[this->currentFragmentBufferIndex]; AddTextureDestroyCallback(i, texture); return i; } @@ -1120,16 +1113,20 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture, bool isUi, float memset(&tex, 0, sizeof(tex)); tex.texture = texture; tex.version = texture->m_version; - tex.bufferCount = 1; - tex.currentIndex = 0; - tex.gxmTexture[0] = gxmTexture; - tex.notifications[0] = &this->fragmentNotifications[this->currentFragmentBufferIndex]; + tex.gxmTexture = gxmTexture; + tex.notification = &this->fragmentNotifications[this->currentFragmentBufferIndex]; m_textures.push_back(tex); Uint32 textureId = (Uint32) (m_textures.size() - 1); AddTextureDestroyCallback(textureId, texture); return textureId; } +const SceGxmTexture* GXMRenderer::UseTexture(GXMTextureCacheEntry& texture) { + texture.notification = &this->fragmentNotifications[this->currentFragmentBufferIndex]; + sceGxmSetFragmentTexture(gxm->context, 0, &texture.gxmTexture); + return &texture.gxmTexture; +} + GXMMeshCacheEntry GXMRenderer::GXMUploadMesh(const MeshGroup& meshGroup) { GXMMeshCacheEntry cache{&meshGroup, meshGroup.version}; diff --git a/miniwin/src/internal/d3drmrenderer_gxm.h b/miniwin/src/internal/d3drmrenderer_gxm.h index eade6312..ced0046e 100644 --- a/miniwin/src/internal/d3drmrenderer_gxm.h +++ b/miniwin/src/internal/d3drmrenderer_gxm.h @@ -16,17 +16,14 @@ DEFINE_GUID(GXM_GUID, 0x682656F3, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, #define GXM_VERTEX_BUFFER_COUNT 2 #define GXM_FRAGMENT_BUFFER_COUNT 3 -#define GXM_TEXTURE_BUFFER_COUNT 2 #define GXM_WITH_RAZOR DEBUG struct GXMTextureCacheEntry { IDirect3DRMTexture* texture; Uint32 version; - int bufferCount; - int currentIndex; - SceGxmTexture gxmTexture[GXM_TEXTURE_BUFFER_COUNT]; - SceGxmNotification* notifications[GXM_TEXTURE_BUFFER_COUNT]; + SceGxmTexture gxmTexture; + SceGxmNotification* notification; // latest frame it was used in }; struct GXMMeshCacheEntry { @@ -81,6 +78,7 @@ class GXMRenderer : public Direct3DRMRenderer { void Download(SDL_Surface* target) override; void SetDither(bool dither) override; + void DeleteTextures(int index); private: void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture); void AddMeshDestroyCallback(Uint32 id, IDirect3DRMMesh* mesh); @@ -88,13 +86,7 @@ class GXMRenderer : public Direct3DRMRenderer { GXMMeshCacheEntry GXMUploadMesh(const MeshGroup& meshGroup); void StartScene(); - inline const SceGxmTexture* UseTexture(GXMTextureCacheEntry& texture) - { - texture.notifications[texture.currentIndex] = &this->fragmentNotifications[this->currentFragmentBufferIndex]; - const SceGxmTexture* gxmTexture = &texture.gxmTexture[texture.currentIndex]; - sceGxmSetFragmentTexture(gxm->context, 0, gxmTexture); - return gxmTexture; - } + const SceGxmTexture* UseTexture(GXMTextureCacheEntry& texture); inline GXMVertex2D* QuadVerticesBuffer() { @@ -113,6 +105,7 @@ class GXMRenderer : public Direct3DRMRenderer { std::vector m_meshes; D3DRMMATRIX4D m_projection; std::vector m_lights; + std::vector m_textures_delete[GXM_FRAGMENT_BUFFER_COUNT]; bool transparencyEnabled = false;