Revert "Don't expose non-conformant multisampling modes on GL"
This reverts commit 3cd0dd370f08e7126fe19b761206280c64f80cd1.
Reason for revert: crashes on NVIDIA Shield TV
https://build.chromium.org/p/chromium.gpu.fyi/builders/Android%20Release%20%28NVIDIA%20Shield%20TV%29/builds/1816
Original change's description:
> Don't expose non-conformant multisampling modes on GL
>
> Some NVIDIA GL drivers expose non-conformant multisampling modes. The
> conformance of multisampling modes can be queried using the extension
> NV_internalformat_sample_query. Use it to filter out the
> non-conformant modes from the modes that are exposed by ANGLE.
>
> The MAX_SAMPLES value and other similar values stored in caps also
> need to be lowered to match the maximum number of samples exposed
> for required formats.
>
> There seems to be an NVIDIA driver bug related to querying
> STENCIL_INDEX8 multisample format. Work around this by querying
> DEPTH24_STENCIL8 instead.
>
> There's also some confusion around whether RGB9_E5 should be
> renderable. Once the floating point texture extensions got rolled
> into the core GL spec, it was eventually made clear that RGB9_E5
> is intended not to be renderable. The extension specs that predate
> float textures in the core spec do suggest that it would be
> renderable, but in practice drivers that advertise the extension
> strings don't reliably implement RGB9_E5 as renderable. Solve this
> by disabling it as a renderable format and adding an explanatory
> comment.
>
> BUG=chromium:682815
> TEST=angle_end2end_tests,
> dEQP-GLES31.functional.state_query.internal_format.renderbuffer.*
>
> Change-Id: I2218e3a23ea7b48a0615fea77a91897dc7d5fe9e
> Reviewed-on: https://chromium-review.googlesource.com/525515
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
TBR=geofflang@chromium.org,jmadill@chromium.org,cwallez@chromium.org,oetuaho@nvidia.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: chromium:682815
Change-Id: I1ebdf52c3fab1526f5a561ac4c8555e305ef2243
Reviewed-on: https://chromium-review.googlesource.com/551164
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 645fab8..be1325e 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -2746,58 +2746,12 @@
// OpenGL ES does not support multisampling with non-rendererable formats
// OpenGL ES 3.0 or prior does not support multisampling with integer formats
- if (!formatCaps.renderable ||
+ if (!formatInfo.renderSupport ||
(getClientVersion() < ES_3_1 &&
(formatInfo.componentType == GL_INT || formatInfo.componentType == GL_UNSIGNED_INT)))
{
formatCaps.sampleCounts.clear();
}
- else
- {
- // We may have limited the max samples for some required renderbuffer formats due to
- // non-conformant formats. In this case MAX_SAMPLES needs to be lowered accordingly.
- GLuint formatMaxSamples = formatCaps.getMaxSamples();
-
- // GLES 3.0.5 section 4.4.2.2: "Implementations must support creation of renderbuffers
- // in these required formats with up to the value of MAX_SAMPLES multisamples, with the
- // exception of signed and unsigned integer formats."
- if (formatInfo.componentType != GL_INT && formatInfo.componentType != GL_UNSIGNED_INT &&
- formatInfo.isRequiredRenderbufferFormat(getClientVersion()))
- {
- ASSERT(getClientVersion() < ES_3_0 || formatMaxSamples >= 4);
- mCaps.maxSamples = std::min(mCaps.maxSamples, formatMaxSamples);
- }
-
- // Handle GLES 3.1 MAX_*_SAMPLES values similarly to MAX_SAMPLES.
- if (getClientVersion() >= ES_3_1)
- {
- // GLES 3.1 section 9.2.5: "Implementations must support creation of renderbuffers
- // in these required formats with up to the value of MAX_SAMPLES multisamples, with
- // the exception that the signed and unsigned integer formats are required only to
- // support creation of renderbuffers with up to the value of MAX_INTEGER_SAMPLES
- // multisamples, which must be at least one."
- if (formatInfo.componentType == GL_INT ||
- formatInfo.componentType == GL_UNSIGNED_INT)
- {
- mCaps.maxIntegerSamples = std::min(mCaps.maxIntegerSamples, formatMaxSamples);
- }
-
- // GLES 3.1 section 19.3.1.
- if (formatCaps.texturable)
- {
- if (formatInfo.depthBits > 0)
- {
- mCaps.maxDepthTextureSamples =
- std::min(mCaps.maxDepthTextureSamples, formatMaxSamples);
- }
- else if (formatInfo.redBits > 0)
- {
- mCaps.maxColorTextureSamples =
- std::min(mCaps.maxColorTextureSamples, formatMaxSamples);
- }
- }
- }
- }
if (formatCaps.texturable && formatInfo.compressed)
{