diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrDriverBugWorkarounds.cpp | 32 | ||||
-rw-r--r-- | src/gpu/GrDriverBugWorkarounds.h | 44 | ||||
-rw-r--r-- | src/gpu/GrDriverBugWorkaroundsAutogen.h | 14 | ||||
-rw-r--r-- | src/gpu/gpu_workaround_list.txt | 2 |
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 |