From 9e6fecb4ca4b3942254c579b9446ffca484b3a9c Mon Sep 17 00:00:00 2001 From: kd-11 Date: Wed, 11 Mar 2026 01:03:15 +0300 Subject: [PATCH] rsx: Tighten data contract for "external" raw images --- rpcs3/Emu/RSX/GL/GLOverlays.cpp | 10 +++++----- rpcs3/Emu/RSX/GL/GLOverlays.h | 6 +++--- rpcs3/Emu/RSX/Overlays/overlay_controls.cpp | 2 +- rpcs3/Emu/RSX/Overlays/overlay_controls.h | 8 ++++---- rpcs3/Emu/RSX/VK/VKOverlays.cpp | 6 +++--- rpcs3/Emu/RSX/VK/VKOverlays.h | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLOverlays.cpp b/rpcs3/Emu/RSX/GL/GLOverlays.cpp index 6be9aba6a0..9e588d5df2 100644 --- a/rpcs3/Emu/RSX/GL/GLOverlays.cpp +++ b/rpcs3/Emu/RSX/GL/GLOverlays.cpp @@ -220,7 +220,7 @@ namespace gl m_input_filter = gl::filter::linear; } - gl::texture_view* ui_overlay_renderer::load_simple_image(rsx::overlays::image_info_base* desc, bool temp_resource, u32 owner_uid) + gl::texture_view* ui_overlay_renderer::load_simple_image(const rsx::overlays::image_info_base* desc, bool temp_resource, u32 owner_uid) { auto tex = std::make_unique(GL_TEXTURE_2D, desc->w, desc->h, 1, 1, 1, GL_RGBA8, RSX_FORMAT_CLASS_COLOR); tex->copy_from(desc->as_span(), gl::texture::format::rgba, gl::texture::type::uint_8_8_8_8, {}); @@ -236,7 +236,7 @@ namespace gl } else { - const u64 key = reinterpret_cast(desc); + const u64 key = reinterpret_cast(desc); temp_image_cache[key] = std::make_pair(owner_uid, std::move(tex)); temp_view_cache[key] = std::move(view); } @@ -287,7 +287,7 @@ namespace gl } } - gl::texture_view* ui_overlay_renderer::find_font(rsx::overlays::font* font) + gl::texture_view* ui_overlay_renderer::find_font(const rsx::overlays::font* font) { const auto font_size = font->get_glyph_data_dimensions(); @@ -320,7 +320,7 @@ namespace gl return result; } - gl::texture_view* ui_overlay_renderer::find_temp_image(rsx::overlays::image_info_base* desc, u32 owner_uid) + gl::texture_view* ui_overlay_renderer::find_temp_image(const rsx::overlays::image_info_base* desc, u32 owner_uid) { const bool dirty = std::exchange(desc->dirty, false); const u64 key = reinterpret_cast(desc); @@ -431,7 +431,7 @@ namespace gl } case rsx::overlays::image_resource_id::raw_image: { - cmd_->bind_texture(31, GL_TEXTURE_2D, find_temp_image(static_cast(cmd.config.external_data_ref), ui.uid)->id()); + cmd_->bind_texture(31, GL_TEXTURE_2D, find_temp_image(static_cast(cmd.config.external_data_ref), ui.uid)->id()); break; } case rsx::overlays::image_resource_id::font_file: diff --git a/rpcs3/Emu/RSX/GL/GLOverlays.h b/rpcs3/Emu/RSX/GL/GLOverlays.h index 96478a161e..8ccfd67305 100644 --- a/rpcs3/Emu/RSX/GL/GLOverlays.h +++ b/rpcs3/Emu/RSX/GL/GLOverlays.h @@ -75,16 +75,16 @@ namespace gl ui_overlay_renderer(); - gl::texture_view* load_simple_image(rsx::overlays::image_info_base* desc, bool temp_resource, u32 owner_uid); + gl::texture_view* load_simple_image(const rsx::overlays::image_info_base* desc, bool temp_resource, u32 owner_uid); void create(); void destroy(); void remove_temp_resources(u64 key); - gl::texture_view* find_font(rsx::overlays::font* font); + gl::texture_view* find_font(const rsx::overlays::font* font); - gl::texture_view* find_temp_image(rsx::overlays::image_info_base* desc, u32 owner_uid); + gl::texture_view* find_temp_image(const rsx::overlays::image_info_base* desc, u32 owner_uid); void set_primitive_type(rsx::overlays::primitive_type type); diff --git a/rpcs3/Emu/RSX/Overlays/overlay_controls.cpp b/rpcs3/Emu/RSX/Overlays/overlay_controls.cpp index 103981e1cf..83872e5ff1 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_controls.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_controls.cpp @@ -953,7 +953,7 @@ namespace rsx external_ref = nullptr; } - void image_view::set_raw_image(image_info_base* raw_image) + void image_view::set_raw_image(const image_info_base* raw_image) { image_resource_ref = image_resource_id::raw_image; external_ref = raw_image; diff --git a/rpcs3/Emu/RSX/Overlays/overlay_controls.h b/rpcs3/Emu/RSX/Overlays/overlay_controls.h index 01a5a4487d..ba49c30cc6 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_controls.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_controls.h @@ -35,7 +35,7 @@ namespace rsx { int w = 0, h = 0, channels = 0; int bpp = 0; - bool dirty = false; + mutable bool dirty = false; image_info_base() {} virtual ~image_info_base() {} @@ -108,7 +108,7 @@ namespace rsx u8 texture_ref = image_resource_id::none; font* font_ref = nullptr; - void* external_data_ref = nullptr; + const void* external_data_ref = nullptr; u8 blur_strength = 0; @@ -314,7 +314,7 @@ namespace rsx { protected: u8 image_resource_ref = image_resource_id::none; - void* external_ref = nullptr; + const void* external_ref = nullptr; // Strength of blur effect u8 blur_strength = 0; @@ -325,7 +325,7 @@ namespace rsx compiled_resource& get_compiled() override; void set_image_resource(u8 resource_id); - void set_raw_image(image_info_base* raw_image); + void set_raw_image(const image_info_base* raw_image); void clear_image(); void set_blur_strength(u8 strength); }; diff --git a/rpcs3/Emu/RSX/VK/VKOverlays.cpp b/rpcs3/Emu/RSX/VK/VKOverlays.cpp index c7d971a6a1..55daab4a90 100644 --- a/rpcs3/Emu/RSX/VK/VKOverlays.cpp +++ b/rpcs3/Emu/RSX/VK/VKOverlays.cpp @@ -434,7 +434,7 @@ namespace vk } } - vk::image_view* ui_overlay_renderer::find_font(rsx::overlays::font* font, vk::command_buffer& cmd, vk::data_heap& upload_heap) + vk::image_view* ui_overlay_renderer::find_font(const rsx::overlays::font* font, vk::command_buffer& cmd, vk::data_heap& upload_heap) { const auto image_size = font->get_glyph_data_dimensions(); @@ -462,7 +462,7 @@ namespace vk true, false, bytes.data(), -1); } - vk::image_view* ui_overlay_renderer::find_temp_image(rsx::overlays::image_info_base* desc, vk::command_buffer& cmd, vk::data_heap& upload_heap, u32 owner_uid) + vk::image_view* ui_overlay_renderer::find_temp_image(const rsx::overlays::image_info_base* desc, vk::command_buffer& cmd, vk::data_heap& upload_heap, u32 owner_uid) { const bool dirty = std::exchange(desc->dirty, false); const u64 key = reinterpret_cast(desc); @@ -660,7 +660,7 @@ namespace vk : rsx::overlays::texture_sampling_mode::font3D; break; case rsx::overlays::image_resource_id::raw_image: - src = find_temp_image(static_cast(command.config.external_data_ref), cmd, upload_heap, ui.uid); + src = find_temp_image(static_cast(command.config.external_data_ref), cmd, upload_heap, ui.uid); break; default: src = view_cache[command.config.texture_ref].get(); diff --git a/rpcs3/Emu/RSX/VK/VKOverlays.h b/rpcs3/Emu/RSX/VK/VKOverlays.h index 3a812f1f2c..414c7c4945 100644 --- a/rpcs3/Emu/RSX/VK/VKOverlays.h +++ b/rpcs3/Emu/RSX/VK/VKOverlays.h @@ -153,8 +153,8 @@ namespace vk void remove_temp_resources(u32 key); - vk::image_view* find_font(rsx::overlays::font* font, vk::command_buffer& cmd, vk::data_heap& upload_heap); - vk::image_view* find_temp_image(rsx::overlays::image_info_base* desc, vk::command_buffer& cmd, vk::data_heap& upload_heap, u32 owner_uid); + vk::image_view* find_font(const rsx::overlays::font* font, vk::command_buffer& cmd, vk::data_heap& upload_heap); + vk::image_view* find_temp_image(const rsx::overlays::image_info_base* desc, vk::command_buffer& cmd, vk::data_heap& upload_heap, u32 owner_uid); std::vector get_vertex_inputs() override; std::vector get_fragment_inputs() override;