Commit 2ab34acd by Chris Forbes

Remove alpha test plumbing

Vulkan does not have alpha test. Apps are expected to use discard in the shader instead. Change-Id: Idc1d8d2a74f5728cf70c653a5139a0ca1674ca37 Reviewed-on: https://swiftshader-review.googlesource.com/c/25211Tested-by: 's avatarChris Forbes <chrisforbes@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent 8a718cb5
......@@ -189,9 +189,6 @@ namespace sw
stencilZFailOperationCCW = VK_STENCIL_OP_KEEP;
stencilWriteMaskCCW = 0xFFFFFFFF;
alphaCompareMode = VK_COMPARE_OP_ALWAYS;
alphaTestEnable = false;
rasterizerDiscard = false;
depthCompareMode = VK_COMPARE_OP_LESS;
......@@ -338,12 +335,7 @@ namespace sw
bool Context::alphaTestActive()
{
if(transparencyAntialiasing != TRANSPARENCY_NONE) return true;
if(!alphaTestEnable) return false;
if(alphaCompareMode == VK_COMPARE_OP_ALWAYS) return false;
if(alphaReference == 0.0f && alphaCompareMode == VK_COMPARE_OP_GREATER_OR_EQUAL) return false;
return true;
return transparencyAntialiasing != TRANSPARENCY_NONE;
}
bool Context::depthBufferActive()
......
......@@ -177,9 +177,6 @@ namespace sw
int stencilWriteMaskCCW;
// Pixel processor states
VkCompareOp alphaCompareMode;
bool alphaTestEnable;
CullMode cullMode;
bool frontFacingCCW;
float alphaReference;
......
......@@ -314,21 +314,11 @@ namespace sw
context->depthCompareMode = depthCompareMode;
}
void PixelProcessor::setAlphaCompare(VkCompareOp alphaCompareMode)
{
context->alphaCompareMode = alphaCompareMode;
}
void PixelProcessor::setDepthWriteEnable(bool depthWriteEnable)
{
context->depthWriteEnable = depthWriteEnable;
}
void PixelProcessor::setAlphaTestEnable(bool alphaTestEnable)
{
context->alphaTestEnable = alphaTestEnable;
}
void PixelProcessor::setCullMode(CullMode cullMode, bool frontFacingCCW)
{
context->cullMode = cullMode;
......@@ -561,16 +551,6 @@ namespace sw
context->setBlendOperationAlpha(blendOperationAlpha);
}
void PixelProcessor::setAlphaReference(float alphaReference)
{
context->alphaReference = alphaReference;
factor.alphaReference4[0] = (word)iround(alphaReference * 0x1000 / 0xFF);
factor.alphaReference4[1] = (word)iround(alphaReference * 0x1000 / 0xFF);
factor.alphaReference4[2] = (word)iround(alphaReference * 0x1000 / 0xFF);
factor.alphaReference4[3] = (word)iround(alphaReference * 0x1000 / 0xFF);
}
void PixelProcessor::setPerspectiveCorrection(bool perspectiveEnable)
{
perspectiveCorrection = perspectiveEnable;
......@@ -602,8 +582,6 @@ namespace sw
if(context->alphaTestActive())
{
state.alphaCompareMode = context->alphaCompareMode;
state.transparencyAntialiasing = context->getMultiSampleCount() > 1 ? transparencyAntialiasing : TRANSPARENCY_NONE;
}
......
......@@ -35,7 +35,6 @@ namespace sw
int shaderID;
VkCompareOp depthCompareMode;
VkCompareOp alphaCompareMode;
bool depthWriteEnable;
bool quadLayoutDepthBuffer;
......@@ -96,7 +95,7 @@ namespace sw
bool alphaTestActive() const
{
return (alphaCompareMode != VK_COMPARE_OP_ALWAYS) || (transparencyAntialiasing != TRANSPARENCY_NONE);
return transparencyAntialiasing != TRANSPARENCY_NONE;
}
unsigned int hash;
......@@ -187,9 +186,7 @@ namespace sw
void setWriteSRGB(bool sRGB);
void setDepthBufferEnable(bool depthBufferEnable);
void setDepthCompare(VkCompareOp depthCompareMode);
void setAlphaCompare(VkCompareOp alphaCompareMode);
void setDepthWriteEnable(bool depthWriteEnable);
void setAlphaTestEnable(bool alphaTestEnable);
void setCullMode(CullMode cullMode, bool frontFacingCCW);
void setColorWriteMask(int index, int rgbaMask);
......@@ -225,8 +222,6 @@ namespace sw
void setDestBlendFactorAlpha(VkBlendFactor destBlendFactorAlpha);
void setBlendOperationAlpha(VkBlendOp blendOperationAlpha);
void setAlphaReference(float alphaReference);
void setPerspectiveCorrection(bool perspectiveCorrection);
void setOcclusionEnabled(bool enable);
......
......@@ -57,20 +57,7 @@ namespace sw
return true;
}
Int aMask;
if(state.transparencyAntialiasing == TRANSPARENCY_NONE)
{
Short4 alpha = RoundShort4(c[0].w * Float4(0x1000));
PixelRoutine::alphaTest(aMask, alpha);
for(unsigned int q = 0; q < state.multiSample; q++)
{
cMask[q] &= aMask;
}
}
else if(state.transparencyAntialiasing == TRANSPARENCY_ALPHA_TO_COVERAGE)
if(state.transparencyAntialiasing == TRANSPARENCY_ALPHA_TO_COVERAGE)
{
alphaToCoverage(cMask, c[0].w);
}
......
......@@ -496,50 +496,6 @@ namespace sw
return zMask != 0;
}
void PixelRoutine::alphaTest(Int &aMask, Short4 &alpha)
{
Short4 cmp;
Short4 equal;
switch(state.alphaCompareMode)
{
case VK_COMPARE_OP_ALWAYS:
aMask = 0xF;
break;
case VK_COMPARE_OP_NEVER:
aMask = 0x0;
break;
case VK_COMPARE_OP_EQUAL:
cmp = CmpEQ(alpha, *Pointer<Short4>(data + OFFSET(DrawData,factor.alphaReference4)));
aMask = SignMask(PackSigned(cmp, Short4(0x0000)));
break;
case VK_COMPARE_OP_NOT_EQUAL: // a != b ~ !(a == b)
cmp = CmpEQ(alpha, *Pointer<Short4>(data + OFFSET(DrawData,factor.alphaReference4))) ^ Short4(0xFFFFu); // FIXME
aMask = SignMask(PackSigned(cmp, Short4(0x0000)));
break;
case VK_COMPARE_OP_LESS: // a < b ~ b > a
cmp = CmpGT(*Pointer<Short4>(data + OFFSET(DrawData,factor.alphaReference4)), alpha);
aMask = SignMask(PackSigned(cmp, Short4(0x0000)));
break;
case VK_COMPARE_OP_GREATER_OR_EQUAL: // a >= b ~ (a > b) || (a == b) ~ !(b > a) // TODO: Approximate
equal = CmpEQ(alpha, *Pointer<Short4>(data + OFFSET(DrawData,factor.alphaReference4)));
cmp = CmpGT(alpha, *Pointer<Short4>(data + OFFSET(DrawData,factor.alphaReference4)));
cmp |= equal;
aMask = SignMask(PackSigned(cmp, Short4(0x0000)));
break;
case VK_COMPARE_OP_LESS_OR_EQUAL: // a <= b ~ !(a > b)
cmp = CmpGT(alpha, *Pointer<Short4>(data + OFFSET(DrawData,factor.alphaReference4))) ^ Short4(0xFFFFu); // FIXME
aMask = SignMask(PackSigned(cmp, Short4(0x0000)));
break;
case VK_COMPARE_OP_GREATER: // a > b
cmp = CmpGT(alpha, *Pointer<Short4>(data + OFFSET(DrawData,factor.alphaReference4)));
aMask = SignMask(PackSigned(cmp, Short4(0x0000)));
break;
default:
ASSERT(false);
}
}
void PixelRoutine::alphaToCoverage(Int cMask[4], Float4 &alpha)
{
Int4 coverage0 = CmpNLT(alpha, *Pointer<Float4>(data + OFFSET(DrawData,a2c0)));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment