GSDX: Removal of Nvidia hack.

- Hack no longer required as an option as a safe and simple workaround has been discovered which seems to work without modifying any vertices.
This commit is contained in:
refraction 2015-05-28 21:41:02 +01:00
parent 910dcfafdd
commit 8f54da5fd3
9 changed files with 23 additions and 44 deletions

View File

@ -34,8 +34,6 @@ GSDevice11::GSDevice11()
FXAA_Compiled = false; FXAA_Compiled = false;
ExShader_Compiled = false; ExShader_Compiled = false;
UserHacks_NVIDIAHack = !!theApp.GetConfig("UserHacks_NVIDIAHack", 0) && !!theApp.GetConfig("UserHacks", 0);
m_state.topology = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED; m_state.topology = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED;
m_state.bf = -1; m_state.bf = -1;
} }
@ -661,17 +659,7 @@ void GSDevice11::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture*
{GSVector4(right, bottom, 0.5f, 1.0f), GSVector2(sRect.z, sRect.w)}, {GSVector4(right, bottom, 0.5f, 1.0f), GSVector2(sRect.z, sRect.w)},
}; };
/* NVIDIA HACK!!!!
For some reason this function ball's up on drivers after 320.18 causing a weird stretching issue.
The only way around this seems to be adding a small value to the x, y coords for part of the
vertex data but doing it only on the first vertex of the 4 seems to do it (it doesn't seem to matter)*/
if(UserHacks_NVIDIAHack)
{
//Smallest value i could get away with before it starts stretching again :(
vertices[0].p.x += 0.000002f;
vertices[0].p.y += 0.000002f;
}
/*END OF HACK*/
IASetVertexBuffer(vertices, sizeof(vertices[0]), countof(vertices)); IASetVertexBuffer(vertices, sizeof(vertices[0]), countof(vertices));
IASetInputLayout(m_convert.il); IASetInputLayout(m_convert.il);
@ -681,9 +669,21 @@ void GSDevice11::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture*
VSSetShader(m_convert.vs, NULL); VSSetShader(m_convert.vs, NULL);
// gs
GSSetShader(NULL); // gs
/* NVIDIA HACK!!!!
Not sure why, but having the Geometry shader disabled causes the strange stretching in recent drivers*/
GSSelector sel;
sel.iip = 0; //Don't use shading for stretching, we're just passing through
sel.prim = 2; //Triangle Strip
SetupGS(sel);
//old code - GSSetShader(NULL);
/*END OF HACK*/
//
// ps // ps

View File

@ -87,7 +87,6 @@ public: // TODO
bool FXAA_Compiled; bool FXAA_Compiled;
bool ExShader_Compiled; bool ExShader_Compiled;
bool UserHacks_NVIDIAHack;
struct struct
{ {

View File

@ -62,11 +62,6 @@ const char* dialog_message(int ID, bool* updateText) {
return "Extend stencil based emulation of destination alpha to perform stencil operations while drawing.\n\n" return "Extend stencil based emulation of destination alpha to perform stencil operations while drawing.\n\n"
"Improves many shadows which are normally overdrawn in parts, may affect other effects.\n" "Improves many shadows which are normally overdrawn in parts, may affect other effects.\n"
"Will disable partial transparency in some games or even prevent drawing some elements altogether."; "Will disable partial transparency in some games or even prevent drawing some elements altogether.";
case IDC_CHECK_NVIDIA_HACK:
return "This is a hack to work around problems with recent NVIDIA drivers causing odd stretching problems in DirectX 11 only "
"when using Upscaling.\n\n"
"Try not to use this unless your game Videos or 2D screens are stretching outside the frame.\n\n"
"If you have an AMD/ATi graphics card you should not need this.";
case IDC_CHECK_DISABLE_ALL_HACKS: case IDC_CHECK_DISABLE_ALL_HACKS:
return "FOR TESTING ONLY!!\n\n" return "FOR TESTING ONLY!!\n\n"
"Disable all CRC hacks - will break many games. Overrides CrcHacksExclusion at gsdx.ini\n" "Disable all CRC hacks - will break many games. Overrides CrcHacksExclusion at gsdx.ini\n"

View File

@ -53,7 +53,6 @@ enum {
IDC_STATIC_MSAA, IDC_STATIC_MSAA,
IDC_AGGRESSIVECRC, IDC_AGGRESSIVECRC,
IDC_ALPHASTENCIL, IDC_ALPHASTENCIL,
IDC_CHECK_NVIDIA_HACK,
IDC_CHECK_DISABLE_ALL_HACKS, IDC_CHECK_DISABLE_ALL_HACKS,
IDC_ALIGN_SPRITE, IDC_ALIGN_SPRITE,
IDC_ROUND_SPRITE, IDC_ROUND_SPRITE,

View File

@ -599,7 +599,6 @@ void GSHacksDlg::OnInit()
CheckDlgButton(m_hWnd, IDC_WILDHACK, theApp.GetConfig("UserHacks_WildHack", 0)); CheckDlgButton(m_hWnd, IDC_WILDHACK, theApp.GetConfig("UserHacks_WildHack", 0));
CheckDlgButton(m_hWnd, IDC_AGGRESSIVECRC, theApp.GetConfig("UserHacks_AggressiveCRC", 0)); CheckDlgButton(m_hWnd, IDC_AGGRESSIVECRC, theApp.GetConfig("UserHacks_AggressiveCRC", 0));
CheckDlgButton(m_hWnd, IDC_ALPHASTENCIL, theApp.GetConfig("UserHacks_AlphaStencil", 0)); CheckDlgButton(m_hWnd, IDC_ALPHASTENCIL, theApp.GetConfig("UserHacks_AlphaStencil", 0));
CheckDlgButton(m_hWnd, IDC_CHECK_NVIDIA_HACK, theApp.GetConfig("UserHacks_NVIDIAHack", 0));
CheckDlgButton(m_hWnd, IDC_CHECK_DISABLE_ALL_HACKS, theApp.GetConfig("UserHacks_DisableCrcHacks", 0)); CheckDlgButton(m_hWnd, IDC_CHECK_DISABLE_ALL_HACKS, theApp.GetConfig("UserHacks_DisableCrcHacks", 0));
CheckDlgButton(m_hWnd, IDC_ROUND_SPRITE, theApp.GetConfig("UserHacks_round_sprite_offset", 0)); CheckDlgButton(m_hWnd, IDC_ROUND_SPRITE, theApp.GetConfig("UserHacks_round_sprite_offset", 0));
CheckDlgButton(m_hWnd, IDC_ALIGN_SPRITE, theApp.GetConfig("UserHacks_align_sprite_X", 0)); CheckDlgButton(m_hWnd, IDC_ALIGN_SPRITE, theApp.GetConfig("UserHacks_align_sprite_X", 0));
@ -663,7 +662,6 @@ bool GSHacksDlg::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
theApp.SetConfig("UserHacks_WildHack", (int)IsDlgButtonChecked(m_hWnd, IDC_WILDHACK)); theApp.SetConfig("UserHacks_WildHack", (int)IsDlgButtonChecked(m_hWnd, IDC_WILDHACK));
theApp.SetConfig("UserHacks_AggressiveCRC", (int)IsDlgButtonChecked(m_hWnd, IDC_AGGRESSIVECRC)); theApp.SetConfig("UserHacks_AggressiveCRC", (int)IsDlgButtonChecked(m_hWnd, IDC_AGGRESSIVECRC));
theApp.SetConfig("UserHacks_AlphaStencil", (int)IsDlgButtonChecked(m_hWnd, IDC_ALPHASTENCIL)); theApp.SetConfig("UserHacks_AlphaStencil", (int)IsDlgButtonChecked(m_hWnd, IDC_ALPHASTENCIL));
theApp.SetConfig("UserHacks_NVIDIAHack", (int)IsDlgButtonChecked(m_hWnd, IDC_CHECK_NVIDIA_HACK));
theApp.SetConfig("UserHacks_DisableCrcHacks", (int)IsDlgButtonChecked(m_hWnd, IDC_CHECK_DISABLE_ALL_HACKS)); theApp.SetConfig("UserHacks_DisableCrcHacks", (int)IsDlgButtonChecked(m_hWnd, IDC_CHECK_DISABLE_ALL_HACKS));
theApp.SetConfig("UserHacks_round_sprite_offset", (int)IsDlgButtonChecked(m_hWnd, IDC_ROUND_SPRITE)); theApp.SetConfig("UserHacks_round_sprite_offset", (int)IsDlgButtonChecked(m_hWnd, IDC_ROUND_SPRITE));
theApp.SetConfig("Userhacks_align_sprite_X", (int)IsDlgButtonChecked(m_hWnd, IDC_ALIGN_SPRITE)); theApp.SetConfig("Userhacks_align_sprite_X", (int)IsDlgButtonChecked(m_hWnd, IDC_ALIGN_SPRITE));

View File

@ -28,7 +28,6 @@ GSTextureCache::GSTextureCache(GSRenderer* r)
m_spritehack = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_SpriteHack", 0) : 0; m_spritehack = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_SpriteHack", 0) : 0;
UserHacks_HalfPixelOffset = !!theApp.GetConfig("UserHacks", 0) && !!theApp.GetConfig("UserHacks_HalfPixelOffset", 0); UserHacks_HalfPixelOffset = !!theApp.GetConfig("UserHacks", 0) && !!theApp.GetConfig("UserHacks_HalfPixelOffset", 0);
UserHacks_NVIDIAHack = !!theApp.GetConfig("UserHacks_NVIDIAHack", 0) && !!theApp.GetConfig("UserHacks", 0);
m_paltex = !!theApp.GetConfig("paltex", 0); m_paltex = !!theApp.GetConfig("paltex", 0);
m_temp = (uint8*)_aligned_malloc(1024 * 1024 * sizeof(uint32), 32); m_temp = (uint8*)_aligned_malloc(1024 * 1024 * sizeof(uint32), 32);
@ -244,19 +243,11 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(const GIFRegTEX0& TEX0, int
} }
if(ww > 0 && hh > 0) if(ww > 0 && hh > 0)
{
if(UserHacks_NVIDIAHack)
{
//Nvidia hackage!! to revert to original remove both " - 0.01f"'s
dst->m_texture->SetScale(GSVector2((float)w / ww - 0.01f, (float)h / hh - 0.01f));
}
else
{ {
dst->m_texture->SetScale(GSVector2((float)w / ww, (float)h / hh)); dst->m_texture->SetScale(GSVector2((float)w / ww, (float)h / hh));
} }
} }
} }
}
if(used) if(used)
{ {

View File

@ -28,7 +28,6 @@ class GSTextureCache
{ {
public: public:
enum {RenderTarget, DepthStencil}; enum {RenderTarget, DepthStencil};
bool UserHacks_NVIDIAHack;
class Surface : public GSAlignedClass<32> class Surface : public GSAlignedClass<32>
{ {

View File

@ -110,17 +110,16 @@ BEGIN
LTEXT "TEXT_GOES_HERE",IDC_HACK_DESCRIPTION,102,20,199,192 LTEXT "TEXT_GOES_HERE",IDC_HACK_DESCRIPTION,102,20,199,192
CONTROL "Aggressive-CRC",IDC_AGGRESSIVECRC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,119,66,10 CONTROL "Aggressive-CRC",IDC_AGGRESSIVECRC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,119,66,10
CONTROL "Alpha Stencil",IDC_ALPHASTENCIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,136,66,10 CONTROL "Alpha Stencil",IDC_ALPHASTENCIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,136,66,10
CONTROL "Disable CRCs",IDC_CHECK_DISABLE_ALL_HACKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,168,58,10 CONTROL "Disable CRCs",IDC_CHECK_DISABLE_ALL_HACKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,152,58,10
CONTROL "Round Sprite",IDC_ROUND_SPRITE,"Button",BS_AUTO3STATE | WS_TABSTOP,14,184,66,10 CONTROL "Round Sprite",IDC_ROUND_SPRITE,"Button",BS_AUTO3STATE | WS_TABSTOP,14,168,66,10
CONTROL "Align Sprite",IDC_ALIGN_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,200,60,10 CONTROL "Align Sprite",IDC_ALIGN_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,184,60,10
CONTROL "Auto-skip depth",IDC_AUTO_SKIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,216,62,10 CONTROL "Auto-skip depth",IDC_AUTO_SKIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,200,62,10
LTEXT "TC Offset X",IDC_STATIC_TCOFFSETX,14,234,37,8 LTEXT "TC Offset X",IDC_STATIC_TCOFFSETX,14,234,37,8
EDITTEXT IDC_TCOFFSETX2,53,232,35,14,ES_RIGHT | ES_AUTOHSCROLL EDITTEXT IDC_TCOFFSETX2,53,232,35,14,ES_RIGHT | ES_AUTOHSCROLL
CONTROL "",IDC_TCOFFSETX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,86,232,11,14 CONTROL "",IDC_TCOFFSETX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,86,232,11,14
EDITTEXT IDC_TCOFFSETY2,53,249,35,14,ES_RIGHT | ES_AUTOHSCROLL EDITTEXT IDC_TCOFFSETY2,53,249,35,14,ES_RIGHT | ES_AUTOHSCROLL
CONTROL "",IDC_TCOFFSETY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,86,249,11,14 CONTROL "",IDC_TCOFFSETY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,86,249,11,14
LTEXT "TC Offset Y",IDC_STATIC_TCOFFSETY,14,251,37,8 LTEXT "TC Offset Y",IDC_STATIC_TCOFFSETY,14,251,37,8
CONTROL "NVIDIA Hack",IDC_CHECK_NVIDIA_HACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,152,57,10
END END
IDD_SHADEBOOST DIALOGEX 0, 0, 316, 129 IDD_SHADEBOOST DIALOGEX 0, 0, 316, 129

View File

@ -69,7 +69,6 @@
#define IDC_TCOFFSETY 2084 #define IDC_TCOFFSETY 2084
#define IDC_TCOFFSETY2 2085 #define IDC_TCOFFSETY2 2085
#define IDC_FXAA 2086 #define IDC_FXAA 2086
#define IDC_CHECK_NVIDIA_HACK 2087
#define IDC_SHADER_FX 2088 #define IDC_SHADER_FX 2088
#define IDC_ANISOTROPIC 2089 #define IDC_ANISOTROPIC 2089
#define IDC_AFCOMBO 2090 #define IDC_AFCOMBO 2090