mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-01-29 00:33:01 +00:00
Minor fixes
- vulkan: Do not assume an aux frame context must exist in a well defined state as set in init_buffers() since the request might be external (via overlays path) - gl: Do not bother waiting for idle before servicing external flip requests - gl: Queue overlay cleanup requests to ensure only glthread attempts touching the context - overlays: Do not compute size metrics for invalid/unsupported glyphs
This commit is contained in:
parent
3d9e3a16f1
commit
4f01794713
@ -1237,7 +1237,7 @@ void GLGSRender::flip(int buffer)
|
||||
u32 buffer_height = display_buffers[buffer].height;
|
||||
u32 buffer_pitch = display_buffers[buffer].pitch;
|
||||
|
||||
if (buffer < display_buffers_count && buffer_width && buffer_height && buffer_pitch)
|
||||
if ((u32)buffer < display_buffers_count && buffer_width && buffer_height && buffer_pitch)
|
||||
{
|
||||
// Calculate blit coordinates
|
||||
coordi aspect_ratio;
|
||||
@ -1423,7 +1423,7 @@ void GLGSRender::on_notify_memory_unmapped(u32 address_base, u32 size)
|
||||
}
|
||||
}
|
||||
|
||||
void GLGSRender::do_local_task(bool idle)
|
||||
void GLGSRender::do_local_task(bool /*idle*/)
|
||||
{
|
||||
m_frame->clear_wm_events();
|
||||
|
||||
@ -1444,9 +1444,14 @@ void GLGSRender::do_local_task(bool idle)
|
||||
q.cv.notify_one();
|
||||
}
|
||||
|
||||
if (m_custom_ui)
|
||||
if (m_overlay_cleanup_requests.size())
|
||||
{
|
||||
if (!in_begin_end && idle && native_ui_flip_request.load())
|
||||
m_ui_renderer.remove_temp_resources();
|
||||
m_overlay_cleanup_requests.clear();
|
||||
}
|
||||
else if (m_custom_ui)
|
||||
{
|
||||
if (!in_begin_end && native_ui_flip_request.load())
|
||||
{
|
||||
native_ui_flip_request.store(false);
|
||||
flip((s32)current_display_buffer);
|
||||
@ -1517,5 +1522,6 @@ void GLGSRender::get_occlusion_query_result(rsx::occlusion_query_info* query)
|
||||
|
||||
void GLGSRender::shell_do_cleanup()
|
||||
{
|
||||
m_ui_renderer.remove_temp_resources();
|
||||
}
|
||||
//TODO: Key cleanup requests with UID to identify resources to remove
|
||||
m_overlay_cleanup_requests.push_back(0);
|
||||
}
|
||||
|
@ -307,6 +307,8 @@ private:
|
||||
gl::depth_convert_pass m_depth_converter;
|
||||
gl::ui_overlay_renderer m_ui_renderer;
|
||||
|
||||
std::vector<u64> m_overlay_cleanup_requests;
|
||||
|
||||
std::mutex queue_guard;
|
||||
std::list<work_item> work_queue;
|
||||
|
||||
|
@ -2010,7 +2010,7 @@ void VKGSRender::process_swap_request(frame_context_t *ctx, bool free_resources)
|
||||
ctx->swap_command_buffer = nullptr;
|
||||
}
|
||||
|
||||
void VKGSRender::do_local_task(bool idle)
|
||||
void VKGSRender::do_local_task(bool /*idle*/)
|
||||
{
|
||||
if (m_flush_requests.pending())
|
||||
{
|
||||
@ -2857,10 +2857,10 @@ void VKGSRender::flip(int buffer)
|
||||
if (m_current_frame == &m_aux_frame_context)
|
||||
{
|
||||
m_current_frame = &frame_context_storage[m_current_queue_index];
|
||||
if (m_current_frame->swap_command_buffer && m_current_frame->swap_command_buffer->pending)
|
||||
if (m_current_frame->swap_command_buffer)
|
||||
{
|
||||
//No choice but to wait for the last frame on the dst swapchain image to complete
|
||||
m_current_frame->swap_command_buffer->wait();
|
||||
//Always present if pending swap is present.
|
||||
//Its possible this flip request is triggered by overlays and the flip queue is in undefined state
|
||||
process_swap_request(m_current_frame, true);
|
||||
}
|
||||
|
||||
@ -2967,7 +2967,7 @@ void VKGSRender::flip(int buffer)
|
||||
//Blit contents to screen..
|
||||
vk::image* image_to_flip = nullptr;
|
||||
|
||||
if (buffer < display_buffers_count && buffer_width && buffer_height && buffer_pitch)
|
||||
if ((u32)buffer < display_buffers_count && buffer_width && buffer_height && buffer_pitch)
|
||||
{
|
||||
rsx::tiled_region buffer_region = get_tiled_address(display_buffers[buffer].offset, CELL_GCM_LOCATION_LOCAL);
|
||||
u32 absolute_address = buffer_region.address + buffer_region.base;
|
||||
|
@ -854,7 +854,15 @@ namespace rsx
|
||||
last_word = text_width;
|
||||
}
|
||||
|
||||
renderer->get_char(c, text_width, unused);
|
||||
if ((u32)c > renderer->char_count)
|
||||
{
|
||||
//Non-existent glyph
|
||||
text_width += renderer->em_size;
|
||||
}
|
||||
else
|
||||
{
|
||||
renderer->get_char(c, text_width, unused);
|
||||
}
|
||||
|
||||
if (!ignore_word_wrap && wrap_text && text_width >= w)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user