diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 9855dea7f8..2442266080 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -400,7 +400,7 @@ void GLGSRender::end() for (int i = 0; i < rsx::limits::fragment_textures_count; ++i) { - if (m_program->uniforms.has_location(rsx::constants::fragment_texture_names[i])) + if (current_fp_metadata.referenced_textures_mask & (1 << i)) { auto sampler_state = static_cast(fs_sampler_state[i].get()); auto &tex = rsx::method_registers.fragment_textures[i]; @@ -436,7 +436,7 @@ void GLGSRender::end() for (int i = 0; i < rsx::limits::vertex_textures_count; ++i) { - if (m_program->uniforms.has_location(rsx::constants::vertex_texture_names[i])) + if (current_vp_metadata.referenced_textures_mask & (1 << i)) { auto sampler_state = static_cast(vs_sampler_state[i].get()); glActiveTexture(GL_TEXTURE0 + rsx::limits::fragment_textures_count + i); diff --git a/rpcs3/Emu/RSX/RSXFIFO.cpp b/rpcs3/Emu/RSX/RSXFIFO.cpp index 098db67102..88d71571d5 100644 --- a/rpcs3/Emu/RSX/RSXFIFO.cpp +++ b/rpcs3/Emu/RSX/RSXFIFO.cpp @@ -242,7 +242,7 @@ namespace rsx if ((cmd & RSX_METHOD_NOP_MASK) == RSX_METHOD_NOP_CMD) { - if (commands.back().reg != RSX_METHOD_NOP_CMD) + if (commands.empty() || commands.back().reg != RSX_METHOD_NOP_CMD) { // Insert one NOP only commands.push_back({ RSX_METHOD_NOP_CMD, 0, get_pointer }); @@ -601,6 +601,7 @@ namespace rsx { m_internal_get = m_ctrl->get; read_ahead(m_fifo_info, m_queue, m_internal_get); + //optimize(m_fifo_info, m_queue); m_ctrl->get = m_internal_get; m_ctrl_tag++; diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index b74332d652..b726ee90d3 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -1266,7 +1266,7 @@ void VKGSRender::end() auto ds = std::get<1>(m_rtts.m_bound_depth_stencil); //Clear any 'dirty' surfaces - possible is a recycled cache surface is used - std::vector buffers_to_clear; + rsx::simple_array buffers_to_clear; buffers_to_clear.reserve(4); //Check for memory clears @@ -1510,7 +1510,7 @@ void VKGSRender::end() for (int i = 0; i < rsx::limits::fragment_textures_count; ++i) { - if (m_program->has_uniform(rsx::constants::fragment_texture_names[i])) + if (current_fp_metadata.referenced_textures_mask & (1 << i)) { if (!rsx::method_registers.fragment_textures[i].enabled()) { @@ -1540,7 +1540,7 @@ void VKGSRender::end() for (int i = 0; i < rsx::limits::vertex_textures_count; ++i) { - if (m_program->has_uniform(rsx::constants::vertex_texture_names[i])) + if (current_vp_metadata.referenced_textures_mask & (1 << i)) { if (!rsx::method_registers.vertex_textures[i].enabled()) { diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.h b/rpcs3/Emu/RSX/VK/VKGSRender.h index 060e22fa99..98d22b9664 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.h +++ b/rpcs3/Emu/RSX/VK/VKGSRender.h @@ -142,7 +142,7 @@ struct command_buffer_chunk: public vk::command_buffer struct occlusion_data { - std::vector indices; + rsx::simple_array indices; command_buffer_chunk* command_buffer_to_wait = nullptr; }; diff --git a/rpcs3/Emu/RSX/VK/VKHelpers.h b/rpcs3/Emu/RSX/VK/VKHelpers.h index 05704b209d..1dcb44264f 100644 --- a/rpcs3/Emu/RSX/VK/VKHelpers.h +++ b/rpcs3/Emu/RSX/VK/VKHelpers.h @@ -2505,7 +2505,8 @@ public: } } - void reset_queries(vk::command_buffer &cmd, std::vector &list) + template class _List> + void reset_queries(vk::command_buffer &cmd, _List &list) { for (const auto index : list) reset_query(cmd, index);