mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-03 21:41:26 +12:00
rsx: Fix program invalidation rules
This commit is contained in:
parent
cb743da215
commit
7140e82189
4 changed files with 22 additions and 3 deletions
|
@ -622,9 +622,17 @@ void GLGSRender::begin()
|
||||||
rsx::thread::begin();
|
rsx::thread::begin();
|
||||||
|
|
||||||
if (skip_current_frame || cond_render_ctrl.disable_rendering())
|
if (skip_current_frame || cond_render_ctrl.disable_rendering())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
init_buffers(rsx::framebuffer_creation_context::context_draw);
|
init_buffers(rsx::framebuffer_creation_context::context_draw);
|
||||||
|
|
||||||
|
if (m_graphics_state & rsx::pipeline_state::invalidate_pipeline_bits)
|
||||||
|
{
|
||||||
|
// Shaders need to be reloaded.
|
||||||
|
m_program = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGSRender::end()
|
void GLGSRender::end()
|
||||||
|
|
|
@ -896,10 +896,21 @@ void VKGSRender::begin()
|
||||||
|
|
||||||
rsx::thread::begin();
|
rsx::thread::begin();
|
||||||
|
|
||||||
if (skip_current_frame || swapchain_unavailable || cond_render_ctrl.disable_rendering())
|
if (skip_current_frame ||
|
||||||
|
swapchain_unavailable ||
|
||||||
|
cond_render_ctrl.disable_rendering())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
init_buffers(rsx::framebuffer_creation_context::context_draw);
|
init_buffers(rsx::framebuffer_creation_context::context_draw);
|
||||||
|
|
||||||
|
if (m_graphics_state & rsx::pipeline_state::invalidate_pipeline_bits)
|
||||||
|
{
|
||||||
|
// Shaders need to be reloaded.
|
||||||
|
m_prev_program = m_program;
|
||||||
|
m_program = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKGSRender::end()
|
void VKGSRender::end()
|
||||||
|
|
|
@ -1731,7 +1731,6 @@ bool VKGSRender::load_program()
|
||||||
|
|
||||||
auto &vertex_program = current_vertex_program;
|
auto &vertex_program = current_vertex_program;
|
||||||
auto &fragment_program = current_fragment_program;
|
auto &fragment_program = current_fragment_program;
|
||||||
auto old_program = m_program;
|
|
||||||
|
|
||||||
vk::pipeline_props properties{};
|
vk::pipeline_props properties{};
|
||||||
|
|
||||||
|
@ -1929,7 +1928,7 @@ bool VKGSRender::load_program()
|
||||||
|
|
||||||
if (!m_program && (shadermode == shader_mode::async_with_interpreter || shadermode == shader_mode::interpreter_only))
|
if (!m_program && (shadermode == shader_mode::async_with_interpreter || shadermode == shader_mode::interpreter_only))
|
||||||
{
|
{
|
||||||
if (!m_shader_interpreter.is_interpreter(old_program))
|
if (!m_shader_interpreter.is_interpreter(m_prev_program))
|
||||||
{
|
{
|
||||||
m_interpreter_state = rsx::invalidate_pipeline_bits;
|
m_interpreter_state = rsx::invalidate_pipeline_bits;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ private:
|
||||||
const VKFragmentProgram *m_fragment_prog = nullptr;
|
const VKFragmentProgram *m_fragment_prog = nullptr;
|
||||||
const VKVertexProgram *m_vertex_prog = nullptr;
|
const VKVertexProgram *m_vertex_prog = nullptr;
|
||||||
vk::glsl::program *m_program = nullptr;
|
vk::glsl::program *m_program = nullptr;
|
||||||
|
vk::glsl::program *m_prev_program = nullptr;
|
||||||
vk::pipeline_props m_pipeline_properties;
|
vk::pipeline_props m_pipeline_properties;
|
||||||
|
|
||||||
vk::texture_cache m_texture_cache;
|
vk::texture_cache m_texture_cache;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue