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;
}
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);
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<u64>(desc);
const u64 key = reinterpret_cast<uintptr_t>(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<u64>(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<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;
}
case rsx::overlays::image_resource_id::font_file:

View file

@ -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);

View file

@ -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;

View file

@ -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);
};

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();
@ -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<u64>(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<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;
default:
src = view_cache[command.config.texture_ref].get();

View file

@ -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<vk::glsl::program_input> get_vertex_inputs() override;
std::vector<vk::glsl::program_input> get_fragment_inputs() override;