diff --git a/Source/Core/VideoBackends/D3D12/Render.cpp b/Source/Core/VideoBackends/D3D12/Render.cpp index 4881fec717..cd4785569c 100644 --- a/Source/Core/VideoBackends/D3D12/Render.cpp +++ b/Source/Core/VideoBackends/D3D12/Render.cpp @@ -90,7 +90,7 @@ typedef struct _Nv_Stereo_Image_Header #define NVSTEREO_IMAGE_SIGNATURE 0x4433564e // GX pipeline state -struct +static struct { SamplerState sampler[8]; BlendState blend; @@ -1235,42 +1235,41 @@ void Renderer::SetDitherMode() void Renderer::SetSamplerState(int stage, int tex_index, bool custom_tex) { - SamplerState s_previous_sampler_state[8]; - const FourTexUnits& tex = bpmem.tex[tex_index]; const TexMode0& tm0 = tex.texMode0[stage]; const TexMode1& tm1 = tex.texMode1[stage]; + SamplerState new_state = {}; if (tex_index) stage += 4; if (g_ActiveConfig.bForceFiltering) { - gx_state.sampler[stage].min_filter = 6; // 4 (linear mip) | 2 (linear min) - gx_state.sampler[stage].mag_filter = 1; // linear mag + new_state.min_filter = 6; // 4 (linear min) | 2 (linear mip) + new_state.mag_filter = 1; // linear mag } else { - gx_state.sampler[stage].min_filter = static_cast(tm0.min_filter); - gx_state.sampler[stage].mag_filter = static_cast(tm0.mag_filter); + new_state.min_filter = tm0.min_filter; + new_state.mag_filter = tm0.mag_filter; } - gx_state.sampler[stage].wrap_s = static_cast(tm0.wrap_s); - gx_state.sampler[stage].wrap_t = static_cast(tm0.wrap_t); - gx_state.sampler[stage].max_lod = static_cast(tm1.max_lod); - gx_state.sampler[stage].min_lod = static_cast(tm1.min_lod); - gx_state.sampler[stage].lod_bias = static_cast(tm0.lod_bias); + new_state.wrap_s = tm0.wrap_s; + new_state.wrap_t = tm0.wrap_t; + new_state.max_lod = tm1.max_lod; + new_state.min_lod = tm1.min_lod; + new_state.lod_bias = tm0.lod_bias; // custom textures may have higher resolution, so disable the max_lod if (custom_tex) { - gx_state.sampler[stage].max_lod = 255; + new_state.max_lod = 255; } - if (gx_state.sampler[stage].hex != s_previous_sampler_state[stage].hex) + if (new_state.hex != gx_state.sampler[stage].hex) { + gx_state.sampler[stage].hex = new_state.hex; D3D::command_list_mgr->SetCommandListDirtyState(COMMAND_LIST_STATE_SAMPLERS, true); - s_previous_sampler_state[stage].hex = gx_state.sampler[stage].hex; } }