aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Adrienne Walker <enne@chromium.org>2018-05-07 12:48:34 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-10 14:54:15 +0000
commit328490c6a1625ce51d0e81688e0c85c79c400d86 (patch)
treeaf830b6655631d400c7c1fc581e0e625083dd555 /src
parentccd4cfc23ebbbecbc6b292359352aad335ad7b73 (diff)
Add driver bug workarounds to GrCaps
This moves GrDriverBugWorkarounds to include so that it can be included by GrCaps. This also makes GrContextOptions a nearly empty class in the case of !SK_SUPPORT_GPU so that non-gpu builds don't need to build in GrDriverBugWorkarounds.cpp. Bug: chromium: 829614 Change-Id: Iedf73677fd09e9a487cfe618a696fd4b25c8703d Reviewed-on: https://skia-review.googlesource.com/126581 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Adrienne Walker <enne@chromium.org>
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrCaps.cpp4
-rw-r--r--src/gpu/GrDriverBugWorkarounds.cpp9
-rw-r--r--src/gpu/GrDriverBugWorkarounds.h44
-rw-r--r--src/gpu/GrDriverBugWorkaroundsAutogen.h13
4 files changed, 13 insertions, 57 deletions
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp
index 0507a3fdfb..42d3d4c51a 100644
--- a/src/gpu/GrCaps.cpp
+++ b/src/gpu/GrCaps.cpp
@@ -94,6 +94,8 @@ GrCaps::GrCaps(const GrContextOptions& options) {
fAvoidStencilBuffers = false;
fPreferVRAMUseOverFlushes = true;
+
+ fDriverBugWorkarounds = options.fDriverBugWorkarounds;
}
void GrCaps::applyOptionsOverrides(const GrContextOptions& options) {
@@ -123,6 +125,8 @@ void GrCaps::applyOptionsOverrides(const GrContextOptions& options) {
fMaxWindowRectangles = GrWindowRectangles::kMaxWindows;
}
fAvoidStencilBuffers = options.fAvoidStencilBuffers;
+
+ fDriverBugWorkarounds.applyOverrides(options.fDriverBugWorkarounds);
}
static SkString map_flags_to_string(uint32_t flags) {
diff --git a/src/gpu/GrDriverBugWorkarounds.cpp b/src/gpu/GrDriverBugWorkarounds.cpp
index 5ed9d8d2ef..a1f27a3205 100644
--- a/src/gpu/GrDriverBugWorkarounds.cpp
+++ b/src/gpu/GrDriverBugWorkarounds.cpp
@@ -29,4 +29,13 @@ GrDriverBugWorkarounds::GrDriverBugWorkarounds(
}
}
+void GrDriverBugWorkarounds::applyOverrides(
+ const GrDriverBugWorkarounds& workarounds) {
+#define GPU_OP(type, name) \
+ name |= workarounds.name;
+
+ GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
+#undef GPU_OP
+}
+
GrDriverBugWorkarounds::~GrDriverBugWorkarounds() = default;
diff --git a/src/gpu/GrDriverBugWorkarounds.h b/src/gpu/GrDriverBugWorkarounds.h
deleted file mode 100644
index bca5dc99f1..0000000000
--- a/src/gpu/GrDriverBugWorkarounds.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrDriverBugWorkarounds_DEFINED
-#define GrDriverBugWorkarounds_DEFINED
-
-// External embedders of Skia can override this to use their own list
-// of workaround names.
-#ifdef SK_GPU_WORKAROUNDS_HEADER
-#include SK_GPU_WORKAROUNDS_HEADER
-#else
-// To regenerate this file, set gn arg "skia_generate_workarounds = true".
-// This is not rebuilt by default to avoid embedders having to have extra
-// build steps.
-#include "GrDriverBugWorkaroundsAutogen.h"
-#endif
-
-#include <stdint.h>
-#include <vector>
-
-enum GrDriverBugWorkaroundType {
-#define GPU_OP(type, name) type,
- GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
-#undef GPU_OP
- NUMBER_OF_GPU_DRIVER_BUG_WORKAROUND_TYPES
-};
-
-class GrDriverBugWorkarounds {
- public:
- GrDriverBugWorkarounds();
- explicit GrDriverBugWorkarounds(const std::vector<int32_t>& workarounds);
-
- ~GrDriverBugWorkarounds();
-
-#define GPU_OP(type, name) bool name = false;
- GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
-#undef GPU_OP
-};
-
-#endif
diff --git a/src/gpu/GrDriverBugWorkaroundsAutogen.h b/src/gpu/GrDriverBugWorkaroundsAutogen.h
deleted file mode 100644
index 87aa46172e..0000000000
--- a/src/gpu/GrDriverBugWorkaroundsAutogen.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file is auto-generated from build_workaround_header.py
-// DO NOT EDIT!
-
-#define GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)\
- GPU_OP(AVOID_STENCIL_BUFFERS, \
- avoid_stencil_buffers) \
- GPU_OP(CLEAR_TO_ZERO_OR_ONE_BROKEN, \
- clear_to_zero_or_one_broken) \
-// The End