rsx: Tighten data contract for "external" raw images

This commit is contained in:
kd-11 2026-03-11 01:03:15 +03:00 committed by kd-11
parent 3194bd3fb4
commit 9e6fecb4ca
6 changed files with 18 additions and 18 deletions

View File

@ -220,7 +220,7 @@ namespace gl
m_input_filter = gl::filter::linear; 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>(GL_TEXTURE_2D, desc->w, desc->h, 1, 1, 1, GL_RGBA8, RSX_FORMAT_CLASS_COLOR); auto tex = std::make_unique<gl::texture>(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, {}); 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 else
{ {
const u64 key = reinterpret_cast<u64>(desc); const u64 key = reinterpret_cast<uintptr_t>(desc);
temp_image_cache[key] = std::make_pair(owner_uid, std::move(tex)); temp_image_cache[key] = std::make_pair(owner_uid, std::move(tex));
temp_view_cache[key] = std::move(view); 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(); const auto font_size = font->get_glyph_data_dimensions();
@ -320,7 +320,7 @@ namespace gl
return result; 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 bool dirty = std::exchange(desc->dirty, false);
const u64 key = reinterpret_cast<u64>(desc); const u64 key = reinterpret_cast<u64>(desc);
@ -431,7 +431,7 @@ namespace gl
} }
case rsx::overlays::image_resource_id::raw_image: case rsx::overlays::image_resource_id::raw_image:
{ {
cmd_->bind_texture(31, GL_TEXTURE_2D, find_temp_image(static_cast<rsx::overlays::image_info_base*>(cmd.config.external_data_ref), ui.uid)->id()); cmd_->bind_texture(31, GL_TEXTURE_2D, find_temp_image(static_cast<const rsx::overlays::image_info_base*>(cmd.config.external_data_ref), ui.uid)->id());
break; break;
} }
case rsx::overlays::image_resource_id::font_file: case rsx::overlays::image_resource_id::font_file:

View File

@ -75,16 +75,16 @@ namespace gl
ui_overlay_renderer(); 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 create();
void destroy(); void destroy();
void remove_temp_resources(u64 key); 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); void set_primitive_type(rsx::overlays::primitive_type type);

View File

@ -953,7 +953,7 @@ namespace rsx
external_ref = nullptr; 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; image_resource_ref = image_resource_id::raw_image;
external_ref = raw_image; external_ref = raw_image;

View File

@ -35,7 +35,7 @@ namespace rsx
{ {
int w = 0, h = 0, channels = 0; int w = 0, h = 0, channels = 0;
int bpp = 0; int bpp = 0;
bool dirty = false; mutable bool dirty = false;
image_info_base() {} image_info_base() {}
virtual ~image_info_base() {} virtual ~image_info_base() {}
@ -108,7 +108,7 @@ namespace rsx
u8 texture_ref = image_resource_id::none; u8 texture_ref = image_resource_id::none;
font* font_ref = nullptr; font* font_ref = nullptr;
void* external_data_ref = nullptr; const void* external_data_ref = nullptr;
u8 blur_strength = 0; u8 blur_strength = 0;
@ -314,7 +314,7 @@ namespace rsx
{ {
protected: protected:
u8 image_resource_ref = image_resource_id::none; u8 image_resource_ref = image_resource_id::none;
void* external_ref = nullptr; const void* external_ref = nullptr;
// Strength of blur effect // Strength of blur effect
u8 blur_strength = 0; u8 blur_strength = 0;
@ -325,7 +325,7 @@ namespace rsx
compiled_resource& get_compiled() override; compiled_resource& get_compiled() override;
void set_image_resource(u8 resource_id); 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 clear_image();
void set_blur_strength(u8 strength); void set_blur_strength(u8 strength);
}; };

View File

@ -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(); const auto image_size = font->get_glyph_data_dimensions();
@ -462,7 +462,7 @@ namespace vk
true, false, bytes.data(), -1); 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 bool dirty = std::exchange(desc->dirty, false);
const u64 key = reinterpret_cast<u64>(desc); const u64 key = reinterpret_cast<u64>(desc);
@ -660,7 +660,7 @@ namespace vk
: rsx::overlays::texture_sampling_mode::font3D; : rsx::overlays::texture_sampling_mode::font3D;
break; break;
case rsx::overlays::image_resource_id::raw_image: case rsx::overlays::image_resource_id::raw_image:
src = find_temp_image(static_cast<rsx::overlays::image_info_base*>(command.config.external_data_ref), cmd, upload_heap, ui.uid); src = find_temp_image(static_cast<const rsx::overlays::image_info_base*>(command.config.external_data_ref), cmd, upload_heap, ui.uid);
break; break;
default: default:
src = view_cache[command.config.texture_ref].get(); src = view_cache[command.config.texture_ref].get();

View File

@ -153,8 +153,8 @@ namespace vk
void remove_temp_resources(u32 key); 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_font(const 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_temp_image(const rsx::overlays::image_info_base* desc, vk::command_buffer& cmd, vk::data_heap& upload_heap, u32 owner_uid);
std::vector<vk::glsl::program_input> get_vertex_inputs() override; std::vector<vk::glsl::program_input> get_vertex_inputs() override;
std::vector<vk::glsl::program_input> get_fragment_inputs() override; std::vector<vk::glsl::program_input> get_fragment_inputs() override;