mirror of
https://github.com/RPCS3/rpcs3.git
synced 2026-06-01 12:15:27 -06:00
rsx: Tighten data contract for "external" raw images
This commit is contained in:
parent
3194bd3fb4
commit
9e6fecb4ca
@ -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:
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user