aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrDriverBugWorkarounds.cpp32
-rw-r--r--src/gpu/GrDriverBugWorkarounds.h44
-rw-r--r--src/gpu/GrDriverBugWorkaroundsAutogen.h14
-rw-r--r--src/gpu/gpu_workaround_list.txt2
4 files changed, 92 insertions, 0 deletions
diff --git a/src/gpu/GrDriverBugWorkarounds.cpp b/src/gpu/GrDriverBugWorkarounds.cpp
new file mode 100644
index 0000000000..5ed9d8d2ef
--- /dev/null
+++ b/src/gpu/GrDriverBugWorkarounds.cpp
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "GrDriverBugWorkarounds.h"
+
+#include "SkTypes.h"
+
+GrDriverBugWorkarounds::GrDriverBugWorkarounds() = default;
+
+GrDriverBugWorkarounds::GrDriverBugWorkarounds(
+ const std::vector<int>& enabled_driver_bug_workarounds) {
+ for (auto id : enabled_driver_bug_workarounds) {
+ switch (id) {
+#define GPU_OP(type, name) \
+ case GrDriverBugWorkaroundType::type: \
+ name = true; \
+ break;
+
+ GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
+#undef GPU_OP
+ default:
+ SK_ABORT("Not implemented");
+ break;
+ }
+ }
+}
+
+GrDriverBugWorkarounds::~GrDriverBugWorkarounds() = default;
diff --git a/src/gpu/GrDriverBugWorkarounds.h b/src/gpu/GrDriverBugWorkarounds.h
new file mode 100644
index 0000000000..bca5dc99f1
--- /dev/null
+++ b/src/gpu/GrDriverBugWorkarounds.h
@@ -0,0 +1,44 @@
+/*
+ * 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
new file mode 100644
index 0000000000..4ff99bb98c
--- /dev/null
+++ b/src/gpu/GrDriverBugWorkaroundsAutogen.h
@@ -0,0 +1,14 @@
+// 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
+// ../../tools/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
diff --git a/src/gpu/gpu_workaround_list.txt b/src/gpu/gpu_workaround_list.txt
new file mode 100644
index 0000000000..89a7231e9c
--- /dev/null
+++ b/src/gpu/gpu_workaround_list.txt
@@ -0,0 +1,2 @@
+avoid_stencil_buffers
+clear_to_zero_or_one_broken