Revert "Implement EXT_depth_clamp"
This reverts commit f8c1418319ac2aef4b3101e322005b1d0f73120f.
Reason for revert: This change breaks angle_end2end_tests on Metal backend: https://ci.chromium.org/ui/p/chromium/builders/ci/ios-angle-intel/26035/overview
Original change's description:
> Implement EXT_depth_clamp
>
> * Added depthClamp to the RasterizerState
> * Added DepthWriteTest end2end tests covering
> both clipped and clamped depth writes
>
> Capture
> * Updated serialized rasterizer state
> * Updated CaptureMidExecutionSetup
>
> OpenGL
> * Requires GL 3.2 or ARB_depth_clamp
> on desktop contexts
> * Maps to EXT_depth_clamp on ES
>
> D3D11
> * Maps to the opposite of
> D3D11_RASTERIZER_DESC.DepthClipEnable
> * The new tests uncover several edge cases where
> a workaround is needed to implement unextended
> OpenGL semantics on top of D3D
>
> Metal
> * Maps to the setDepthClipMode command
>
> Bug: angleproject:8047
> Bug: angleproject:8077
> Change-Id: I1b3448e5b84443e4be18af9bc22d2f8495ac8267
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4347753
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Bug: angleproject:8047
Bug: angleproject:8077
Change-Id: I829add68c006c72b7b4acf03aee3efa8a9a16fac
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4350876
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
diff --git a/src/libANGLE/State.cpp b/src/libANGLE/State.cpp
index 74064f8..46987ac 100644
--- a/src/libANGLE/State.cpp
+++ b/src/libANGLE/State.cpp
@@ -867,16 +867,6 @@
}
}
-void State::setDepthClamp(bool enabled)
-{
- if (mRasterizer.depthClamp != enabled)
- {
- mRasterizer.depthClamp = enabled;
- mDirtyBits.set(DIRTY_BIT_EXTENDED);
- mExtendedDirtyBits.set(EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED);
- }
-}
-
void State::setDepthTest(bool enabled)
{
if (mDepthStencil.depthTest != enabled)
@@ -1304,9 +1294,6 @@
case GL_POLYGON_OFFSET_FILL:
setPolygonOffsetFill(enabled);
return;
- case GL_DEPTH_CLAMP_EXT:
- setDepthClamp(enabled);
- return;
case GL_SAMPLE_ALPHA_TO_COVERAGE:
setSampleAlphaToCoverage(enabled);
return;
@@ -1475,8 +1462,6 @@
return isCullFaceEnabled();
case GL_POLYGON_OFFSET_FILL:
return isPolygonOffsetFillEnabled();
- case GL_DEPTH_CLAMP_EXT:
- return isDepthClampEnabled();
case GL_SAMPLE_ALPHA_TO_COVERAGE:
return isSampleAlphaToCoverageEnabled();
case GL_SAMPLE_COVERAGE:
@@ -2470,9 +2455,6 @@
case GL_POLYGON_OFFSET_FILL:
*params = mRasterizer.polygonOffsetFill;
break;
- case GL_DEPTH_CLAMP_EXT:
- *params = mRasterizer.depthClamp;
- break;
case GL_SAMPLE_ALPHA_TO_COVERAGE:
*params = mSampleAlphaToCoverage;
break;
diff --git a/src/libANGLE/State.h b/src/libANGLE/State.h
index cbb4bd1..ed9a781 100644
--- a/src/libANGLE/State.h
+++ b/src/libANGLE/State.h
@@ -172,10 +172,6 @@
void setCullMode(CullFaceMode mode);
void setFrontFace(GLenum front);
- // EXT_depth_clamp
- bool isDepthClampEnabled() const { return mRasterizer.depthClamp; }
- void setDepthClamp(bool enabled);
-
// Depth test state manipulation
bool isDepthTestEnabled() const { return mDepthStencil.depthTest; }
bool isDepthWriteEnabled() const { return mDepthStencil.depthTest && mDepthStencil.depthMask; }
@@ -717,7 +713,7 @@
DIRTY_BIT_SAMPLE_SHADING,
DIRTY_BIT_PATCH_VERTICES,
DIRTY_BIT_EXTENDED, // clip distances, mipmap generation hint, derivative hint,
- // EXT_clip_control, EXT_depth_clamp
+ // EXT_clip_control
DIRTY_BIT_INVALID,
DIRTY_BIT_MAX = DIRTY_BIT_INVALID,
};
@@ -728,7 +724,6 @@
{
EXTENDED_DIRTY_BIT_CLIP_CONTROL, // EXT_clip_control
EXTENDED_DIRTY_BIT_CLIP_DISTANCES, // clip distances
- EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED, // EXT_depth_clamp
EXTENDED_DIRTY_BIT_MIPMAP_GENERATION_HINT, // mipmap generation hint
EXTENDED_DIRTY_BIT_SHADER_DERIVATIVE_HINT, // shader derivative hint
EXTENDED_DIRTY_BIT_SHADING_RATE, // QCOM_shading_rate
diff --git a/src/libANGLE/angletypes.cpp b/src/libANGLE/angletypes.cpp
index 7ecad40..95f9c95 100644
--- a/src/libANGLE/angletypes.cpp
+++ b/src/libANGLE/angletypes.cpp
@@ -48,6 +48,7 @@
{
memset(this, 0, sizeof(RasterizerState));
+ rasterizerDiscard = false;
cullFace = false;
cullMode = CullFaceMode::Back;
frontFace = GL_CCW;
@@ -55,10 +56,8 @@
polygonOffsetFactor = 0.0f;
polygonOffsetUnits = 0.0f;
polygonOffsetClamp = 0.0f;
- depthClamp = false;
pointDrawMode = false;
multiSample = false;
- rasterizerDiscard = false;
dither = true;
}
diff --git a/src/libANGLE/angletypes.h b/src/libANGLE/angletypes.h
index 25fbf68..222f337 100644
--- a/src/libANGLE/angletypes.h
+++ b/src/libANGLE/angletypes.h
@@ -238,8 +238,6 @@
GLfloat polygonOffsetUnits;
GLfloat polygonOffsetClamp;
- bool depthClamp;
-
// pointDrawMode/multiSample are only used in the D3D back-end right now.
bool pointDrawMode;
bool multiSample;
diff --git a/src/libANGLE/capture/FrameCapture.cpp b/src/libANGLE/capture/FrameCapture.cpp
index 3a742bd..f8db607 100644
--- a/src/libANGLE/capture/FrameCapture.cpp
+++ b/src/libANGLE/capture/FrameCapture.cpp
@@ -4958,11 +4958,6 @@
}
}
- if (currentRasterState.depthClamp != defaultRasterState.depthClamp)
- {
- capCap(GL_DEPTH_CLAMP_EXT, currentRasterState.depthClamp);
- }
-
// pointDrawMode/multiSample are only used in the D3D back-end right now.
if (currentRasterState.rasterizerDiscard != defaultRasterState.rasterizerDiscard)
diff --git a/src/libANGLE/capture/serialize.cpp b/src/libANGLE/capture/serialize.cpp
index 59c3fe9..20b7711 100644
--- a/src/libANGLE/capture/serialize.cpp
+++ b/src/libANGLE/capture/serialize.cpp
@@ -409,7 +409,6 @@
json->addScalar("PolygonOffsetFactor", rasterizerState.polygonOffsetFactor);
json->addScalar("PolygonOffsetUnits", rasterizerState.polygonOffsetUnits);
json->addScalar("PolygonOffsetClamp", rasterizerState.polygonOffsetClamp);
- json->addScalar("DepthClamp", rasterizerState.depthClamp);
json->addScalar("PointDrawMode", rasterizerState.pointDrawMode);
json->addScalar("MultiSample", rasterizerState.multiSample);
json->addScalar("RasterizerDiscard", rasterizerState.rasterizerDiscard);
diff --git a/src/libANGLE/queryutils.cpp b/src/libANGLE/queryutils.cpp
index db601ee..7b4a0fb 100644
--- a/src/libANGLE/queryutils.cpp
+++ b/src/libANGLE/queryutils.cpp
@@ -3244,16 +3244,6 @@
*numParams = 1;
return true;
}
- case GL_DEPTH_CLAMP_EXT:
- {
- if (!extensions.depthClampEXT)
- {
- return false;
- }
- *type = GL_BOOL;
- *numParams = 1;
- return true;
- }
case GL_COLOR_LOGIC_OP:
{
if (!extensions.logicOpANGLE)
diff --git a/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp b/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp
index 245dab7..df8e6f6 100644
--- a/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp
@@ -193,7 +193,7 @@
rasterDesc.FillMode = D3D11_FILL_SOLID;
rasterDesc.CullMode = cullMode;
rasterDesc.FrontCounterClockwise = (rasterState.frontFace == GL_CCW) ? FALSE : TRUE;
- rasterDesc.DepthClipEnable = !rasterState.depthClamp;
+ rasterDesc.DepthClipEnable = TRUE;
rasterDesc.ScissorEnable = scissorEnabled ? TRUE : FALSE;
rasterDesc.MultisampleEnable = rasterState.multiSample;
rasterDesc.AntialiasedLineEnable = FALSE;
diff --git a/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp b/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
index e8e0633..0679947 100644
--- a/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
@@ -707,6 +707,7 @@
mCurDepthStencilState.stencilBackPassDepthPass = GL_KEEP;
mCurDepthStencilState.stencilBackWritemask = static_cast<GLuint>(-1);
+ mCurRasterState.rasterizerDiscard = false;
mCurRasterState.cullFace = false;
mCurRasterState.cullMode = gl::CullFaceMode::Back;
mCurRasterState.frontFace = GL_CCW;
@@ -714,10 +715,8 @@
mCurRasterState.polygonOffsetFactor = 0.0f;
mCurRasterState.polygonOffsetUnits = 0.0f;
mCurRasterState.polygonOffsetClamp = 0.0f;
- mCurRasterState.depthClamp = false;
mCurRasterState.pointDrawMode = false;
mCurRasterState.multiSample = false;
- mCurRasterState.rasterizerDiscard = false;
mCurRasterState.dither = false;
// Start with all internal dirty bits set except the SRV and UAV bits.
@@ -1211,12 +1210,6 @@
mInternalDirtyBits.set(DIRTY_BIT_DRIVER_UNIFORMS);
}
break;
- case gl::State::EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED:
- if (state.getRasterizerState().depthClamp != mCurRasterState.depthClamp)
- {
- mInternalDirtyBits.set(DIRTY_BIT_RASTERIZER_STATE);
- }
- break;
}
}
break;
diff --git a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
index f13e9c1..35a911b 100644
--- a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
@@ -1649,7 +1649,6 @@
extensions->shaderTextureLodEXT = GetShaderTextureLODSupport(featureLevel);
extensions->fragDepthEXT = true;
extensions->polygonOffsetClampEXT = (featureLevel >= D3D_FEATURE_LEVEL_10_0);
- extensions->depthClampEXT = true;
extensions->stencilTexturingANGLE = (featureLevel >= D3D_FEATURE_LEVEL_10_1);
extensions->multiviewOVR = IsMultiviewSupported(featureLevel);
extensions->multiview2OVR = IsMultiviewSupported(featureLevel);
diff --git a/src/libANGLE/renderer/gl/StateManagerGL.cpp b/src/libANGLE/renderer/gl/StateManagerGL.cpp
index 6464071..719f67e 100644
--- a/src/libANGLE/renderer/gl/StateManagerGL.cpp
+++ b/src/libANGLE/renderer/gl/StateManagerGL.cpp
@@ -142,7 +142,6 @@
mPolygonOffsetFactor(0.0f),
mPolygonOffsetUnits(0.0f),
mPolygonOffsetClamp(0.0f),
- mDepthClampEnabled(false),
mRasterizerDiscardEnabled(false),
mLineWidth(1.0f),
mPrimitiveRestartEnabled(false),
@@ -1701,25 +1700,6 @@
}
}
-void StateManagerGL::setDepthClampEnabled(bool enabled)
-{
- if (mDepthClampEnabled != enabled)
- {
- mDepthClampEnabled = enabled;
- if (mDepthClampEnabled)
- {
- mFunctions->enable(GL_DEPTH_CLAMP_EXT);
- }
- else
- {
- mFunctions->disable(GL_DEPTH_CLAMP_EXT);
- }
-
- mLocalDirtyBits.set(gl::State::DIRTY_BIT_EXTENDED);
- mLocalExtendedDirtyBits.set(gl::State::EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED);
- }
-}
-
void StateManagerGL::setRasterizerDiscardEnabled(bool enabled)
{
if (mRasterizerDiscardEnabled != enabled)
@@ -2258,9 +2238,6 @@
state.getEnabledClipDistances());
}
break;
- case gl::State::EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED:
- setDepthClampEnabled(state.isDepthClampEnabled());
- break;
case gl::State::EXTENDED_DIRTY_BIT_LOGIC_OP_ENABLED:
setLogicOpEnabled(state.isLogicOpEnabled());
break;
@@ -2916,17 +2893,6 @@
}
}
- if (extensions.depthClampEXT)
- {
- get(GL_DEPTH_CLAMP_EXT, &state->enableDepthClamp);
- if (mDepthClampEnabled != state->enableDepthClamp)
- {
- mDepthClampEnabled = state->enableDepthClamp;
- mLocalDirtyBits.set(gl::State::DIRTY_BIT_EXTENDED);
- mLocalExtendedDirtyBits.set(gl::State::EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED);
- }
- }
-
get(GL_SAMPLE_COVERAGE_VALUE, &state->sampleCoverageValue);
get(GL_SAMPLE_COVERAGE_INVERT, &state->sampleCoverageInvert);
if (mSampleCoverageValue != state->sampleCoverageValue ||
@@ -3025,11 +2991,6 @@
setPolygonOffset(state->polygonOffsetFactor, state->polygonOffsetUnits,
state->polygonOffsetClamp);
- if (extensions.depthClampEXT)
- {
- setDepthClampEnabled(state->enableDepthClamp);
- }
-
setSampleCoverage(state->sampleCoverageValue, state->sampleCoverageInvert);
setDitherEnabled(state->enableDither);
diff --git a/src/libANGLE/renderer/gl/StateManagerGL.h b/src/libANGLE/renderer/gl/StateManagerGL.h
index 01f9575..4ef2d75 100644
--- a/src/libANGLE/renderer/gl/StateManagerGL.h
+++ b/src/libANGLE/renderer/gl/StateManagerGL.h
@@ -67,7 +67,6 @@
bool enableDither;
bool enablePolygonOffsetFill;
- bool enableDepthClamp;
bool enableSampleAlphaToCoverage;
bool enableSampleCoverage;
bool multisampleEnabled;
@@ -232,7 +231,6 @@
void setFrontFace(GLenum frontFace);
void setPolygonOffsetFillEnabled(bool enabled);
void setPolygonOffset(float factor, float units, float clamp);
- void setDepthClampEnabled(bool enabled);
void setRasterizerDiscardEnabled(bool enabled);
void setLineWidth(float width);
@@ -501,7 +499,6 @@
GLfloat mPolygonOffsetFactor;
GLfloat mPolygonOffsetUnits;
GLfloat mPolygonOffsetClamp;
- bool mDepthClampEnabled;
bool mRasterizerDiscardEnabled;
float mLineWidth;
diff --git a/src/libANGLE/renderer/gl/renderergl_utils.cpp b/src/libANGLE/renderer/gl/renderergl_utils.cpp
index 738994f..43bdda2 100644
--- a/src/libANGLE/renderer/gl/renderergl_utils.cpp
+++ b/src/libANGLE/renderer/gl/renderergl_utils.cpp
@@ -1482,9 +1482,6 @@
functions->hasGLESExtension("GL_EXT_shader_texture_lod");
extensions->fragDepthEXT = functions->standard == STANDARD_GL_DESKTOP ||
functions->hasGLESExtension("GL_EXT_frag_depth");
- extensions->depthClampEXT = functions->isAtLeastGL(gl::Version(3, 2)) ||
- functions->hasGLExtension("GL_ARB_depth_clamp") ||
- functions->hasGLESExtension("GL_EXT_depth_clamp");
extensions->polygonOffsetClampEXT = functions->hasExtension("GL_EXT_polygon_offset_clamp");
// Support video texture extension on non Android backends.
diff --git a/src/libANGLE/renderer/metal/ContextMtl.h b/src/libANGLE/renderer/metal/ContextMtl.h
index 0f157b8..73addd6 100644
--- a/src/libANGLE/renderer/metal/ContextMtl.h
+++ b/src/libANGLE/renderer/metal/ContextMtl.h
@@ -526,7 +526,6 @@
DIRTY_BIT_DRIVER_UNIFORMS,
DIRTY_BIT_DEPTH_STENCIL_DESC,
DIRTY_BIT_DEPTH_BIAS,
- DIRTY_BIT_DEPTH_CLIP_MODE,
DIRTY_BIT_STENCIL_REF,
DIRTY_BIT_BLEND_COLOR,
DIRTY_BIT_VIEWPORT,
diff --git a/src/libANGLE/renderer/metal/ContextMtl.mm b/src/libANGLE/renderer/metal/ContextMtl.mm
index 9e42cc5..df9dada 100644
--- a/src/libANGLE/renderer/metal/ContextMtl.mm
+++ b/src/libANGLE/renderer/metal/ContextMtl.mm
@@ -1362,6 +1362,7 @@
break;
case gl::State::DIRTY_BIT_EXTENDED:
updateExtendedState(glState);
+ // Nothing to do until EXT_clip_control is implemented.
break;
case gl::State::DIRTY_BIT_SAMPLE_SHADING:
// Nothing to do until OES_sample_shading is implemented.
@@ -1380,21 +1381,9 @@
void ContextMtl::updateExtendedState(const gl::State &glState)
{
- gl::State::ExtendedDirtyBits extendedDirtyBits = glState.getAndResetExtendedDirtyBits();
- for (size_t extendedDirtyBit : extendedDirtyBits)
- {
- switch (extendedDirtyBit)
- {
- case gl::State::EXTENDED_DIRTY_BIT_CLIP_DISTANCES:
- invalidateDriverUniforms();
- break;
- case gl::State::EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED:
- mDirtyBits.set(DIRTY_BIT_DEPTH_CLIP_MODE);
- break;
- default:
- break;
- }
- }
+ // Handling clip distance enabled flags, mipmap generation hint & shader derivative
+ // hint.
+ invalidateDriverUniforms();
}
// Disjoint timer queries
@@ -2547,10 +2536,6 @@
case DIRTY_BIT_DEPTH_BIAS:
ANGLE_TRY(handleDirtyDepthBias(context));
break;
- case DIRTY_BIT_DEPTH_CLIP_MODE:
- mRenderEncoder.setDepthClipMode(
- mState.isDepthClampEnabled() ? MTLDepthClipModeClamp : MTLDepthClipModeClip);
- break;
case DIRTY_BIT_STENCIL_REF:
mRenderEncoder.setStencilRefVals(mStencilRefFront, mStencilRefBack);
break;
diff --git a/src/libANGLE/renderer/metal/DisplayMtl.mm b/src/libANGLE/renderer/metal/DisplayMtl.mm
index ed43184..ea9a09f 100644
--- a/src/libANGLE/renderer/metal/DisplayMtl.mm
+++ b/src/libANGLE/renderer/metal/DisplayMtl.mm
@@ -943,11 +943,6 @@
mNativeExtensions.textureMirrorClampToEdgeEXT = true;
}
- if (ANGLE_APPLE_AVAILABLE_XCI(10.11, 11.0, 13.1))
- {
- mNativeExtensions.depthClampEXT = true;
- }
-
// EXT_debug_marker is not implemented yet, but the entry points must be exposed for the
// Metal backend to be used in Chrome (http://anglebug.com/4946)
mNativeExtensions.debugMarkerEXT = true;
diff --git a/src/libANGLE/renderer/metal/mtl_command_buffer.h b/src/libANGLE/renderer/metal/mtl_command_buffer.h
index 828d621..aa42b9f 100644
--- a/src/libANGLE/renderer/metal/mtl_command_buffer.h
+++ b/src/libANGLE/renderer/metal/mtl_command_buffer.h
@@ -337,8 +337,6 @@
id<MTLDepthStencilState> depthStencilState;
float depthBias, depthSlopeScale, depthClamp;
- MTLDepthClipMode depthClipMode;
-
uint32_t stencilFrontRef, stencilBackRef;
Optional<MTLViewport> viewport;
@@ -375,7 +373,6 @@
RenderCommandEncoder &setDepthStencilState(id<MTLDepthStencilState> state);
RenderCommandEncoder &setDepthBias(float depthBias, float slopeScale, float clamp);
- RenderCommandEncoder &setDepthClipMode(MTLDepthClipMode depthClipMode);
RenderCommandEncoder &setStencilRefVals(uint32_t frontRef, uint32_t backRef);
RenderCommandEncoder &setStencilRefVal(uint32_t ref);
diff --git a/src/libANGLE/renderer/metal/mtl_command_buffer.mm b/src/libANGLE/renderer/metal/mtl_command_buffer.mm
index 3247043..bcbe2a6 100644
--- a/src/libANGLE/renderer/metal/mtl_command_buffer.mm
+++ b/src/libANGLE/renderer/metal/mtl_command_buffer.mm
@@ -48,7 +48,6 @@
PROC(SetCullMode) \
PROC(SetDepthStencilState) \
PROC(SetDepthBias) \
- PROC(SetDepthClipMode) \
PROC(SetStencilRefVals) \
PROC(SetViewport) \
PROC(SetScissorRect) \
@@ -135,13 +134,6 @@
[encoder setDepthBias:depthBias slopeScale:slopeScale clamp:clamp];
}
-inline void SetDepthClipModeCmd(id<MTLRenderCommandEncoder> encoder,
- IntermediateCommandStream *stream)
-{
- MTLDepthClipMode depthClipMode = stream->fetch<MTLDepthClipMode>();
- [encoder setDepthClipMode:depthClipMode];
-}
-
inline void SetStencilRefValsCmd(id<MTLRenderCommandEncoder> encoder,
IntermediateCommandStream *stream)
{
@@ -1222,8 +1214,6 @@
depthStencilState = nil;
depthBias = depthSlopeScale = depthClamp = 0;
- depthClipMode = MTLDepthClipModeClip;
-
stencilFrontRef = stencilBackRef = 0;
viewport.reset();
@@ -1663,18 +1653,6 @@
return *this;
}
-RenderCommandEncoder &RenderCommandEncoder::setDepthClipMode(MTLDepthClipMode depthClipMode)
-{
- if (mStateCache.depthClipMode == depthClipMode)
- {
- return *this;
- }
- mStateCache.depthClipMode = depthClipMode;
-
- mCommands.push(CmdType::SetDepthClipMode).push(depthClipMode);
-
- return *this;
-}
RenderCommandEncoder &RenderCommandEncoder::setStencilRefVals(uint32_t frontRef, uint32_t backRef)
{
// Metal has some bugs when reference values are larger than 0xff
diff --git a/src/libANGLE/renderer/vulkan/ContextVk.cpp b/src/libANGLE/renderer/vulkan/ContextVk.cpp
index 42111ee..05be260 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ContextVk.cpp
@@ -5540,8 +5540,6 @@
case gl::State::EXTENDED_DIRTY_BIT_CLIP_DISTANCES:
invalidateGraphicsDriverUniforms();
break;
- case gl::State::EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED:
- break;
case gl::State::EXTENDED_DIRTY_BIT_MIPMAP_GENERATION_HINT:
break;
case gl::State::EXTENDED_DIRTY_BIT_SHADER_DERIVATIVE_HINT:
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index b6afce1..c6f9fc0 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -613,9 +613,6 @@
case GL_DITHER:
return true;
- case GL_DEPTH_CLAMP_EXT:
- return context->getExtensions().depthClampEXT;
-
case GL_PRIMITIVE_RESTART_FIXED_INDEX:
case GL_RASTERIZER_DISCARD:
return (context->getClientMajorVersion() >= 3);
diff --git a/src/tests/angle_end2end_tests.gni b/src/tests/angle_end2end_tests.gni
index 81eb874..d229d0a 100644
--- a/src/tests/angle_end2end_tests.gni
+++ b/src/tests/angle_end2end_tests.gni
@@ -62,7 +62,6 @@
"gl_tests/DebugTest.cpp",
"gl_tests/DepthStencilFormatsTest.cpp",
"gl_tests/DepthStencilTest.cpp",
- "gl_tests/DepthWriteTest.cpp",
"gl_tests/DesktopGLSLTest.cpp",
"gl_tests/DifferentStencilMasksTest.cpp",
"gl_tests/DiscardFramebufferEXTTest.cpp",
diff --git a/src/tests/angle_end2end_tests_expectations.txt b/src/tests/angle_end2end_tests_expectations.txt
index 9ceb257..99f6a05 100644
--- a/src/tests/angle_end2end_tests_expectations.txt
+++ b/src/tests/angle_end2end_tests_expectations.txt
@@ -1092,36 +1092,6 @@
8048 NVIDIA OPENGL : FramebufferTest_ES3.RenderSnorm16* = SKIP
8048 NVIDIA GLES : FramebufferTest_ES3.RenderSnorm16* = SKIP
-// D3D needs a workaround to follow OpenGL rules
-8077 D3D9 : DepthWriteTest.Test/ES2_D3D9__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenZeroAndNearPlane_* = SKIP
-8077 D3D9 : DepthWriteTest.Test/ES2_D3D9__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenFarPlaneAndOne_* = SKIP
-8077 D3D9 : DepthWriteTest.Test/ES2_D3D9__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthNegative_* = SKIP
-8077 D3D9 : DepthWriteTest.Test/ES2_D3D9__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthGreaterThanOne_* = SKIP
-8077 D3D11 : DepthWriteTest.Test/ES2_D3D11__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenZeroAndNearPlane_* = SKIP
-8077 D3D11 : DepthWriteTest.Test/ES2_D3D11__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenFarPlaneAndOne_* = SKIP
-8077 D3D11 : DepthWriteTest.Test/ES2_D3D11__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthNegative_* = SKIP
-8077 D3D11 : DepthWriteTest.Test/ES2_D3D11__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthGreaterThanOne_* = SKIP
-8077 D3D11 : DepthWriteTest.Test/ES3_D3D11__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenZeroAndNearPlane_* = SKIP
-8077 D3D11 : DepthWriteTest.Test/ES3_D3D11__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenFarPlaneAndOne_* = SKIP
-8077 D3D11 : DepthWriteTest.Test/ES3_D3D11__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthNegative_* = SKIP
-8077 D3D11 : DepthWriteTest.Test/ES3_D3D11__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthGreaterThanOne_* = SKIP
-
-// Vulkan needs a workaround and/or extensions usage to avoid undefined behavior
-8077 VULKAN : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenZeroAndNearPlane_* = SKIP
-8077 VULKAN : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenFarPlaneAndOne_* = SKIP
-8077 VULKAN : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthNegative_* = SKIP
-8077 VULKAN : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthGreaterThanOne_* = SKIP
-
-// Driver bugs
-8077 WIN INTEL OPENGL : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenZeroAndNearPlane_* = SKIP
-8077 WIN INTEL OPENGL : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenFarPlaneAndOne_* = SKIP
-8077 WIN INTEL OPENGL : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthNegative_* = SKIP
-8077 WIN INTEL OPENGL : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthGreaterThanOne_* = SKIP
-8077 MAC INTEL : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenZeroAndNearPlane_* = SKIP
-8077 MAC INTEL : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthBetweenFarPlaneAndOne_* = SKIP
-8077 MAC INTEL : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthNegative_* = SKIP
-8077 MAC INTEL : DepthWriteTest.Test/*__DepthRangeReduced_Clipped_VertexDepthInsideClipVolume_FragmentDepthGreaterThanOne_* = SKIP
-
// bits 24..31 from glClearValueuiv value don't work on Intel Metal.
7794 MAC INTEL METAL : PixelLocalStorageTest.ClearValues_r32/* = SKIP
diff --git a/src/tests/gl_tests/DepthWriteTest.cpp b/src/tests/gl_tests/DepthWriteTest.cpp
deleted file mode 100644
index b8c5591..0000000
--- a/src/tests/gl_tests/DepthWriteTest.cpp
+++ /dev/null
@@ -1,409 +0,0 @@
-//
-// Copyright 2023 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// The tests assert OpenGL behavior for all combinations of the following states
-// - Depth Range
-// - Full (0, 1)
-// - Reduced
-// - Depth Clamp
-// - Enabled (if supported)
-// - Disabled
-// - Vertex Depth
-// - Inside clip volume
-// - Less than -1
-// - Greater than +1
-// - gl_FragDepth
-// - Unused
-// - Passthrough (gl_FragCoord.z)
-// - Within the depth range
-// - Between 0 and near clipping plane
-// - Between 1 and far clipping plane
-// - Negative
-// - Greater than 1
-// - Depth buffer format
-// - DEPTH_COMPONENT16
-// - DEPTH_COMPONENT32F (ES 3.x only)
-
-#include "test_utils/ANGLETest.h"
-#include "test_utils/gl_raii.h"
-
-using namespace angle;
-
-namespace
-{
-
-enum class DepthRange
-{
- Full,
- Reduced,
-};
-
-enum class VertexDepth
-{
- InsideClipVolume,
- LessThanMinusOne,
- GreaterThanOne,
-};
-
-enum class FragmentDepth
-{
- Unused,
- Passthrough,
- WithinDepthRange,
- BetweenZeroAndNearPlane,
- BetweenFarPlaneAndOne,
- Negative,
- GreaterThanOne,
-};
-
-// Variations corresponding to enums above.
-using DepthWriteVariationsTestParams =
- std::tuple<angle::PlatformParameters, DepthRange, bool, VertexDepth, FragmentDepth, GLenum>;
-
-std::ostream &operator<<(std::ostream &out, DepthRange depthRange)
-{
- switch (depthRange)
- {
- case DepthRange::Full:
- out << "Full";
- break;
- case DepthRange::Reduced:
- out << "Reduced";
- break;
- }
-
- return out;
-}
-
-std::ostream &operator<<(std::ostream &out, VertexDepth vertexDepth)
-{
- switch (vertexDepth)
- {
- case VertexDepth::InsideClipVolume:
- out << "InsideClipVolume";
- break;
- case VertexDepth::LessThanMinusOne:
- out << "LessThanMinusOne";
- break;
- case VertexDepth::GreaterThanOne:
- out << "GreaterThanOne";
- break;
- }
-
- return out;
-}
-
-std::ostream &operator<<(std::ostream &out, FragmentDepth fragmentDepth)
-{
- switch (fragmentDepth)
- {
- case FragmentDepth::Unused:
- out << "Unused";
- break;
- case FragmentDepth::Passthrough:
- out << "Passthrough";
- break;
- case FragmentDepth::WithinDepthRange:
- out << "WithinDepthRange";
- break;
- case FragmentDepth::BetweenZeroAndNearPlane:
- out << "BetweenZeroAndNearPlane";
- break;
- case FragmentDepth::BetweenFarPlaneAndOne:
- out << "BetweenFarPlaneAndOne";
- break;
- case FragmentDepth::Negative:
- out << "Negative";
- break;
- case FragmentDepth::GreaterThanOne:
- out << "GreaterThanOne";
- break;
- }
-
- return out;
-}
-
-std::string BufferFormatToString(GLenum format)
-{
- switch (format)
- {
- case GL_DEPTH_COMPONENT16:
- return "Depth16Unorm";
- case GL_DEPTH_COMPONENT32F:
- return "Depth32Float";
- default:
- return nullptr;
- }
-}
-
-void ParseDepthWriteVariationsTestParams(const DepthWriteVariationsTestParams ¶ms,
- DepthRange *depthRangeOut,
- bool *depthClampEnabledOut,
- VertexDepth *vertexDepthOut,
- FragmentDepth *fragmentDepthOut,
- GLenum *depthBufferFormatOut)
-{
- *depthRangeOut = std::get<1>(params);
- *depthClampEnabledOut = std::get<2>(params);
- *vertexDepthOut = std::get<3>(params);
- *fragmentDepthOut = std::get<4>(params);
- *depthBufferFormatOut = std::get<5>(params);
-}
-
-std::string DepthWriteVariationsTestPrint(
- const ::testing::TestParamInfo<DepthWriteVariationsTestParams> ¶msInfo)
-{
- const DepthWriteVariationsTestParams ¶ms = paramsInfo.param;
- std::ostringstream out;
-
- out << std::get<0>(params);
-
- DepthRange depthRange;
- bool depthClampEnabled;
- VertexDepth vertexDepth;
- FragmentDepth fragmentDepth;
- GLenum depthBufferFormat;
- ParseDepthWriteVariationsTestParams(params, &depthRange, &depthClampEnabled, &vertexDepth,
- &fragmentDepth, &depthBufferFormat);
-
- out << "__"
- << "DepthRange" << depthRange << "_" << (depthClampEnabled ? "Clamped" : "Clipped") << "_"
- << "VertexDepth" << vertexDepth << "_"
- << "FragmentDepth" << fragmentDepth << "_" << BufferFormatToString(depthBufferFormat);
- return out.str();
-}
-
-class DepthWriteTest : public ANGLETest<DepthWriteVariationsTestParams>
-{};
-
-// Test correctness of depth writes
-TEST_P(DepthWriteTest, Test)
-{
- if (getClientMajorVersion() < 3)
- {
- ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_ANGLE_depth_texture"));
- ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_OES_texture_half_float"));
- }
- ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_color_buffer_half_float") &&
- !IsGLExtensionEnabled("GL_EXT_color_buffer_float"));
-
- DepthRange depthRange;
- bool depthClampEnabled;
- VertexDepth vertexDepth;
- FragmentDepth fragmentDepth;
- GLenum depthBufferFormat;
- ParseDepthWriteVariationsTestParams(GetParam(), &depthRange, &depthClampEnabled, &vertexDepth,
- &fragmentDepth, &depthBufferFormat);
-
- if (getClientMajorVersion() < 3)
- {
- ANGLE_SKIP_TEST_IF(fragmentDepth != FragmentDepth::Unused &&
- !IsGLExtensionEnabled("GL_EXT_frag_depth"));
- ANGLE_SKIP_TEST_IF(depthBufferFormat == GL_DEPTH_COMPONENT32F);
- }
- ANGLE_SKIP_TEST_IF(depthClampEnabled && !IsGLExtensionEnabled("GL_EXT_depth_clamp"));
-
- const float near = depthRange == DepthRange::Full ? 0.0 : 0.25;
- const float far = depthRange == DepthRange::Full ? 1.0 : 0.75;
- glDepthRangef(near, far);
-
- if (depthClampEnabled)
- {
- glEnable(GL_DEPTH_CLAMP_EXT);
- }
-
- float vertexDepthValue = 0.0;
- switch (vertexDepth)
- {
- case VertexDepth::InsideClipVolume:
- vertexDepthValue = 0.25; // maps to 0.625
- break;
- case VertexDepth::LessThanMinusOne:
- vertexDepthValue = -1.5;
- break;
- case VertexDepth::GreaterThanOne:
- vertexDepthValue = 1.5;
- break;
- }
-
- float fragmentDepthValue = 0.0;
- switch (fragmentDepth)
- {
- case FragmentDepth::Unused:
- case FragmentDepth::Passthrough:
- break;
- case FragmentDepth::WithinDepthRange:
- fragmentDepthValue = 0.375;
- break;
- case FragmentDepth::BetweenZeroAndNearPlane:
- fragmentDepthValue = depthRange == DepthRange::Reduced ? 0.125 : 0.0;
- break;
- case FragmentDepth::BetweenFarPlaneAndOne:
- fragmentDepthValue = depthRange == DepthRange::Reduced ? 0.875 : 1.0;
- break;
- case FragmentDepth::Negative:
- fragmentDepthValue = -0.25;
- break;
- case FragmentDepth::GreaterThanOne:
- fragmentDepthValue = 1.25;
- break;
- }
-
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_ALWAYS);
-
- const int w = getWindowWidth();
- const int h = getWindowHeight();
-
- const bool es2 = getClientMajorVersion() < 3;
- const bool fragCoord = fragmentDepth == FragmentDepth::Passthrough;
- std::stringstream fragmentSource;
- fragmentSource << (es2 ? "#extension GL_EXT_frag_depth : require\n" : "#version 300 es\n")
- << (es2 ? "" : "out mediump vec4 fragColor;\n")
- << (fragCoord ? "" : "uniform mediump float u_depth;\n") << "void main()\n"
- << "{\n"
- << (es2 ? " gl_FragColor" : " fragColor")
- << " = vec4(1.0, 0.0, 0.0, 1.0);\n"
- << " gl_FragDepth" << (es2 ? "EXT" : "")
- << (fragCoord ? " = gl_FragCoord.z;\n" : " = u_depth;\n") << "}";
-
- ANGLE_GL_PROGRAM(program, es2 ? essl1_shaders::vs::Simple() : essl3_shaders::vs::Simple(),
- fragmentDepth == FragmentDepth::Unused
- ? (es2 ? essl1_shaders::fs::Red() : essl3_shaders::fs::Red())
- : fragmentSource.str().c_str());
- glUseProgram(program);
- if (fragmentDepth != FragmentDepth::Unused && fragmentDepth != FragmentDepth::Passthrough)
- {
- glUniform1f(glGetUniformLocation(program, "u_depth"), fragmentDepthValue);
- }
- ASSERT_GL_NO_ERROR();
-
- GLFramebuffer fb;
- glBindFramebuffer(GL_FRAMEBUFFER, fb);
-
- GLRenderbuffer rb;
- glBindRenderbuffer(GL_RENDERBUFFER, rb);
- glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB565, w, h);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rb);
-
- GLTexture texDepth;
- glBindTexture(GL_TEXTURE_2D, texDepth);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexImage2D(
- GL_TEXTURE_2D, 0,
- depthBufferFormat == GL_DEPTH_COMPONENT32F ? GL_DEPTH_COMPONENT32F : GL_DEPTH_COMPONENT, w,
- h, 0, GL_DEPTH_COMPONENT,
- depthBufferFormat == GL_DEPTH_COMPONENT32F ? GL_FLOAT : GL_UNSIGNED_SHORT, nullptr);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, texDepth, 0);
-
- ASSERT_GL_FRAMEBUFFER_COMPLETE(GL_FRAMEBUFFER);
-
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_ALWAYS);
-
- glClearDepthf(0.33333333);
- glClear(GL_DEPTH_BUFFER_BIT);
-
- drawQuad(program, essl1_shaders::PositionAttrib(), vertexDepthValue);
- ASSERT_GL_NO_ERROR();
-
- auto getExpectedValue = [&]() {
- auto clamp = [](float x, float min, float max) {
- return x < min ? min : (x > max ? max : x);
- };
-
- if (depthClampEnabled)
- {
- if (fragmentDepth != FragmentDepth::Unused &&
- fragmentDepth != FragmentDepth::Passthrough)
- {
- // Fragment value clamped to the depth range
- return clamp(fragmentDepthValue, near, far);
- }
- else
- {
- // Vertex value transformed to window coordinates and clamped to the depth range
- return clamp(0.5f * ((far - near) * vertexDepthValue + (far + near)), near, far);
- }
- }
- else if (vertexDepthValue >= -1.0f && vertexDepthValue <= 1.0f)
- {
- if (fragmentDepth != FragmentDepth::Unused &&
- fragmentDepth != FragmentDepth::Passthrough)
- {
- // Fragment value clamped to [0, 1]
- return clamp(fragmentDepthValue, 0.0f, 1.0f);
- }
- else
- {
- // Vertex value transformed to window coordinates
- return 0.5f * ((far - near) * vertexDepthValue + (far + near));
- }
- }
- return 0.33333333f;
- };
-
- // Second pass to read written depth value
- ANGLE_GL_PROGRAM(readProgram, essl1_shaders::vs::Texture2D(), essl1_shaders::fs::Texture2D());
- glUseProgram(readProgram);
- glUniform1i(glGetUniformLocation(readProgram, essl1_shaders::Texture2DUniform()), 0);
- ASSERT_GL_NO_ERROR();
-
- GLFramebuffer readFb;
- glBindFramebuffer(GL_FRAMEBUFFER, readFb);
-
- GLRenderbuffer readRb;
- glBindRenderbuffer(GL_RENDERBUFFER, readRb);
- glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA16F, w, h);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, readRb);
-
- ASSERT_GL_FRAMEBUFFER_COMPLETE(GL_FRAMEBUFFER);
-
- glClear(GL_COLOR_BUFFER_BIT);
- drawQuad(readProgram, essl1_shaders::PositionAttrib(), 0.0f);
-
- float writtenValue[4] = {std::numeric_limits<float>::quiet_NaN()};
- glReadPixels(0, 0, 1, 1, GL_RGBA, GL_FLOAT, writtenValue);
- ASSERT_GL_NO_ERROR();
-
- EXPECT_NEAR(getExpectedValue(), writtenValue[0], 0.001);
-}
-
-constexpr DepthRange kDepthRanges[] = {
- DepthRange::Full,
- DepthRange::Reduced,
-};
-constexpr VertexDepth kVertexDepths[] = {
- VertexDepth::InsideClipVolume,
- VertexDepth::LessThanMinusOne,
- VertexDepth::GreaterThanOne,
-};
-constexpr FragmentDepth kFragmentDepths[] = {
- FragmentDepth::Unused,
- FragmentDepth::Passthrough,
- FragmentDepth::WithinDepthRange,
- FragmentDepth::BetweenZeroAndNearPlane,
- FragmentDepth::BetweenFarPlaneAndOne,
- FragmentDepth::Negative,
- FragmentDepth::GreaterThanOne,
-};
-constexpr GLenum kDepthBufferFormats[] = {
- GL_DEPTH_COMPONENT16,
- GL_DEPTH_COMPONENT32F,
-};
-
-GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(DepthWriteTest);
-ANGLE_INSTANTIATE_TEST_COMBINE_5(DepthWriteTest,
- DepthWriteVariationsTestPrint,
- testing::ValuesIn(kDepthRanges),
- testing::Bool(),
- testing::ValuesIn(kVertexDepths),
- testing::ValuesIn(kFragmentDepths),
- testing::ValuesIn(kDepthBufferFormats),
- ANGLE_ALL_TEST_PLATFORMS_ES2,
- ANGLE_ALL_TEST_PLATFORMS_ES3);
-
-} // anonymous namespace