mirror of https://github.com/PCSX2/pcsx2.git
gs-d3d11: Cleanup fxaa and external shader.
Instead of relying on bools for checks rely on the pixel shader pointer, also merge the functions.
This commit is contained in:
parent
97bfe08c04
commit
043b5d351f
|
@ -25,9 +25,6 @@ GSDevice11::GSDevice11()
|
||||||
{
|
{
|
||||||
memset(&m_state, 0, sizeof(m_state));
|
memset(&m_state, 0, sizeof(m_state));
|
||||||
|
|
||||||
FXAA_Compiled = false;
|
|
||||||
ExShader_Compiled = false;
|
|
||||||
|
|
||||||
m_state.topology = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED;
|
m_state.topology = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED;
|
||||||
m_state.bf = -1;
|
m_state.bf = -1;
|
||||||
|
|
||||||
|
@ -903,10 +900,16 @@ void GSDevice11::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool
|
||||||
StretchRect(sTex, sRect, dTex, dRect, m_interlace.ps[shader], m_interlace.cb, linear);
|
StretchRect(sTex, sRect, dTex, dRect, m_interlace.ps[shader], m_interlace.cb, linear);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Included an init function for this also. Just to be safe.
|
void GSDevice11::DoExternalFX(GSTexture* sTex, GSTexture* dTex)
|
||||||
void GSDevice11::InitExternalFX()
|
|
||||||
{
|
{
|
||||||
if (!ExShader_Compiled)
|
GSVector2i s = dTex->GetSize();
|
||||||
|
|
||||||
|
GSVector4 sRect(0, 0, 1, 1);
|
||||||
|
GSVector4 dRect(0, 0, s.x, s.y);
|
||||||
|
|
||||||
|
ExternalFXConstantBuffer cb;
|
||||||
|
|
||||||
|
if (m_shaderfx.ps == nullptr)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -920,37 +923,23 @@ void GSDevice11::InitExternalFX()
|
||||||
|
|
||||||
std::string shader_name(theApp.GetConfigS("shaderfx_glsl"));
|
std::string shader_name(theApp.GetConfigS("shaderfx_glsl"));
|
||||||
std::ifstream fshader(shader_name);
|
std::ifstream fshader(shader_name);
|
||||||
if (fshader.good())
|
if (!fshader.good())
|
||||||
{
|
|
||||||
shader << fshader.rdbuf();
|
|
||||||
const std::string& s = shader.str();
|
|
||||||
std::vector<char> buff(s.begin(), s.end());
|
|
||||||
ShaderMacro sm(m_shader.model);
|
|
||||||
CreateShader(buff, shader_name.c_str(), D3D_COMPILE_STANDARD_FILE_INCLUDE, "ps_main", sm.GetPtr(), &m_shaderfx.ps);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, "GS: External shader '%s' not loaded and will be disabled!\n", shader_name.c_str());
|
fprintf(stderr, "GS: External shader '%s' not loaded and will be disabled!\n", shader_name.c_str());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shader << fshader.rdbuf();
|
||||||
|
const std::string& s = shader.str();
|
||||||
|
std::vector<char> buff(s.begin(), s.end());
|
||||||
|
ShaderMacro sm(m_shader.model);
|
||||||
|
CreateShader(buff, shader_name.c_str(), D3D_COMPILE_STANDARD_FILE_INCLUDE, "ps_main", sm.GetPtr(), &m_shaderfx.ps);
|
||||||
}
|
}
|
||||||
catch (GSRecoverableError)
|
catch (GSRecoverableError)
|
||||||
{
|
{
|
||||||
printf("GS: failed to compile external post-processing shader. \n");
|
printf("GS: Failed to compile external post-processing shader.\n");
|
||||||
}
|
}
|
||||||
ExShader_Compiled = true;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void GSDevice11::DoExternalFX(GSTexture* sTex, GSTexture* dTex)
|
|
||||||
{
|
|
||||||
GSVector2i s = dTex->GetSize();
|
|
||||||
|
|
||||||
GSVector4 sRect(0, 0, 1, 1);
|
|
||||||
GSVector4 dRect(0, 0, s.x, s.y);
|
|
||||||
|
|
||||||
ExternalFXConstantBuffer cb;
|
|
||||||
|
|
||||||
InitExternalFX();
|
|
||||||
|
|
||||||
cb.xyFrame = GSVector2((float)s.x, (float)s.y);
|
cb.xyFrame = GSVector2((float)s.x, (float)s.y);
|
||||||
cb.rcpFrame = GSVector4(1.0f / (float)s.x, 1.0f / (float)s.y, 0.0f, 0.0f);
|
cb.rcpFrame = GSVector4(1.0f / (float)s.x, 1.0f / (float)s.y, 0.0f, 0.0f);
|
||||||
|
@ -961,27 +950,6 @@ void GSDevice11::DoExternalFX(GSTexture* sTex, GSTexture* dTex)
|
||||||
StretchRect(sTex, sRect, dTex, dRect, m_shaderfx.ps, m_shaderfx.cb, true);
|
StretchRect(sTex, sRect, dTex, dRect, m_shaderfx.ps, m_shaderfx.cb, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This shouldn't be necessary, we have some bug corrupting memory
|
|
||||||
// and for some reason isolating this code makes the subcomponent not crash
|
|
||||||
void GSDevice11::InitFXAA()
|
|
||||||
{
|
|
||||||
if (!FXAA_Compiled)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
std::vector<char> shader;
|
|
||||||
theApp.LoadResource(IDR_FXAA_FX, shader);
|
|
||||||
ShaderMacro sm(m_shader.model);
|
|
||||||
CreateShader(shader, "fxaa.fx", nullptr, "ps_main", sm.GetPtr(), &m_fxaa.ps);
|
|
||||||
}
|
|
||||||
catch (GSRecoverableError)
|
|
||||||
{
|
|
||||||
printf("GS: failed to compile fxaa shader.\n");
|
|
||||||
}
|
|
||||||
FXAA_Compiled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void GSDevice11::DoFXAA(GSTexture* sTex, GSTexture* dTex)
|
void GSDevice11::DoFXAA(GSTexture* sTex, GSTexture* dTex)
|
||||||
{
|
{
|
||||||
GSVector2i s = dTex->GetSize();
|
GSVector2i s = dTex->GetSize();
|
||||||
|
@ -991,7 +959,20 @@ void GSDevice11::DoFXAA(GSTexture* sTex, GSTexture* dTex)
|
||||||
|
|
||||||
FXAAConstantBuffer cb;
|
FXAAConstantBuffer cb;
|
||||||
|
|
||||||
InitFXAA();
|
if (m_fxaa.ps == nullptr)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
std::vector<char> shader;
|
||||||
|
theApp.LoadResource(IDR_FXAA_FX, shader);
|
||||||
|
ShaderMacro sm(m_shader.model);
|
||||||
|
CreateShader(shader, "fxaa.fx", nullptr, "ps_main", sm.GetPtr(), &m_fxaa.ps);
|
||||||
|
}
|
||||||
|
catch (GSRecoverableError)
|
||||||
|
{
|
||||||
|
printf("GS: Failed to compile fxaa shader.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cb.rcpFrame = GSVector4(1.0f / s.x, 1.0f / s.y, 0.0f, 0.0f);
|
cb.rcpFrame = GSVector4(1.0f / s.x, 1.0f / s.y, 0.0f, 0.0f);
|
||||||
cb.rcpFrameOpt = GSVector4::zero();
|
cb.rcpFrameOpt = GSVector4::zero();
|
||||||
|
|
|
@ -400,8 +400,6 @@ private:
|
||||||
void DoFXAA(GSTexture* sTex, GSTexture* dTex) final;
|
void DoFXAA(GSTexture* sTex, GSTexture* dTex) final;
|
||||||
void DoShadeBoost(GSTexture* sTex, GSTexture* dTex) final;
|
void DoShadeBoost(GSTexture* sTex, GSTexture* dTex) final;
|
||||||
void DoExternalFX(GSTexture* sTex, GSTexture* dTex) final;
|
void DoExternalFX(GSTexture* sTex, GSTexture* dTex) final;
|
||||||
void InitExternalFX();
|
|
||||||
void InitFXAA(); // Bug workaround! Stack corruption? Heap corruption? No idea
|
|
||||||
void RenderOsd(GSTexture* dt);
|
void RenderOsd(GSTexture* dt);
|
||||||
void BeforeDraw();
|
void BeforeDraw();
|
||||||
void AfterDraw();
|
void AfterDraw();
|
||||||
|
@ -448,9 +446,6 @@ private:
|
||||||
|
|
||||||
CComPtr<ID3D11RasterizerState> m_rs;
|
CComPtr<ID3D11RasterizerState> m_rs;
|
||||||
|
|
||||||
bool FXAA_Compiled;
|
|
||||||
bool ExShader_Compiled;
|
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
CComPtr<ID3D11InputLayout> il;
|
CComPtr<ID3D11InputLayout> il;
|
||||||
|
|
Loading…
Reference in New Issue