diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index ed5b3ff231..da6eff76b6 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -28,6 +28,7 @@ cfg::bool_entry g_cfg_rsx_vsync(cfg::root.video, "VSync"); cfg::bool_entry g_cfg_rsx_debug_output(cfg::root.video, "Debug output"); cfg::bool_entry g_cfg_rsx_overlay(cfg::root.video, "Debug overlay"); cfg::bool_entry g_cfg_rsx_gl_legacy_buffers(cfg::root.video, "Use Legacy OpenGL Buffers (Debug)"); +cfg::bool_entry g_cfg_rsx_use_gpu_texture_scaling(cfg::root.video, "Use GPU texture scaling"); bool user_asked_for_frame_capture = false; rsx::frame_capture_data frame_debug; diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index cde5cfd4e5..079c2ca928 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -23,6 +23,8 @@ cfg::map_entry g_cfg_rsx_frame_limit(cfg::root.video, "Frame limit", { "Auto", -1. }, }); +extern cfg::bool_entry g_cfg_rsx_use_gpu_texture_scaling; + namespace rsx { rsx_state method_registers; @@ -573,7 +575,7 @@ namespace rsx } } - if (dst_dma == CELL_GCM_CONTEXT_DMA_MEMORY_FRAME_BUFFER) + if (g_cfg_rsx_use_gpu_texture_scaling && dst_dma == CELL_GCM_CONTEXT_DMA_MEMORY_FRAME_BUFFER) { //For now, only use this for actual scaled images, there are use cases that should not go through 3d engine, e.g program ucode transfer //TODO: Figure out more instances where we can use this without problems diff --git a/rpcs3/Gui/SettingsDialog.cpp b/rpcs3/Gui/SettingsDialog.cpp index 51e648f206..b17962534e 100644 --- a/rpcs3/Gui/SettingsDialog.cpp +++ b/rpcs3/Gui/SettingsDialog.cpp @@ -322,6 +322,7 @@ SettingsDialog::SettingsDialog(wxWindow* parent, const std::string& path) wxCheckBox* chbox_gs_debug_output = new wxCheckBox(p_graphics, wxID_ANY, "Debug Output"); wxCheckBox* chbox_gs_overlay = new wxCheckBox(p_graphics, wxID_ANY, "Debug Overlay"); wxCheckBox* chbox_gs_gl_legacy_buffers = new wxCheckBox(p_graphics, wxID_ANY, "Use Legacy OpenGL Buffers"); + wxCheckBox* chbox_gs_gpu_texture_scaling = new wxCheckBox(p_graphics, wxID_ANY, "Use GPU texture scaling"); wxCheckBox* chbox_audio_dump = new wxCheckBox(p_audio, wxID_ANY, "Dump to file"); wxCheckBox* chbox_audio_conv = new wxCheckBox(p_audio, wxID_ANY, "Convert to 16 bit"); wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_misc, wxID_ANY, "Exit RPCS3 when process finishes"); @@ -399,6 +400,7 @@ SettingsDialog::SettingsDialog(wxWindow* parent, const std::string& path) pads.emplace_back(std::make_unique(cfg_location{ "Video", "Debug output" }, chbox_gs_debug_output)); pads.emplace_back(std::make_unique(cfg_location{ "Video", "Debug overlay" }, chbox_gs_overlay)); pads.emplace_back(std::make_unique(cfg_location{ "Video", "Use Legacy OpenGL Buffers (Debug)" }, chbox_gs_gl_legacy_buffers)); + pads.emplace_back(std::make_unique(cfg_location{ "Video", "Use GPU texture scaling" }, chbox_gs_gpu_texture_scaling)); pads.emplace_back(std::make_unique(cfg_location{ "Audio", "Renderer" }, cbox_audio_out)); pads.emplace_back(std::make_unique(cfg_location{ "Audio", "Dump to file" }, chbox_audio_dump)); @@ -495,6 +497,7 @@ SettingsDialog::SettingsDialog(wxWindow* parent, const std::string& path) s_subpanel_graphics2->Add(chbox_gs_overlay, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics2->Add(chbox_gs_log_prog, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics2->Add(chbox_gs_vsync, wxSizerFlags().Border(wxALL, 5).Expand()); + s_subpanel_graphics2->Add(chbox_gs_gpu_texture_scaling, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(s_subpanel_graphics1); s_subpanel_graphics->Add(s_subpanel_graphics2);