mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Fix pipeline/shader duplication
This commit is contained in:
parent
0c389789f3
commit
ecd7d0fc35
|
@ -264,6 +264,7 @@ struct alignas(16) GSHWDrawConfig
|
||||||
/// Returns true if the fixed index buffer should be used.
|
/// Returns true if the fixed index buffer should be used.
|
||||||
__fi bool UseExpandIndexBuffer() const { return (expand == VSExpand::Point || expand == VSExpand::Sprite); }
|
__fi bool UseExpandIndexBuffer() const { return (expand == VSExpand::Point || expand == VSExpand::Sprite); }
|
||||||
};
|
};
|
||||||
|
static_assert(sizeof(VSSelector) == 1, "VSSelector is a single byte");
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
#pragma pack(push, 4)
|
#pragma pack(push, 4)
|
||||||
struct PSSelector
|
struct PSSelector
|
||||||
|
@ -382,6 +383,7 @@ struct alignas(16) GSHWDrawConfig
|
||||||
no_color = no_color1 = 1;
|
no_color = no_color1 = 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
static_assert(sizeof(PSSelector) == 12, "PSSelector is 12 bytes");
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
struct PSSelectorHash
|
struct PSSelectorHash
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,15 +51,16 @@ public:
|
||||||
u32 key;
|
u32 key;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GSHWDrawConfig::BlendState bs;
|
||||||
GSHWDrawConfig::VSSelector vs;
|
GSHWDrawConfig::VSSelector vs;
|
||||||
GSHWDrawConfig::DepthStencilSelector dss;
|
GSHWDrawConfig::DepthStencilSelector dss;
|
||||||
GSHWDrawConfig::ColorMaskSelector cms;
|
GSHWDrawConfig::ColorMaskSelector cms;
|
||||||
GSHWDrawConfig::BlendState bs;
|
u8 pad;
|
||||||
|
|
||||||
__fi bool operator==(const PipelineSelector& p) const { return (memcmp(this, &p, sizeof(p)) == 0); }
|
__fi bool operator==(const PipelineSelector& p) const { return BitEqual(*this, p); }
|
||||||
__fi bool operator!=(const PipelineSelector& p) const { return (memcmp(this, &p, sizeof(p)) != 0); }
|
__fi bool operator!=(const PipelineSelector& p) const { return !BitEqual(*this, p); }
|
||||||
|
|
||||||
__fi PipelineSelector() { memset(this, 0, sizeof(*this)); }
|
__fi PipelineSelector() { std::memset(this, 0, sizeof(*this)); }
|
||||||
};
|
};
|
||||||
static_assert(sizeof(PipelineSelector) == 24, "Pipeline selector is 24 bytes");
|
static_assert(sizeof(PipelineSelector) == 24, "Pipeline selector is 24 bytes");
|
||||||
|
|
||||||
|
|
|
@ -2393,7 +2393,7 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config)
|
||||||
psel.vs = config.vs;
|
psel.vs = config.vs;
|
||||||
psel.ps.key_hi = config.ps.key_hi;
|
psel.ps.key_hi = config.ps.key_hi;
|
||||||
psel.ps.key_lo = config.ps.key_lo;
|
psel.ps.key_lo = config.ps.key_lo;
|
||||||
psel.pad = 0;
|
std::memset(psel.pad, 0, sizeof(psel.pad));
|
||||||
|
|
||||||
SetupPipeline(psel);
|
SetupPipeline(psel);
|
||||||
|
|
||||||
|
|
|
@ -130,10 +130,10 @@ public:
|
||||||
{
|
{
|
||||||
PSSelector ps;
|
PSSelector ps;
|
||||||
VSSelector vs;
|
VSSelector vs;
|
||||||
u16 pad;
|
u8 pad[3];
|
||||||
|
|
||||||
__fi bool operator==(const ProgramSelector& p) const { return (std::memcmp(this, &p, sizeof(*this)) == 0); }
|
__fi bool operator==(const ProgramSelector& p) const { return BitEqual(*this, p); }
|
||||||
__fi bool operator!=(const ProgramSelector& p) const { return (std::memcmp(this, &p, sizeof(*this)) != 0); }
|
__fi bool operator!=(const ProgramSelector& p) const { return !BitEqual(*this, p); }
|
||||||
};
|
};
|
||||||
static_assert(sizeof(ProgramSelector) == 16, "Program selector is 16 bytes");
|
static_assert(sizeof(ProgramSelector) == 16, "Program selector is 16 bytes");
|
||||||
|
|
||||||
|
|
|
@ -57,15 +57,16 @@ public:
|
||||||
u32 key;
|
u32 key;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GSHWDrawConfig::BlendState bs;
|
||||||
GSHWDrawConfig::VSSelector vs;
|
GSHWDrawConfig::VSSelector vs;
|
||||||
GSHWDrawConfig::DepthStencilSelector dss;
|
GSHWDrawConfig::DepthStencilSelector dss;
|
||||||
GSHWDrawConfig::ColorMaskSelector cms;
|
GSHWDrawConfig::ColorMaskSelector cms;
|
||||||
GSHWDrawConfig::BlendState bs;
|
u8 pad;
|
||||||
|
|
||||||
__fi bool operator==(const PipelineSelector& p) const { return (memcmp(this, &p, sizeof(p)) == 0); }
|
__fi bool operator==(const PipelineSelector& p) const { return BitEqual(*this, p); }
|
||||||
__fi bool operator!=(const PipelineSelector& p) const { return (memcmp(this, &p, sizeof(p)) != 0); }
|
__fi bool operator!=(const PipelineSelector& p) const { return !BitEqual(*this, p); }
|
||||||
|
|
||||||
__fi PipelineSelector() { memset(this, 0, sizeof(*this)); }
|
__fi PipelineSelector() { std::memset(this, 0, sizeof(*this)); }
|
||||||
|
|
||||||
__fi bool IsRTFeedbackLoop() const { return ((feedback_loop_flags & FeedbackLoopFlag_ReadAndWriteRT) != 0); }
|
__fi bool IsRTFeedbackLoop() const { return ((feedback_loop_flags & FeedbackLoopFlag_ReadAndWriteRT) != 0); }
|
||||||
__fi bool IsTestingAndSamplingDepth() const { return ((feedback_loop_flags & FeedbackLoopFlag_ReadDS) != 0); }
|
__fi bool IsTestingAndSamplingDepth() const { return ((feedback_loop_flags & FeedbackLoopFlag_ReadDS) != 0); }
|
||||||
|
|
|
@ -15,4 +15,4 @@
|
||||||
|
|
||||||
/// Version number for GS and other shaders. Increment whenever any of the contents of the
|
/// Version number for GS and other shaders. Increment whenever any of the contents of the
|
||||||
/// shaders change, to invalidate the cache.
|
/// shaders change, to invalidate the cache.
|
||||||
static constexpr u32 SHADER_CACHE_VERSION = 24;
|
static constexpr u32 SHADER_CACHE_VERSION = 25;
|
||||||
|
|
Loading…
Reference in New Issue