mirror of https://github.com/PCSX2/pcsx2.git
GSdx-d3d: Add macro to support ScalingFactor in shaders.
This commit is contained in:
parent
5ef53b4587
commit
df307bed02
|
@ -171,10 +171,9 @@ bool GSDevice11::Create(const std::shared_ptr<GSWnd> &wnd)
|
||||||
dxd->Release();
|
dxd->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool native_resolution = theApp.GetConfigI("upscale_multiplier") == 1;
|
|
||||||
bool spritehack_enabled = theApp.GetConfigB("UserHacks") && theApp.GetConfigI("UserHacks_SpriteHack");
|
bool spritehack_enabled = theApp.GetConfigB("UserHacks") && theApp.GetConfigI("UserHacks_SpriteHack");
|
||||||
|
|
||||||
m_hack_topleft_offset = (!nvidia_gpu || native_resolution || spritehack_enabled) ? 0.0f : -0.01f;
|
m_hack_topleft_offset = (!nvidia_gpu || m_upscale_multiplier == 1 || spritehack_enabled) ? 0.0f : -0.01f;
|
||||||
}
|
}
|
||||||
|
|
||||||
D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS options;
|
D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS options;
|
||||||
|
@ -214,9 +213,19 @@ bool GSDevice11::Create(const std::shared_ptr<GSWnd> &wnd)
|
||||||
theApp.LoadResource(IDR_CONVERT_FX, shader);
|
theApp.LoadResource(IDR_CONVERT_FX, shader);
|
||||||
CompileShader(shader.data(), shader.size(), "convert.fx", nullptr, "vs_main", nullptr, &m_convert.vs, il_convert, countof(il_convert), &m_convert.il);
|
CompileShader(shader.data(), shader.size(), "convert.fx", nullptr, "vs_main", nullptr, &m_convert.vs, il_convert, countof(il_convert), &m_convert.il);
|
||||||
|
|
||||||
|
std::string convert_mstr[1];
|
||||||
|
|
||||||
|
convert_mstr[0] = format("%d", m_upscale_multiplier);
|
||||||
|
|
||||||
|
D3D_SHADER_MACRO convert_macro[] =
|
||||||
|
{
|
||||||
|
{"PS_SCALE_FACTOR", convert_mstr[0].c_str()},
|
||||||
|
{NULL, NULL},
|
||||||
|
};
|
||||||
|
|
||||||
for(size_t i = 0; i < countof(m_convert.ps); i++)
|
for(size_t i = 0; i < countof(m_convert.ps); i++)
|
||||||
{
|
{
|
||||||
CompileShader(shader.data(), shader.size(), "convert.fx", nullptr, format("ps_main%d", i).c_str(), nullptr, &m_convert.ps[i]);
|
CompileShader(shader.data(), shader.size(), "convert.fx", nullptr, format("ps_main%d", i).c_str(), convert_macro, &m_convert.ps[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&dsd, 0, sizeof(dsd));
|
memset(&dsd, 0, sizeof(dsd));
|
||||||
|
|
|
@ -30,6 +30,7 @@ bool GSDeviceDX::s_old_d3d_compiler_dll;
|
||||||
|
|
||||||
GSDeviceDX::GSDeviceDX()
|
GSDeviceDX::GSDeviceDX()
|
||||||
{
|
{
|
||||||
|
m_upscale_multiplier = theApp.GetConfigI("upscale_multiplier");
|
||||||
m_msaa = theApp.GetConfigB("UserHacks") ? theApp.GetConfigI("UserHacks_MSAA") : 0;
|
m_msaa = theApp.GetConfigB("UserHacks") ? theApp.GetConfigI("UserHacks_MSAA") : 0;
|
||||||
|
|
||||||
m_msaa_desc.Count = 1;
|
m_msaa_desc.Count = 1;
|
||||||
|
|
|
@ -27,6 +27,9 @@
|
||||||
|
|
||||||
class GSDeviceDX : public GSDevice
|
class GSDeviceDX : public GSDevice
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
|
int m_upscale_multiplier;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ void GSDevice11::SetupPS(PSSelector sel, const PSConstantBuffer* cb, PSSamplerSe
|
||||||
|
|
||||||
if(i == m_ps.end())
|
if(i == m_ps.end())
|
||||||
{
|
{
|
||||||
std::string str[21];
|
std::string str[22];
|
||||||
|
|
||||||
str[0] = format("%d", sel.fst);
|
str[0] = format("%d", sel.fst);
|
||||||
str[1] = format("%d", sel.wms);
|
str[1] = format("%d", sel.wms);
|
||||||
|
@ -232,6 +232,7 @@ void GSDevice11::SetupPS(PSSelector sel, const PSConstantBuffer* cb, PSSamplerSe
|
||||||
str[18] = format("%d", sel.shuffle);
|
str[18] = format("%d", sel.shuffle);
|
||||||
str[19] = format("%d", sel.read_ba);
|
str[19] = format("%d", sel.read_ba);
|
||||||
str[20] = format("%d", sel.fmt >> 2);
|
str[20] = format("%d", sel.fmt >> 2);
|
||||||
|
str[21] = format("%d", m_upscale_multiplier);
|
||||||
|
|
||||||
D3D_SHADER_MACRO macro[] =
|
D3D_SHADER_MACRO macro[] =
|
||||||
{
|
{
|
||||||
|
@ -256,6 +257,7 @@ void GSDevice11::SetupPS(PSSelector sel, const PSConstantBuffer* cb, PSSamplerSe
|
||||||
{"PS_SHUFFLE", str[18].c_str() },
|
{"PS_SHUFFLE", str[18].c_str() },
|
||||||
{"PS_READ_BA", str[19].c_str() },
|
{"PS_READ_BA", str[19].c_str() },
|
||||||
{"PS_PAL_FMT", str[20].c_str() },
|
{"PS_PAL_FMT", str[20].c_str() },
|
||||||
|
{"PS_SCALE_FACTOR", str[21].c_str() },
|
||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
#ifdef SHADER_MODEL // make safe to include in resource file to enforce dependency
|
#ifdef SHADER_MODEL // make safe to include in resource file to enforce dependency
|
||||||
#if SHADER_MODEL >= 0x400
|
#if SHADER_MODEL >= 0x400
|
||||||
|
|
||||||
|
#ifndef PS_SCALE_FACTOR
|
||||||
|
#define PS_SCALE_FACTOR 1
|
||||||
|
#endif
|
||||||
|
|
||||||
struct VS_INPUT
|
struct VS_INPUT
|
||||||
{
|
{
|
||||||
float4 p : POSITION;
|
float4 p : POSITION;
|
||||||
|
@ -314,9 +318,9 @@ PS_OUTPUT ps_main17(PS_INPUT input)
|
||||||
int txN = tb.x | (int(input.p.x) & 7);
|
int txN = tb.x | (int(input.p.x) & 7);
|
||||||
int txH = tb.x | ((int(input.p.x) + 4) & 7);
|
int txH = tb.x | ((int(input.p.x) + 4) & 7);
|
||||||
|
|
||||||
//txN *= ScalingFactor.x;
|
txN *= PS_SCALE_FACTOR;
|
||||||
//txH *= ScalingFactor.x;
|
txH *= PS_SCALE_FACTOR;
|
||||||
//ty *= ScalingFactor.y;
|
ty *= PS_SCALE_FACTOR;
|
||||||
|
|
||||||
// TODO investigate texture gather
|
// TODO investigate texture gather
|
||||||
float4 cN = Texture.Load(int3(txN, ty, 0));
|
float4 cN = Texture.Load(int3(txN, ty, 0));
|
||||||
|
|
Loading…
Reference in New Issue