Drop support for GL_EXT_raster_multisample
We had only used this extension in conjunction with
GL_NV_framebuffer_mixed_samples to draw directly to the framebuffer.
However, it's faster and higher quality to just use our own analytic
AA if we can draw directly to the framebuffer.
It might have been interesting to fake mixed samples using
GL_EXT_raster_multisample and PLS together, but those two extensions
don't appear to ever exist together.
Bug: skia:
Change-Id: Iea489cb0e03fc55aa64d3ea7fccc61b539cc461e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/197082
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp
index ec8c872..aaba016 100644
--- a/src/gpu/GrCaps.cpp
+++ b/src/gpu/GrCaps.cpp
@@ -51,7 +51,6 @@
fMaxRenderTargetSize = 1;
fMaxPreferredRenderTargetSize = 1;
fMaxTextureSize = 1;
- fMaxRasterSamples = 0;
fMaxWindowRectangles = 0;
// An default count of 4 was chosen because of the common pattern in Blink of:
@@ -220,7 +219,6 @@
writer->appendS32("Max Texture Size", fMaxTextureSize);
writer->appendS32("Max Render Target Size", fMaxRenderTargetSize);
writer->appendS32("Max Preferred Render Target Size", fMaxPreferredRenderTargetSize);
- writer->appendS32("Max Raster Samples", fMaxRasterSamples);
writer->appendS32("Max Window Rectangles", fMaxWindowRectangles);
writer->appendS32("Max Clip Analytic Fragment Processors", fMaxClipAnalyticFPs);
diff --git a/src/gpu/GrCaps.h b/src/gpu/GrCaps.h
index 76eae0f..b11077a 100644
--- a/src/gpu/GrCaps.h
+++ b/src/gpu/GrCaps.h
@@ -148,8 +148,6 @@
return fMaxTileSize;
}
- int maxRasterSamples() const { return fMaxRasterSamples; }
-
int maxWindowRectangles() const { return fMaxWindowRectangles; }
// Returns whether mixed samples is supported for the given backend render target.
@@ -381,7 +379,6 @@
int fMaxVertexAttributes;
int fMaxTextureSize;
int fMaxTileSize;
- int fMaxRasterSamples;
int fMaxWindowRectangles;
int fMaxClipAnalyticFPs;
diff --git a/src/gpu/gl/GrGLAssembleInterface.cpp b/src/gpu/gl/GrGLAssembleInterface.cpp
index 138a4c1..11458d0 100644
--- a/src/gpu/gl/GrGLAssembleInterface.cpp
+++ b/src/gpu/gl/GrGLAssembleInterface.cpp
@@ -188,9 +188,6 @@
GET_PROC(PixelStorei);
GET_PROC(PolygonMode);
- if (extensions.has("GL_EXT_raster_multisample")) {
- GET_PROC_SUFFIX(RasterSamples, EXT);
- }
GET_PROC(ReadBuffer);
GET_PROC(ReadPixels);
GET_PROC(Scissor);
@@ -559,10 +556,6 @@
GET_PROC(PixelStorei);
- if (extensions.has("GL_EXT_raster_multisample")) {
- GET_PROC_SUFFIX(RasterSamples, EXT);
- }
-
if (version >= GR_GL_VER(3,0)) {
GET_PROC(ReadBuffer);
}
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index ee3d6ee..308b46a 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -997,11 +997,6 @@
if (kIntel_GrGLVendor == ctxInfo.vendor()) {
fMSFBOType = kNone_MSFBOType;
}
-
- // We only have a use for raster multisample if there is coverage modulation from mixed samples.
- if (fUsesMixedSamples && ctxInfo.hasExtension("GL_EXT_raster_multisample")) {
- GR_GL_GetIntegerv(gli, GR_GL_MAX_RASTER_SAMPLES, &fMaxRasterSamples);
- }
}
void GrGLCaps::initBlendEqationSupport(const GrGLContextInfo& ctxInfo) {
diff --git a/src/gpu/gl/GrGLDefines.h b/src/gpu/gl/GrGLDefines.h
index aa7e883..28b3798 100644
--- a/src/gpu/gl/GrGLDefines.h
+++ b/src/gpu/gl/GrGLDefines.h
@@ -989,14 +989,6 @@
/* ARM specific define for MSAA support on framebuffer fetch */
#define GR_GL_FETCH_PER_SAMPLE 0x8F65
-/* GL_EXT_raster_multisample */
-#define GR_GL_RASTER_MULTISAMPLE 0x9327
-#define GR_GL_RASTER_SAMPLES 0x9328
-#define GR_GL_MAX_RASTER_SAMPLES 0x9329
-#define GR_GL_RASTER_FIXED_SAMPLE_LOCATIONS 0x932A
-#define GR_GL_MULTISAMPLE_RASTERIZATION_ALLOWED 0x932B
-#define GR_GL_EFFECTIVE_RASTER_SAMPLES 0x932C
-
/* GL_KHR_debug */
#define GR_GL_DEBUG_OUTPUT 0x92E0
#define GR_GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index d6afcf0..a61f48b 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -579,11 +579,6 @@
fMSAAEnabled = kUnknown_TriState;
if (this->caps()->usesMixedSamples()) {
- if (0 != this->caps()->maxRasterSamples()) {
- fHWRasterMultisampleEnabled = kUnknown_TriState;
- fHWNumRasterSamples = 0;
- }
-
// The skia blend modes all use premultiplied alpha and therefore expect RGBA coverage
// modulation. This state has no effect when not rendering to a mixed sampled target.
GL_CALL(CoverageModulation(GR_GL_RGBA));
@@ -2058,7 +2053,7 @@
this->disableScissor();
}
this->flushWindowRectangles(pipeline.getWindowRectsState(), glRT, origin);
- this->flushHWAAState(glRT, pipeline.isHWAntialiasState(), !stencil.isDisabled());
+ this->flushHWAAState(glRT, pipeline.isHWAntialiasState());
// This must come after textures are flushed because a texture may need
// to be msaa-resolved (which will modify bound FBO state).
@@ -2852,7 +2847,7 @@
}
}
-void GrGLGpu::flushHWAAState(GrRenderTarget* rt, bool useHWAA, bool stencilEnabled) {
+void GrGLGpu::flushHWAAState(GrRenderTarget* rt, bool useHWAA) {
// rt is only optional if useHWAA is false.
SkASSERT(rt || !useHWAA);
SkASSERT(!useHWAA || rt->isStencilBufferMultisampled());
@@ -2870,32 +2865,6 @@
}
}
}
-
- if (0 != this->caps()->maxRasterSamples()) {
- if (useHWAA && GrFSAAType::kMixedSamples == rt->fsaaType() && !stencilEnabled) {
- // Since stencil is disabled and we want more samples than are in the color buffer, we
- // need to tell the rasterizer explicitly how many to run.
- if (kYes_TriState != fHWRasterMultisampleEnabled) {
- GL_CALL(Enable(GR_GL_RASTER_MULTISAMPLE));
- fHWRasterMultisampleEnabled = kYes_TriState;
- }
- int numStencilSamples = rt->numStencilSamples();
- // convert to GL's understanding of sample counts where 0 means nonMSAA.
- numStencilSamples = 1 == numStencilSamples ? 0 : numStencilSamples;
- if (numStencilSamples != fHWNumRasterSamples) {
- SkASSERT(numStencilSamples <= this->caps()->maxRasterSamples());
- GL_CALL(RasterSamples(numStencilSamples, GR_GL_TRUE));
- fHWNumRasterSamples = numStencilSamples;
- }
- } else {
- if (kNo_TriState != fHWRasterMultisampleEnabled) {
- GL_CALL(Disable(GR_GL_RASTER_MULTISAMPLE));
- fHWRasterMultisampleEnabled = kNo_TriState;
- }
- }
- } else {
- SkASSERT(!useHWAA || GrFSAAType::kMixedSamples != rt->fsaaType() || stencilEnabled);
- }
}
void GrGLGpu::flushBlend(const GrXferProcessor::BlendInfo& blendInfo, const GrSwizzle& swizzle) {
@@ -3726,7 +3695,7 @@
blendInfo.reset();
this->flushBlend(blendInfo, GrSwizzle::RGBA());
this->flushColorWrite(true);
- this->flushHWAAState(nullptr, false, false);
+ this->flushHWAAState(nullptr, false);
this->disableScissor();
this->disableWindowRectangles();
this->disableStencil();
@@ -3890,7 +3859,7 @@
blendInfo.reset();
this->flushBlend(blendInfo, GrSwizzle::RGBA());
this->flushColorWrite(true);
- this->flushHWAAState(nullptr, false, false);
+ this->flushHWAAState(nullptr, false);
this->disableScissor();
this->disableWindowRectangles();
this->disableStencil();
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index e5d0db4..5c23924 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -377,7 +377,7 @@
void disableStencil();
// rt is used only if useHWAA is true.
- void flushHWAAState(GrRenderTarget* rt, bool useHWAA, bool stencilEnabled);
+ void flushHWAAState(GrRenderTarget* rt, bool useHWAA);
void flushFramebufferSRGB(bool enable);
@@ -624,11 +624,6 @@
GrGLuint fBoundDrawFramebuffer = 0;
- // EXT_raster_multisample.
- TriState fHWRasterMultisampleEnabled;
- int fHWNumRasterSamples;
- ///@}
-
/** IDs for copy surface program. (3 sampler types) */
struct {
GrGLuint fProgram = 0;
diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp
index aa8fb63..6f5be65 100644
--- a/src/gpu/gl/GrGLInterface.cpp
+++ b/src/gpu/gl/GrGLInterface.cpp
@@ -502,12 +502,6 @@
}
}
- if (fExtensions.has("GL_EXT_raster_multisample")) {
- if (!fFunctions.fRasterSamples) {
- RETURN_FALSE_INTERFACE;
- }
- }
-
if (fExtensions.has("GL_NV_framebuffer_mixed_samples") ||
fExtensions.has("GL_CHROMIUM_framebuffer_mixed_samples")) {
if (!fFunctions.fCoverageModulation) {
diff --git a/src/gpu/gl/GrGLPathRendering.cpp b/src/gpu/gl/GrGLPathRendering.cpp
index c1f05af..19e8bba 100644
--- a/src/gpu/gl/GrGLPathRendering.cpp
+++ b/src/gpu/gl/GrGLPathRendering.cpp
@@ -92,7 +92,7 @@
SkISize size = SkISize::Make(rt->width(), rt->height());
this->setProjectionMatrix(*args.fViewMatrix, size, args.fProxy->origin());
gpu->flushScissor(*args.fScissor, rt->getViewport(), args.fProxy->origin());
- gpu->flushHWAAState(rt, args.fUseHWAA, true);
+ gpu->flushHWAAState(rt, args.fUseHWAA);
gpu->flushRenderTarget(rt);
const GrGLPath* glPath = static_cast<const GrGLPath*>(path);
diff --git a/src/gpu/gl/GrGLTestInterface.cpp b/src/gpu/gl/GrGLTestInterface.cpp
index c6539c1..7b4617e 100644
--- a/src/gpu/gl/GrGLTestInterface.cpp
+++ b/src/gpu/gl/GrGLTestInterface.cpp
@@ -125,7 +125,6 @@
fFunctions.fPopGroupMarker = bind_to_member(this, &GrGLTestInterface::popGroupMarker);
fFunctions.fPushGroupMarker = bind_to_member(this, &GrGLTestInterface::pushGroupMarker);
fFunctions.fQueryCounter = bind_to_member(this, &GrGLTestInterface::queryCounter);
- fFunctions.fRasterSamples = bind_to_member(this, &GrGLTestInterface::rasterSamples);
fFunctions.fReadBuffer = bind_to_member(this, &GrGLTestInterface::readBuffer);
fFunctions.fReadPixels = bind_to_member(this, &GrGLTestInterface::readPixels);
fFunctions.fRenderbufferStorage = bind_to_member(this, &GrGLTestInterface::renderbufferStorage);