mirror of https://github.com/PCSX2/pcsx2.git
GS/DX11: Don't bind 16 SRVs every draw
That's just silly.
This commit is contained in:
parent
0a45385d48
commit
dbc176fe25
|
@ -1074,41 +1074,18 @@ void GSDevice11::PSSetShaderResources(GSTexture* sr0, GSTexture* sr1)
|
||||||
{
|
{
|
||||||
PSSetShaderResource(0, sr0);
|
PSSetShaderResource(0, sr0);
|
||||||
PSSetShaderResource(1, sr1);
|
PSSetShaderResource(1, sr1);
|
||||||
|
PSSetShaderResource(2, nullptr);
|
||||||
for (size_t i = 2; i < m_state.ps_sr_views.size(); i++)
|
|
||||||
{
|
|
||||||
PSSetShaderResource(i, nullptr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSDevice11::PSSetShaderResource(int i, GSTexture* sr)
|
void GSDevice11::PSSetShaderResource(int i, GSTexture* sr)
|
||||||
{
|
{
|
||||||
ID3D11ShaderResourceView* srv = nullptr;
|
m_state.ps_sr_views[i] = sr ? static_cast<ID3D11ShaderResourceView*>(*static_cast<GSTexture11*>(sr)) : nullptr;
|
||||||
|
|
||||||
if (sr)
|
|
||||||
srv = *(GSTexture11*)sr;
|
|
||||||
|
|
||||||
PSSetShaderResourceView(i, srv, sr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GSDevice11::PSSetShaderResourceView(int i, ID3D11ShaderResourceView* srv, GSTexture* sr)
|
|
||||||
{
|
|
||||||
ASSERT(i < (int)m_state.ps_sr_views.size());
|
|
||||||
|
|
||||||
if (m_state.ps_sr_views[i] != srv)
|
|
||||||
{
|
|
||||||
m_state.ps_sr_views[i] = srv;
|
|
||||||
m_state.ps_sr_texture[i] = (GSTexture11*)sr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSDevice11::PSSetSamplerState(ID3D11SamplerState* ss0, ID3D11SamplerState* ss1)
|
void GSDevice11::PSSetSamplerState(ID3D11SamplerState* ss0, ID3D11SamplerState* ss1)
|
||||||
{
|
{
|
||||||
if (m_state.ps_ss[0] != ss0 || m_state.ps_ss[1] != ss1)
|
m_state.ps_ss[0] = ss0;
|
||||||
{
|
m_state.ps_ss[1] = ss1;
|
||||||
m_state.ps_ss[0] = ss0;
|
|
||||||
m_state.ps_ss[1] = ss1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSDevice11::PSSetShader(ID3D11PixelShader* ps, ID3D11Buffer* ps_cb)
|
void GSDevice11::PSSetShader(ID3D11PixelShader* ps, ID3D11Buffer* ps_cb)
|
||||||
|
@ -1131,7 +1108,7 @@ void GSDevice11::PSSetShader(ID3D11PixelShader* ps, ID3D11Buffer* ps_cb)
|
||||||
void GSDevice11::PSUpdateShaderState()
|
void GSDevice11::PSUpdateShaderState()
|
||||||
{
|
{
|
||||||
m_ctx->PSSetShaderResources(0, m_state.ps_sr_views.size(), m_state.ps_sr_views.data());
|
m_ctx->PSSetShaderResources(0, m_state.ps_sr_views.size(), m_state.ps_sr_views.data());
|
||||||
m_ctx->PSSetSamplers(0, std::size(m_state.ps_ss), m_state.ps_ss);
|
m_ctx->PSSetSamplers(0, m_state.ps_ss.size(), m_state.ps_ss.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSDevice11::OMSetDepthStencilState(ID3D11DepthStencilState* dss, u8 sref)
|
void GSDevice11::OMSetDepthStencilState(ID3D11DepthStencilState* dss, u8 sref)
|
||||||
|
|
|
@ -111,6 +111,9 @@ private:
|
||||||
// Increment this constant whenever shaders change, to invalidate user's shader cache.
|
// Increment this constant whenever shaders change, to invalidate user's shader cache.
|
||||||
static constexpr u32 SHADER_VERSION = 1;
|
static constexpr u32 SHADER_VERSION = 1;
|
||||||
|
|
||||||
|
static constexpr u32 MAX_TEXTURES = 3;
|
||||||
|
static constexpr u32 MAX_SAMPLERS = 2;
|
||||||
|
|
||||||
float m_hack_topleft_offset;
|
float m_hack_topleft_offset;
|
||||||
int m_d3d_texsize;
|
int m_d3d_texsize;
|
||||||
|
|
||||||
|
@ -141,11 +144,10 @@ private:
|
||||||
ID3D11Buffer* vs_cb;
|
ID3D11Buffer* vs_cb;
|
||||||
ID3D11GeometryShader* gs;
|
ID3D11GeometryShader* gs;
|
||||||
ID3D11Buffer* gs_cb;
|
ID3D11Buffer* gs_cb;
|
||||||
std::array<ID3D11ShaderResourceView*, 16> ps_sr_views;
|
std::array<ID3D11ShaderResourceView*, MAX_TEXTURES> ps_sr_views;
|
||||||
std::array<GSTexture11*, 16> ps_sr_texture;
|
|
||||||
ID3D11PixelShader* ps;
|
ID3D11PixelShader* ps;
|
||||||
ID3D11Buffer* ps_cb;
|
ID3D11Buffer* ps_cb;
|
||||||
ID3D11SamplerState* ps_ss[3];
|
std::array<ID3D11SamplerState*, MAX_SAMPLERS> ps_ss;
|
||||||
GSVector2i viewport;
|
GSVector2i viewport;
|
||||||
GSVector4i scissor;
|
GSVector4i scissor;
|
||||||
ID3D11DepthStencilState* dss;
|
ID3D11DepthStencilState* dss;
|
||||||
|
@ -276,7 +278,6 @@ public:
|
||||||
|
|
||||||
void PSSetShaderResources(GSTexture* sr0, GSTexture* sr1);
|
void PSSetShaderResources(GSTexture* sr0, GSTexture* sr1);
|
||||||
void PSSetShaderResource(int i, GSTexture* sr);
|
void PSSetShaderResource(int i, GSTexture* sr);
|
||||||
void PSSetShaderResourceView(int i, ID3D11ShaderResourceView* srv, GSTexture* sr);
|
|
||||||
void PSSetShader(ID3D11PixelShader* ps, ID3D11Buffer* ps_cb);
|
void PSSetShader(ID3D11PixelShader* ps, ID3D11Buffer* ps_cb);
|
||||||
void PSUpdateShaderState();
|
void PSUpdateShaderState();
|
||||||
void PSSetSamplerState(ID3D11SamplerState* ss0, ID3D11SamplerState* ss1);
|
void PSSetSamplerState(ID3D11SamplerState* ss0, ID3D11SamplerState* ss1);
|
||||||
|
|
Loading…
Reference in New Issue