diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.h b/rpcs3/Emu/RSX/GL/GLGSRender.h index 8b2caaf194..59a7e075b9 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.h +++ b/rpcs3/Emu/RSX/GL/GLGSRender.h @@ -145,8 +145,6 @@ class GLGSRender : public GSRender, public ::rsx::reports::ZCULL_control shared_mutex m_sampler_mutex; atomic_t m_samplers_dirty = {true}; - std::array, rsx::limits::fragment_textures_count> fs_sampler_state = {}; - std::array, rsx::limits::vertex_textures_count> vs_sampler_state = {}; std::unordered_map> m_null_textures; rsx::simple_array m_scratch_buffer; diff --git a/rpcs3/Emu/RSX/NV47/HW/common.cpp b/rpcs3/Emu/RSX/NV47/HW/common.cpp index b1cb8917c4..a12053b5c6 100644 --- a/rpcs3/Emu/RSX/NV47/HW/common.cpp +++ b/rpcs3/Emu/RSX/NV47/HW/common.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "common.h" +#include "Emu/RSX/Common/TextureUtils.h" #include "Emu/RSX/RSXThread.h" #define RSX(ctx) ctx->rsxthr @@ -100,7 +101,9 @@ namespace rsx ensure(!command_span.empty() && command_span.size() <= count); u32* const dst_regs = ®S(ctx)->registers[reg]; - bool set_dirty = (dst_regs[0] != REGS(ctx)->latch); + bool set_dirty = (dst_regs[0] != REGS(ctx)->latch) || + (RSX(ctx)->fs_sampler_state[texture_index] && + RSX(ctx)->fs_sampler_state[texture_index]->upload_context != rsx::texture_upload_context::shader_read); for (usz i = 1; i < command_span.size(); i++) { diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 6c45e3e48a..71b720bf37 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -248,6 +248,9 @@ namespace rsx program_hash_util::fragment_program_utils::fragment_program_metadata current_fp_metadata = {}; program_hash_util::vertex_program_utils::vertex_program_metadata current_vp_metadata = {}; + std::array, rsx::limits::fragment_textures_count> fs_sampler_state = {}; + std::array, rsx::limits::vertex_textures_count> vs_sampler_state = {}; + std::array get_color_surface_addresses() const; u32 get_zeta_surface_address() const; diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.h b/rpcs3/Emu/RSX/VK/VKGSRender.h index eaf9cc4a44..88e1e2b00c 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.h +++ b/rpcs3/Emu/RSX/VK/VKGSRender.h @@ -81,8 +81,6 @@ private: shared_mutex m_sampler_mutex; atomic_t m_samplers_dirty = { true }; std::unique_ptr m_stencil_mirror_sampler; - std::array, rsx::limits::fragment_textures_count> fs_sampler_state = {}; - std::array, rsx::limits::vertex_textures_count> vs_sampler_state = {}; std::array fs_sampler_handles{}; std::array vs_sampler_handles{};