thin3d: Remove dual sided stencil, not supported by all backends anyway
This commit is contained in:
parent
7d4d925a32
commit
4a18629e63
6 changed files with 34 additions and 41 deletions
|
@ -487,7 +487,7 @@ static D3D11_PRIMITIVE_TOPOLOGY primToD3D11[] = {
|
|||
D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
|
||||
};
|
||||
|
||||
inline void CopyStencilSide(D3D11_DEPTH_STENCILOP_DESC &side, const StencilSide &input) {
|
||||
inline void CopyStencilSide(D3D11_DEPTH_STENCILOP_DESC &side, const StencilSetup &input) {
|
||||
side.StencilFunc = compareToD3D11[(int)input.compareOp];
|
||||
side.StencilDepthFailOp = stencilOpToD3D11[(int)input.depthFailOp];
|
||||
side.StencilFailOp = stencilOpToD3D11[(int)input.failOp];
|
||||
|
@ -501,8 +501,8 @@ DepthStencilState *D3D11DrawContext::CreateDepthStencilState(const DepthStencilS
|
|||
d3ddesc.DepthWriteMask = desc.depthWriteEnabled ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO;
|
||||
d3ddesc.DepthFunc = compareToD3D11[(int)desc.depthCompare];
|
||||
d3ddesc.StencilEnable = desc.stencilEnabled;
|
||||
CopyStencilSide(d3ddesc.FrontFace, desc.front);
|
||||
CopyStencilSide(d3ddesc.BackFace, desc.back);
|
||||
CopyStencilSide(d3ddesc.FrontFace, desc.stencil);
|
||||
CopyStencilSide(d3ddesc.BackFace, desc.stencil);
|
||||
if (SUCCEEDED(device_->CreateDepthStencilState(&d3ddesc, &ds->dss)))
|
||||
return ds;
|
||||
delete ds;
|
||||
|
|
|
@ -730,12 +730,12 @@ DepthStencilState *D3D9Context::CreateDepthStencilState(const DepthStencilStateD
|
|||
ds->depthWriteEnabled = desc.depthWriteEnabled;
|
||||
ds->depthCompare = compareToD3D9[(int)desc.depthCompare];
|
||||
ds->stencilEnabled = desc.stencilEnabled;
|
||||
ds->stencilCompareOp = compareToD3D9[(int)desc.front.compareOp];
|
||||
ds->stencilPass = stencilOpToD3D9[(int)desc.front.passOp];
|
||||
ds->stencilFail = stencilOpToD3D9[(int)desc.front.failOp];
|
||||
ds->stencilZFail = stencilOpToD3D9[(int)desc.front.depthFailOp];
|
||||
ds->stencilWriteMask = desc.front.writeMask;
|
||||
ds->stencilCompareMask = desc.front.compareMask;
|
||||
ds->stencilCompareOp = compareToD3D9[(int)desc.stencil.compareOp];
|
||||
ds->stencilPass = stencilOpToD3D9[(int)desc.stencil.passOp];
|
||||
ds->stencilFail = stencilOpToD3D9[(int)desc.stencil.failOp];
|
||||
ds->stencilZFail = stencilOpToD3D9[(int)desc.stencil.depthFailOp];
|
||||
ds->stencilWriteMask = desc.stencil.writeMask;
|
||||
ds->stencilCompareMask = desc.stencil.compareMask;
|
||||
return ds;
|
||||
}
|
||||
|
||||
|
|
|
@ -936,12 +936,12 @@ DepthStencilState *OpenGLContext::CreateDepthStencilState(const DepthStencilStat
|
|||
ds->depthWriteEnabled = desc.depthWriteEnabled;
|
||||
ds->depthComp = compToGL[(int)desc.depthCompare];
|
||||
ds->stencilEnabled = desc.stencilEnabled;
|
||||
ds->stencilCompareOp = compToGL[(int)desc.front.compareOp];
|
||||
ds->stencilPass = stencilOpToGL[(int)desc.front.passOp];
|
||||
ds->stencilFail = stencilOpToGL[(int)desc.front.failOp];
|
||||
ds->stencilZFail = stencilOpToGL[(int)desc.front.depthFailOp];
|
||||
ds->stencilWriteMask = desc.front.writeMask;
|
||||
ds->stencilCompareMask = desc.front.compareMask;
|
||||
ds->stencilCompareOp = compToGL[(int)desc.stencil.compareOp];
|
||||
ds->stencilPass = stencilOpToGL[(int)desc.stencil.passOp];
|
||||
ds->stencilFail = stencilOpToGL[(int)desc.stencil.failOp];
|
||||
ds->stencilZFail = stencilOpToGL[(int)desc.stencil.depthFailOp];
|
||||
ds->stencilWriteMask = desc.stencil.writeMask;
|
||||
ds->stencilCompareMask = desc.stencil.compareMask;
|
||||
return ds;
|
||||
}
|
||||
|
||||
|
|
|
@ -1207,7 +1207,7 @@ Texture *VKContext::CreateTexture(const TextureDesc &desc) {
|
|||
}
|
||||
}
|
||||
|
||||
static inline void CopySide(VkStencilOpState &dest, const StencilSide &src) {
|
||||
static inline void CopySide(VkStencilOpState &dest, const StencilSetup &src) {
|
||||
dest.compareMask = src.compareMask;
|
||||
dest.writeMask = src.writeMask;
|
||||
dest.compareOp = compToVK[(int)src.compareOp];
|
||||
|
@ -1224,8 +1224,8 @@ DepthStencilState *VKContext::CreateDepthStencilState(const DepthStencilStateDes
|
|||
ds->info.stencilTestEnable = desc.stencilEnabled;
|
||||
ds->info.depthBoundsTestEnable = false;
|
||||
if (ds->info.stencilTestEnable) {
|
||||
CopySide(ds->info.front, desc.front);
|
||||
CopySide(ds->info.back, desc.back);
|
||||
CopySide(ds->info.front, desc.stencil);
|
||||
CopySide(ds->info.back, desc.stencil);
|
||||
}
|
||||
return ds;
|
||||
}
|
||||
|
|
|
@ -453,7 +453,7 @@ public:
|
|||
|
||||
class RasterState : public RefCountedObject {};
|
||||
|
||||
struct StencilSide {
|
||||
struct StencilSetup {
|
||||
StencilOp failOp;
|
||||
StencilOp passOp;
|
||||
StencilOp depthFailOp;
|
||||
|
@ -467,8 +467,7 @@ struct DepthStencilStateDesc {
|
|||
bool depthWriteEnabled;
|
||||
Comparison depthCompare;
|
||||
bool stencilEnabled;
|
||||
StencilSide front;
|
||||
StencilSide back;
|
||||
StencilSetup stencil;
|
||||
};
|
||||
|
||||
struct BlendStateDesc {
|
||||
|
|
|
@ -329,13 +329,12 @@ void GPUDriverTestScreen::DiscardTest() {
|
|||
dsDesc.depthWriteEnabled = true;
|
||||
dsDesc.depthCompare = Comparison::ALWAYS;
|
||||
dsDesc.stencilEnabled = true;
|
||||
dsDesc.front.compareMask = 0xFF;
|
||||
dsDesc.front.compareOp = Comparison::ALWAYS;
|
||||
dsDesc.front.passOp = StencilOp::REPLACE;
|
||||
dsDesc.front.failOp = StencilOp::REPLACE; // These two shouldn't matter, because the test that fails is discard, not stencil.
|
||||
dsDesc.front.depthFailOp = StencilOp::REPLACE;
|
||||
dsDesc.front.writeMask = 0xFF;
|
||||
dsDesc.back = dsDesc.front;
|
||||
dsDesc.stencil.compareMask = 0xFF;
|
||||
dsDesc.stencil.compareOp = Comparison::ALWAYS;
|
||||
dsDesc.stencil.passOp = StencilOp::REPLACE;
|
||||
dsDesc.stencil.failOp = StencilOp::REPLACE; // These two shouldn't matter, because the test that fails is discard, not stencil.
|
||||
dsDesc.stencil.depthFailOp = StencilOp::REPLACE;
|
||||
dsDesc.stencil.writeMask = 0xFF;
|
||||
DepthStencilState *depthStencilWrite = draw->CreateDepthStencilState(dsDesc);
|
||||
|
||||
// Write only depth.
|
||||
|
@ -353,33 +352,28 @@ void GPUDriverTestScreen::DiscardTest() {
|
|||
dsDesc.depthTestEnabled = true;
|
||||
dsDesc.stencilEnabled = true;
|
||||
dsDesc.depthCompare = Comparison::ALWAYS;
|
||||
dsDesc.front.compareOp = Comparison::EQUAL;
|
||||
dsDesc.front.failOp = StencilOp::KEEP;
|
||||
dsDesc.front.depthFailOp = StencilOp::KEEP;
|
||||
dsDesc.front.writeMask = 0x0;
|
||||
dsDesc.back = dsDesc.front;
|
||||
dsDesc.stencil.compareOp = Comparison::EQUAL;
|
||||
dsDesc.stencil.failOp = StencilOp::KEEP;
|
||||
dsDesc.stencil.depthFailOp = StencilOp::KEEP;
|
||||
dsDesc.stencil.writeMask = 0x0;
|
||||
DepthStencilState *stencilEqualDepthAlways = draw->CreateDepthStencilState(dsDesc);
|
||||
|
||||
dsDesc.depthTestEnabled = false;
|
||||
dsDesc.front.compareOp = Comparison::EQUAL;
|
||||
dsDesc.back = dsDesc.front;
|
||||
dsDesc.stencil.compareOp = Comparison::EQUAL;
|
||||
DepthStencilState *stencilEqual = draw->CreateDepthStencilState(dsDesc);
|
||||
|
||||
dsDesc.depthTestEnabled = true;
|
||||
dsDesc.depthCompare = Comparison::ALWAYS;
|
||||
dsDesc.front.compareOp = Comparison::NOT_EQUAL;
|
||||
dsDesc.back = dsDesc.front;
|
||||
dsDesc.stencil.compareOp = Comparison::NOT_EQUAL;
|
||||
DepthStencilState *stenciNotEqualDepthAlways = draw->CreateDepthStencilState(dsDesc);
|
||||
|
||||
dsDesc.depthTestEnabled = false;
|
||||
dsDesc.front.compareOp = Comparison::NOT_EQUAL;
|
||||
dsDesc.back = dsDesc.front;
|
||||
dsDesc.stencil.compareOp = Comparison::NOT_EQUAL;
|
||||
DepthStencilState *stencilNotEqual = draw->CreateDepthStencilState(dsDesc);
|
||||
|
||||
dsDesc.stencilEnabled = true;
|
||||
dsDesc.depthTestEnabled = true;
|
||||
dsDesc.front.compareOp = Comparison::ALWAYS;
|
||||
dsDesc.back = dsDesc.front;
|
||||
dsDesc.stencil.compareOp = Comparison::ALWAYS;
|
||||
dsDesc.depthCompare = Comparison::LESS_EQUAL;
|
||||
DepthStencilState *stencilAlwaysDepthTestLessEqual = draw->CreateDepthStencilState(dsDesc);
|
||||
dsDesc.depthCompare = Comparison::GREATER;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue