aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/gpu/GrCaps.h2
-rw-r--r--src/gpu/GrCaps.cpp2
-rw-r--r--src/gpu/GrPathRendererChain.cpp2
-rw-r--r--src/gpu/gl/GrGLAssembleInterface.cpp87
-rw-r--r--src/gpu/gl/GrGLCaps.cpp10
-rw-r--r--src/gpu/gl/GrGLInterface.cpp149
-rw-r--r--src/gpu/ops/GrDefaultPathRenderer.cpp9
-rw-r--r--src/gpu/ops/GrDefaultPathRenderer.h5
-rw-r--r--src/gpu/ops/GrMSAAPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrPathStencilSettings.h66
-rw-r--r--src/gpu/vk/GrVkCaps.cpp2
11 files changed, 115 insertions, 221 deletions
diff --git a/include/gpu/GrCaps.h b/include/gpu/GrCaps.h
index a41caf6ff7..92171204b3 100644
--- a/include/gpu/GrCaps.h
+++ b/include/gpu/GrCaps.h
@@ -43,7 +43,6 @@ public:
* Is there support for enabling/disabling sRGB writes for sRGB-capable color buffers?
*/
bool srgbWriteControl() const { return fSRGBWriteControl; }
- bool stencilWrapOpsSupport() const { return fStencilWrapOpsSupport; }
bool discardRenderTargetSupport() const { return fDiscardRenderTargetSupport; }
bool gpuTracingSupport() const { return fGpuTracingSupport; }
bool compressedTexSubImageSupport() const { return fCompressedTexSubImageSupport; }
@@ -207,7 +206,6 @@ protected:
bool fMipMapSupport : 1;
bool fSRGBSupport : 1;
bool fSRGBWriteControl : 1;
- bool fStencilWrapOpsSupport : 1;
bool fDiscardRenderTargetSupport : 1;
bool fReuseScratchTextures : 1;
bool fReuseScratchBuffers : 1;
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp
index 78bb6795e9..57ab5fdece 100644
--- a/src/gpu/GrCaps.cpp
+++ b/src/gpu/GrCaps.cpp
@@ -36,7 +36,6 @@ GrCaps::GrCaps(const GrContextOptions& options) {
fNPOTTextureTileSupport = false;
fSRGBSupport = false;
fSRGBWriteControl = false;
- fStencilWrapOpsSupport = false;
fDiscardRenderTargetSupport = false;
fReuseScratchTextures = true;
fReuseScratchBuffers = true;
@@ -125,7 +124,6 @@ SkString GrCaps::dump() const {
r.appendf("NPOT Texture Tile Support : %s\n", gNY[fNPOTTextureTileSupport]);
r.appendf("sRGB Support : %s\n", gNY[fSRGBSupport]);
r.appendf("sRGB Write Control : %s\n", gNY[fSRGBWriteControl]);
- r.appendf("Stencil Wrap Ops Support : %s\n", gNY[fStencilWrapOpsSupport]);
r.appendf("Discard Render Target Support : %s\n", gNY[fDiscardRenderTargetSupport]);
r.appendf("Reuse Scratch Textures : %s\n", gNY[fReuseScratchTextures]);
r.appendf("Reuse Scratch Buffers : %s\n", gNY[fReuseScratchBuffers]);
diff --git a/src/gpu/GrPathRendererChain.cpp b/src/gpu/GrPathRendererChain.cpp
index 8d06a5e7cf..076dea7b82 100644
--- a/src/gpu/GrPathRendererChain.cpp
+++ b/src/gpu/GrPathRendererChain.cpp
@@ -60,7 +60,7 @@ GrPathRendererChain::GrPathRendererChain(GrContext* context, const Options& opti
fChain.push_back(sk_make_sp<GrTessellatingPathRenderer>());
}
if (options.fGpuPathRenderers & GpuPathRenderers::kDefault) {
- fChain.push_back(sk_make_sp<GrDefaultPathRenderer>(caps.stencilWrapOpsSupport()));
+ fChain.push_back(sk_make_sp<GrDefaultPathRenderer>());
}
}
diff --git a/src/gpu/gl/GrGLAssembleInterface.cpp b/src/gpu/gl/GrGLAssembleInterface.cpp
index 83920dba8d..7914934eac 100644
--- a/src/gpu/gl/GrGLAssembleInterface.cpp
+++ b/src/gpu/gl/GrGLAssembleInterface.cpp
@@ -64,8 +64,8 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
const char* versionString = (const char*) GetString(GR_GL_VERSION);
GrGLVersion glVer = GrGLGetVersionFromString(versionString);
- if (glVer < GR_GL_VER(1,5) || GR_GL_INVALID_VER == glVer) {
- // We must have array and element_array buffer objects.
+ if (glVer < GR_GL_VER(2,0) || GR_GL_INVALID_VER == glVer) {
+ // This is our minimum for non-ES GL.
return nullptr;
}
@@ -97,20 +97,8 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
GET_PROC_SUFFIX(BlendBarrier, NV);
}
- if (glVer >= GR_GL_VER(1,4) ||
- extensions.has("GL_ARB_imaging")) {
- GET_PROC(BlendColor);
- } else if (extensions.has("GL_EXT_blend_color")) {
- GET_PROC_SUFFIX(BlendColor, EXT);
- }
-
- if (glVer >= GR_GL_VER(1,4) ||
- extensions.has("GL_ARB_imaging")) {
- GET_PROC(BlendEquation);
- } else if (extensions.has("GL_EXT_blend_subtract")) {
- GET_PROC_SUFFIX(BlendEquation, EXT);
- }
-
+ GET_PROC(BlendColor);
+ GET_PROC(BlendEquation);
GET_PROC(BlendFunc);
GET_PROC(BufferData);
GET_PROC(BufferSubData);
@@ -148,9 +136,7 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
GET_PROC(DrawArraysIndirect);
GET_PROC(DrawElementsIndirect);
}
- if (glVer >= GR_GL_VER(2,0)) {
- GET_PROC(DrawRangeElements);
- }
+ GET_PROC(DrawRangeElements);
GET_PROC(Enable);
GET_PROC(EnableVertexAttribArray);
GET_PROC(EndQuery);
@@ -406,11 +392,37 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
GET_PROC_SUFFIX(CopyTextureImage2D, EXT);
GET_PROC_SUFFIX(CopyTextureSubImage1D, EXT);
GET_PROC_SUFFIX(CopyTextureSubImage2D, EXT);
+ GET_PROC_SUFFIX(GetNamedBufferParameteriv, EXT);
+ GET_PROC_SUFFIX(GetNamedBufferPointerv, EXT);
+ GET_PROC_SUFFIX(GetNamedBufferSubData, EXT);
GET_PROC_SUFFIX(GetTextureImage, EXT);
GET_PROC_SUFFIX(GetTextureParameterfv, EXT);
GET_PROC_SUFFIX(GetTextureParameteriv, EXT);
GET_PROC_SUFFIX(GetTextureLevelParameterfv, EXT);
GET_PROC_SUFFIX(GetTextureLevelParameteriv, EXT);
+ GET_PROC_SUFFIX(MapNamedBuffer, EXT);
+ GET_PROC_SUFFIX(NamedBufferData, EXT);
+ GET_PROC_SUFFIX(NamedBufferSubData, EXT);
+ GET_PROC_SUFFIX(ProgramUniform1f, EXT);
+ GET_PROC_SUFFIX(ProgramUniform2f, EXT);
+ GET_PROC_SUFFIX(ProgramUniform3f, EXT);
+ GET_PROC_SUFFIX(ProgramUniform4f, EXT);
+ GET_PROC_SUFFIX(ProgramUniform1i, EXT);
+ GET_PROC_SUFFIX(ProgramUniform2i, EXT);
+ GET_PROC_SUFFIX(ProgramUniform3i, EXT);
+ GET_PROC_SUFFIX(ProgramUniform4i, EXT);
+ GET_PROC_SUFFIX(ProgramUniform1fv, EXT);
+ GET_PROC_SUFFIX(ProgramUniform2fv, EXT);
+ GET_PROC_SUFFIX(ProgramUniform3fv, EXT);
+ GET_PROC_SUFFIX(ProgramUniform4fv, EXT);
+ GET_PROC_SUFFIX(ProgramUniform1iv, EXT);
+ GET_PROC_SUFFIX(ProgramUniform2iv, EXT);
+ GET_PROC_SUFFIX(ProgramUniform3iv, EXT);
+ GET_PROC_SUFFIX(ProgramUniform4iv, EXT);
+ GET_PROC_SUFFIX(ProgramUniformMatrix2fv, EXT);
+ GET_PROC_SUFFIX(ProgramUniformMatrix3fv, EXT);
+ GET_PROC_SUFFIX(ProgramUniformMatrix4fv, EXT);
+ GET_PROC_SUFFIX(UnmapNamedBuffer, EXT);
if (glVer >= GR_GL_VER(1,2)) {
GET_PROC_SUFFIX(TextureImage3D, EXT);
GET_PROC_SUFFIX(TextureSubImage3D, EXT);
@@ -423,36 +435,6 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
GET_PROC_SUFFIX(CompressedTextureSubImage1D, EXT);
GET_PROC_SUFFIX(GetCompressedTextureImage, EXT);
}
- if (glVer >= GR_GL_VER(1,5)) {
- GET_PROC_SUFFIX(NamedBufferData, EXT);
- GET_PROC_SUFFIX(NamedBufferSubData, EXT);
- GET_PROC_SUFFIX(MapNamedBuffer, EXT);
- GET_PROC_SUFFIX(UnmapNamedBuffer, EXT);
- GET_PROC_SUFFIX(GetNamedBufferParameteriv, EXT);
- GET_PROC_SUFFIX(GetNamedBufferPointerv, EXT);
- GET_PROC_SUFFIX(GetNamedBufferSubData, EXT);
- }
- if (glVer >= GR_GL_VER(2,0)) {
- GET_PROC_SUFFIX(ProgramUniform1f, EXT);
- GET_PROC_SUFFIX(ProgramUniform2f, EXT);
- GET_PROC_SUFFIX(ProgramUniform3f, EXT);
- GET_PROC_SUFFIX(ProgramUniform4f, EXT);
- GET_PROC_SUFFIX(ProgramUniform1i, EXT);
- GET_PROC_SUFFIX(ProgramUniform2i, EXT);
- GET_PROC_SUFFIX(ProgramUniform3i, EXT);
- GET_PROC_SUFFIX(ProgramUniform4i, EXT);
- GET_PROC_SUFFIX(ProgramUniform1fv, EXT);
- GET_PROC_SUFFIX(ProgramUniform2fv, EXT);
- GET_PROC_SUFFIX(ProgramUniform3fv, EXT);
- GET_PROC_SUFFIX(ProgramUniform4fv, EXT);
- GET_PROC_SUFFIX(ProgramUniform1iv, EXT);
- GET_PROC_SUFFIX(ProgramUniform2iv, EXT);
- GET_PROC_SUFFIX(ProgramUniform3iv, EXT);
- GET_PROC_SUFFIX(ProgramUniform4iv, EXT);
- GET_PROC_SUFFIX(ProgramUniformMatrix2fv, EXT);
- GET_PROC_SUFFIX(ProgramUniformMatrix3fv, EXT);
- GET_PROC_SUFFIX(ProgramUniformMatrix4fv, EXT);
- }
if (glVer >= GR_GL_VER(2,1)) {
GET_PROC_SUFFIX(ProgramUniformMatrix2x3fv, EXT);
GET_PROC_SUFFIX(ProgramUniformMatrix3x2fv, EXT);
@@ -622,6 +604,7 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) {
if (version >= GR_GL_VER(3,0)) {
GET_PROC(DrawArraysInstanced);
+ GET_PROC(DrawBuffers);
GET_PROC(DrawElementsInstanced);
} else if (extensions.has("GL_EXT_draw_instanced")) {
GET_PROC_SUFFIX(DrawArraysInstanced, EXT);
@@ -661,6 +644,9 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) {
GET_PROC(GetShaderiv);
GET_PROC(GetString);
GET_PROC(GetStringi);
+ if (version >= GR_GL_VER(3,1)) {
+ GET_PROC(GetTexLevelParameteriv);
+ }
GET_PROC(GetUniformLocation);
GET_PROC(IsTexture);
GET_PROC(LineWidth);
@@ -677,6 +663,9 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) {
GET_PROC_SUFFIX(RasterSamples, EXT);
}
+ if (version >= GR_GL_VER(3,0)) {
+ GET_PROC(ReadBuffer);
+ }
GET_PROC(ReadPixels);
GET_PROC(Scissor);
GET_PROC(ShaderSource);
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index ad0b6bc9b3..47f26ff2f5 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -378,14 +378,6 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
this->initBlendEqationSupport(ctxInfo);
this->initStencilFormats(ctxInfo);
- if (kGL_GrGLStandard == standard) {
- // supported on GL 1.4 and higher or by extension
- fStencilWrapOpsSupport = (ctxInfo.version() >= GR_GL_VER(1,4)) ||
- ctxInfo.hasExtension("GL_EXT_stencil_wrap");
- } else {
- // ES 2 has stencil wrap
- fStencilWrapOpsSupport = true;
- }
if (kGL_GrGLStandard == standard) {
fMapBufferFlags = kCanMap_MapFlag; // we require VBO support and the desktop VBO
@@ -437,8 +429,6 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
}
if (kGL_GrGLStandard == standard) {
- SkASSERT(ctxInfo.version() >= GR_GL_VER(2,0) ||
- ctxInfo.hasExtension("GL_ARB_texture_non_power_of_two"));
fNPOTTextureTileSupport = true;
fMipMapSupport = true;
} else {
diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp
index 5bb4b5f6f8..ee67b21124 100644
--- a/src/gpu/gl/GrGLInterface.cpp
+++ b/src/gpu/gl/GrGLInterface.cpp
@@ -79,6 +79,8 @@ bool GrGLInterface::validate() const {
nullptr == fFunctions.fClearStencil ||
nullptr == fFunctions.fColorMask ||
nullptr == fFunctions.fCompileShader ||
+ nullptr == fFunctions.fCompressedTexImage2D ||
+ nullptr == fFunctions.fCompressedTexSubImage2D ||
nullptr == fFunctions.fCopyTexSubImage2D ||
nullptr == fFunctions.fCreateProgram ||
nullptr == fFunctions.fCreateShader ||
@@ -107,9 +109,7 @@ bool GrGLInterface::validate() const {
nullptr == fFunctions.fGetShaderiv ||
nullptr == fFunctions.fGetString ||
nullptr == fFunctions.fGetUniformLocation ||
-#if 0 // Not included in Chrome yet
nullptr == fFunctions.fIsTexture ||
-#endif
nullptr == fFunctions.fLinkProgram ||
nullptr == fFunctions.fLineWidth ||
nullptr == fFunctions.fPixelStorei ||
@@ -182,31 +182,10 @@ bool GrGLInterface::validate() const {
// On the desktop we assume they are available if the extension
// is present or GL version is high enough.
if (kGL_GrGLStandard == fStandard) {
- if (glVer >= GR_GL_VER(2,0)) {
- if (nullptr == fFunctions.fPolygonMode) {
- RETURN_FALSE_INTERFACE
- }
- }
if (glVer >= GR_GL_VER(3,0) && nullptr == fFunctions.fBindFragDataLocation) {
RETURN_FALSE_INTERFACE
}
- if (glVer >= GR_GL_VER(2,0) || fExtensions.has("GL_ARB_draw_buffers")) {
- if (nullptr == fFunctions.fDrawBuffers) {
- RETURN_FALSE_INTERFACE
- }
- }
- if (glVer >= GR_GL_VER(1,5) || fExtensions.has("GL_ARB_occlusion_query")) {
- if (nullptr == fFunctions.fGenQueries ||
- nullptr == fFunctions.fDeleteQueries ||
- nullptr == fFunctions.fBeginQuery ||
- nullptr == fFunctions.fEndQuery ||
- nullptr == fFunctions.fGetQueryiv ||
- nullptr == fFunctions.fGetQueryObjectiv ||
- nullptr == fFunctions.fGetQueryObjectuiv) {
- RETURN_FALSE_INTERFACE
- }
- }
if (glVer >= GR_GL_VER(3,3) ||
fExtensions.has("GL_ARB_timer_query") ||
fExtensions.has("GL_EXT_timer_query")) {
@@ -222,25 +201,31 @@ bool GrGLInterface::validate() const {
}
}
- // optional function on desktop before 1.3
- if (kGL_GrGLStandard != fStandard ||
- (glVer >= GR_GL_VER(1,3)) ||
- fExtensions.has("GL_ARB_texture_compression")) {
- if (nullptr == fFunctions.fCompressedTexImage2D
-#if 0
- || nullptr == fFunctions.fCompressedTexSubImage2D
-#endif
- ) {
+ // part of desktop GL, but not ES
+ if (kGL_GrGLStandard == fStandard &&
+ (nullptr == fFunctions.fDrawBuffer ||
+ nullptr == fFunctions.fPolygonMode)) {
+ RETURN_FALSE_INTERFACE
+ }
+
+ // ES 3.0 (or ES 2.0 extended) has glDrawBuffers but not glDrawBuffer
+ if (kGL_GrGLStandard == fStandard || glVer >= GR_GL_VER(3,0)) {
+ if (nullptr == fFunctions.fDrawBuffers) {
RETURN_FALSE_INTERFACE
}
}
- // part of desktop GL, but not ES
- if (kGL_GrGLStandard == fStandard &&
- (nullptr == fFunctions.fGetTexLevelParameteriv ||
- nullptr == fFunctions.fDrawBuffer ||
- nullptr == fFunctions.fReadBuffer)) {
- RETURN_FALSE_INTERFACE
+ if (kGL_GrGLStandard == fStandard || glVer >= GR_GL_VER(3,0)) {
+ if (nullptr == fFunctions.fReadBuffer) {
+ RETURN_FALSE_INTERFACE
+ }
+ }
+
+ // glGetTexLevelParameteriv was added to ES in 3.1.
+ if (kGL_GrGLStandard == fStandard || glVer >= GR_GL_VER(3,1)) {
+ if (nullptr == fFunctions.fGetTexLevelParameteriv) {
+ RETURN_FALSE_INTERFACE
+ }
}
// GL_EXT_texture_storage is part of desktop 4.2
@@ -287,6 +272,25 @@ bool GrGLInterface::validate() const {
}
}
+ // Required since OpenGL 1.5 and ES 3.0 or with GL_EXT_occlusion_query_boolean
+ if (kGL_GrGLStandard == fStandard || glVer >= GR_GL_VER(3,0) ||
+ fExtensions.has("GL_EXT_occlusion_query_boolean")) {
+#if 0 // Not yet added to chrome's bindings.
+ if (nullptr == fFunctions.fGenQueries ||
+ nullptr == fFunctions.fDeleteQueries ||
+ nullptr == fFunctions.fBeginQuery ||
+ nullptr == fFunctions.fEndQuery ||
+ nullptr == fFunctions.fGetQueryiv ||
+ nullptr == fFunctions.fGetQueryObjectuiv) {
+ RETURN_FALSE_INTERFACE
+ }
+#endif
+ }
+ // glGetQueryObjectiv doesn't exist in ES.
+ if (kGL_GrGLStandard == fStandard && nullptr == fFunctions.fGetQueryObjectiv) {
+ RETURN_FALSE_INTERFACE
+ }
+
// FBO MSAA
if (kGL_GrGLStandard == fStandard) {
// GL 3.0 and the ARB extension have multisample + blit
@@ -616,11 +620,37 @@ bool GrGLInterface::validate() const {
nullptr == fFunctions.fCopyTextureImage2D ||
nullptr == fFunctions.fCopyTextureSubImage1D ||
nullptr == fFunctions.fCopyTextureSubImage2D ||
+ nullptr == fFunctions.fGetNamedBufferParameteriv ||
+ nullptr == fFunctions.fGetNamedBufferPointerv ||
+ nullptr == fFunctions.fGetNamedBufferSubData ||
nullptr == fFunctions.fGetTextureImage ||
nullptr == fFunctions.fGetTextureParameterfv ||
nullptr == fFunctions.fGetTextureParameteriv ||
nullptr == fFunctions.fGetTextureLevelParameterfv ||
- nullptr == fFunctions.fGetTextureLevelParameteriv) {
+ nullptr == fFunctions.fGetTextureLevelParameteriv ||
+ nullptr == fFunctions.fMapNamedBuffer ||
+ nullptr == fFunctions.fNamedBufferData ||
+ nullptr == fFunctions.fNamedBufferSubData ||
+ nullptr == fFunctions.fProgramUniform1f ||
+ nullptr == fFunctions.fProgramUniform2f ||
+ nullptr == fFunctions.fProgramUniform3f ||
+ nullptr == fFunctions.fProgramUniform4f ||
+ nullptr == fFunctions.fProgramUniform1i ||
+ nullptr == fFunctions.fProgramUniform2i ||
+ nullptr == fFunctions.fProgramUniform3i ||
+ nullptr == fFunctions.fProgramUniform4i ||
+ nullptr == fFunctions.fProgramUniform1fv ||
+ nullptr == fFunctions.fProgramUniform2fv ||
+ nullptr == fFunctions.fProgramUniform3fv ||
+ nullptr == fFunctions.fProgramUniform4fv ||
+ nullptr == fFunctions.fProgramUniform1iv ||
+ nullptr == fFunctions.fProgramUniform2iv ||
+ nullptr == fFunctions.fProgramUniform3iv ||
+ nullptr == fFunctions.fProgramUniform4iv ||
+ nullptr == fFunctions.fProgramUniformMatrix2fv ||
+ nullptr == fFunctions.fProgramUniformMatrix3fv ||
+ nullptr == fFunctions.fProgramUniformMatrix4fv ||
+ nullptr == fFunctions.fUnmapNamedBuffer) {
RETURN_FALSE_INTERFACE
}
if (glVer >= GR_GL_VER(1,2)) {
@@ -637,40 +667,6 @@ bool GrGLInterface::validate() const {
RETURN_FALSE_INTERFACE
}
}
- if (glVer >= GR_GL_VER(1,5)) {
- if (nullptr == fFunctions.fNamedBufferData ||
- nullptr == fFunctions.fNamedBufferSubData ||
- nullptr == fFunctions.fMapNamedBuffer ||
- nullptr == fFunctions.fUnmapNamedBuffer ||
- nullptr == fFunctions.fGetNamedBufferParameteriv ||
- nullptr == fFunctions.fGetNamedBufferPointerv ||
- nullptr == fFunctions.fGetNamedBufferSubData) {
- RETURN_FALSE_INTERFACE
- }
- }
- if (glVer >= GR_GL_VER(2,0)) {
- if (nullptr == fFunctions.fProgramUniform1f ||
- nullptr == fFunctions.fProgramUniform2f ||
- nullptr == fFunctions.fProgramUniform3f ||
- nullptr == fFunctions.fProgramUniform4f ||
- nullptr == fFunctions.fProgramUniform1i ||
- nullptr == fFunctions.fProgramUniform2i ||
- nullptr == fFunctions.fProgramUniform3i ||
- nullptr == fFunctions.fProgramUniform4i ||
- nullptr == fFunctions.fProgramUniform1fv ||
- nullptr == fFunctions.fProgramUniform2fv ||
- nullptr == fFunctions.fProgramUniform3fv ||
- nullptr == fFunctions.fProgramUniform4fv ||
- nullptr == fFunctions.fProgramUniform1iv ||
- nullptr == fFunctions.fProgramUniform2iv ||
- nullptr == fFunctions.fProgramUniform3iv ||
- nullptr == fFunctions.fProgramUniform4iv ||
- nullptr == fFunctions.fProgramUniformMatrix2fv ||
- nullptr == fFunctions.fProgramUniformMatrix3fv ||
- nullptr == fFunctions.fProgramUniformMatrix4fv) {
- RETURN_FALSE_INTERFACE
- }
- }
if (glVer >= GR_GL_VER(2,1)) {
if (nullptr == fFunctions.fProgramUniformMatrix2x3fv ||
nullptr == fFunctions.fProgramUniformMatrix3x2fv ||
@@ -785,11 +781,8 @@ bool GrGLInterface::validate() const {
}
}
- if (kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(2,0)) {
- if (nullptr == fFunctions.fDrawRangeElements) {
- RETURN_FALSE_INTERFACE;
- }
- } else if (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,0)) {
+ // glDrawRangeElements was added to ES in 3.0.
+ if (kGL_GrGLStandard == fStandard || glVer >= GR_GL_VER(3,0)) {
if (nullptr == fFunctions.fDrawRangeElements) {
RETURN_FALSE_INTERFACE;
}
diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp
index faa8daa93c..0ec090e535 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -24,8 +24,7 @@
#include "ops/GrMeshDrawOp.h"
#include "ops/GrRectOpFactory.h"
-GrDefaultPathRenderer::GrDefaultPathRenderer(bool stencilWrapOpsSupport)
- : fStencilWrapOps(stencilWrapOpsSupport) {
+GrDefaultPathRenderer::GrDefaultPathRenderer() {
}
////////////////////////////////////////////////////////////////////////////////
@@ -475,11 +474,7 @@ bool GrDefaultPathRenderer::internalDrawPath(GrRenderTargetContext* renderTarget
reverse = true;
// fallthrough
case SkPath::kWinding_FillType:
- if (fStencilWrapOps) {
- passes[0] = &gWindStencilSeparateWithWrap;
- } else {
- passes[0] = &gWindStencilSeparateNoWrap;
- }
+ passes[0] = &gWindStencilPass;
passCount = 2;
if (stencilOnly) {
lastPassIsBounds = false;
diff --git a/src/gpu/ops/GrDefaultPathRenderer.h b/src/gpu/ops/GrDefaultPathRenderer.h
index ea2127dbf5..7f7ab2a5e0 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.h
+++ b/src/gpu/ops/GrDefaultPathRenderer.h
@@ -18,10 +18,9 @@
*/
class SK_API GrDefaultPathRenderer : public GrPathRenderer {
public:
- GrDefaultPathRenderer(bool stencilWrapOpsSupport);
+ GrDefaultPathRenderer();
private:
-
StencilSupport onGetStencilSupport(const GrShape&) const override;
bool onCanDrawPath(const CanDrawPathArgs&) const override;
@@ -39,8 +38,6 @@ private:
const GrShape&,
bool stencilOnly);
- bool fStencilWrapOps;
-
typedef GrPathRenderer INHERITED;
};
diff --git a/src/gpu/ops/GrMSAAPathRenderer.cpp b/src/gpu/ops/GrMSAAPathRenderer.cpp
index f4d14cdf71..d4c0f3f16b 100644
--- a/src/gpu/ops/GrMSAAPathRenderer.cpp
+++ b/src/gpu/ops/GrMSAAPathRenderer.cpp
@@ -611,7 +611,7 @@ bool GrMSAAPathRenderer::internalDrawPath(GrRenderTargetContext* renderTargetCon
reverse = true;
// fallthrough
case SkPath::kWinding_FillType:
- passes[0] = &gWindStencilSeparateWithWrap;
+ passes[0] = &gWindStencilPass;
if (!stencilOnly) {
passes[1] = reverse ? &gInvWindColorPass : &gWindColorPass;
}
diff --git a/src/gpu/ops/GrPathStencilSettings.h b/src/gpu/ops/GrPathStencilSettings.h
index f37d1b2f18..10e6dddab3 100644
--- a/src/gpu/ops/GrPathStencilSettings.h
+++ b/src/gpu/ops/GrPathStencilSettings.h
@@ -49,11 +49,7 @@ static constexpr GrUserStencilSettings gInvEOColorPass(
////// Winding
-// when we have separate stencil we increment front faces / decrement back faces
-// when we don't have wrap incr and decr we use the stencil test to simulate
-// them.
-
-static constexpr GrUserStencilSettings gWindStencilSeparateWithWrap(
+static constexpr GrUserStencilSettings gWindStencilPass (
GrUserStencilSettings::StaticInitSeparate<
0xffff, 0xffff,
GrUserStencilTest::kAlwaysIfInClip, GrUserStencilTest::kAlwaysIfInClip,
@@ -63,66 +59,6 @@ static constexpr GrUserStencilSettings gWindStencilSeparateWithWrap(
0xffff, 0xffff>()
);
-// if inc'ing the max value, invert to make 0
-// if dec'ing zero invert to make all ones.
-// we can't avoid touching the stencil on both passing and
-// failing, so we can't resctrict ourselves to the clip.
-static constexpr GrUserStencilSettings gWindStencilSeparateNoWrap(
- GrUserStencilSettings::StaticInitSeparate<
- 0xffff, 0x0000,
- GrUserStencilTest::kEqual, GrUserStencilTest::kEqual,
- 0xffff, 0xffff,
- GrUserStencilOp::kInvert, GrUserStencilOp::kInvert,
- GrUserStencilOp::kIncMaybeClamp, GrUserStencilOp::kDecMaybeClamp,
- 0xffff, 0xffff>()
-);
-
-// When there are no separate faces we do two passes to setup the winding rule
-// stencil. First we draw the front faces and inc, then we draw the back faces
-// and dec. These are same as the above two split into the incrementing and
-// decrementing passes.
-static constexpr GrUserStencilSettings gWindSingleStencilWithWrapInc(
- GrUserStencilSettings::StaticInit<
- 0xffff,
- GrUserStencilTest::kAlwaysIfInClip,
- 0xffff,
- GrUserStencilOp::kIncWrap,
- GrUserStencilOp::kKeep,
- 0xffff>()
-);
-
-static constexpr GrUserStencilSettings gWindSingleStencilWithWrapDec(
- GrUserStencilSettings::StaticInit<
- 0xffff,
- GrUserStencilTest::kAlwaysIfInClip,
- 0xffff,
- GrUserStencilOp::kDecWrap,
- GrUserStencilOp::kKeep,
- 0xffff>()
-);
-
-static constexpr GrUserStencilSettings gWindSingleStencilNoWrapInc(
- GrUserStencilSettings::StaticInit<
- 0xffff,
- GrUserStencilTest::kEqual,
- 0xffff,
- GrUserStencilOp::kInvert,
- GrUserStencilOp::kIncMaybeClamp,
- 0xffff>()
-);
-
-static constexpr GrUserStencilSettings gWindSingleStencilNoWrapDec(
- GrUserStencilSettings::StaticInit<
- 0x0000,
- GrUserStencilTest::kEqual,
- 0xffff,
- GrUserStencilOp::kInvert,
- GrUserStencilOp::kDecMaybeClamp,
- 0xffff>()
-);
-
-// Color passes are the same whether we use the two-sided stencil or two passes
-
static constexpr GrUserStencilSettings gWindColorPass(
GrUserStencilSettings::StaticInit<
0x0000,
diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp
index 238b954dfc..2326c63382 100644
--- a/src/gpu/vk/GrVkCaps.cpp
+++ b/src/gpu/vk/GrVkCaps.cpp
@@ -28,7 +28,6 @@ GrVkCaps::GrVkCaps(const GrContextOptions& contextOptions, const GrVkInterface*
fMipMapSupport = true; // always available in Vulkan
fSRGBSupport = true; // always available in Vulkan
fNPOTTextureTileSupport = true; // always available in Vulkan
- fStencilWrapOpsSupport = true; // always available in Vulkan
fDiscardRenderTargetSupport = true;
fReuseScratchTextures = true; //TODO: figure this out
fGpuTracingSupport = false; //TODO: figure this out
@@ -177,7 +176,6 @@ void GrVkCaps::initGrCaps(const VkPhysicalDeviceProperties& properties,
fMapBufferFlags = kCanMap_MapFlag | kSubset_MapFlag;
- fStencilWrapOpsSupport = true;
fOversizedStencilSupport = true;
fSampleShadingSupport = SkToBool(featureFlags & kSampleRateShading_GrVkFeatureFlag);