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>
This commit is contained in:
parent
ccd4cfc23e
commit
328490c6a1
2
BUILD.gn
2
BUILD.gn
@ -839,7 +839,7 @@ if (skia_enable_gpu && skia_generate_workarounds) {
|
||||
|
||||
# see comments in skia_compile_processors about out dir path shenanigans.
|
||||
output_file =
|
||||
rebase_path("src/gpu/GrDriverBugWorkaroundsAutogen.h", root_out_dir)
|
||||
rebase_path("include/gpu/GrDriverBugWorkaroundsAutogen.h", root_out_dir)
|
||||
|
||||
outputs = [
|
||||
"$root_out_dir/$output_file",
|
||||
|
@ -1608,9 +1608,11 @@ Error GPUThreadTestingSink::draw(const Src& src, SkBitmap* dst, SkWStream* wStre
|
||||
// Also, force us to only use the software path renderer, so we really stress-test the threaded
|
||||
// version of that code.
|
||||
GrContextOptions contextOptions = this->baseContextOptions();
|
||||
#if SK_SUPPORT_GPU
|
||||
contextOptions.fGpuPathRenderers = GpuPathRenderers::kNone;
|
||||
|
||||
contextOptions.fExecutor = fExecutor.get();
|
||||
#endif
|
||||
|
||||
Error err = this->onDraw(src, dst, wStream, log, contextOptions);
|
||||
if (!err.isEmpty() || !dst) {
|
||||
return err;
|
||||
@ -1619,7 +1621,9 @@ Error GPUThreadTestingSink::draw(const Src& src, SkBitmap* dst, SkWStream* wStre
|
||||
SkBitmap reference;
|
||||
SkString refLog;
|
||||
SkDynamicMemoryWStream refStream;
|
||||
#if SK_SUPPORT_GPU
|
||||
contextOptions.fExecutor = nullptr;
|
||||
#endif
|
||||
Error refErr = this->onDraw(src, &reference, &refStream, &refLog, contextOptions);
|
||||
if (!refErr.isEmpty()) {
|
||||
return refErr;
|
||||
|
@ -15,6 +15,7 @@ skia_gpu_sources = [
|
||||
"$_include/gpu/GrConfig.h",
|
||||
"$_include/gpu/GrContextOptions.h",
|
||||
"$_include/gpu/GrContext.h",
|
||||
"$_include/gpu/GrDriverBugWorkarounds.h",
|
||||
"$_include/gpu/GrGpuResource.h",
|
||||
"$_include/gpu/GrRenderTarget.h",
|
||||
"$_include/gpu/GrResourceKey.h",
|
||||
@ -87,7 +88,6 @@ skia_gpu_sources = [
|
||||
"$_src/gpu/GrDrawOpTest.cpp",
|
||||
"$_src/gpu/GrDrawOpTest.h",
|
||||
"$_src/gpu/GrDriverBugWorkarounds.cpp",
|
||||
"$_src/gpu/GrDriverBugWorkarounds.h",
|
||||
"$_src/gpu/GrFixedClip.cpp",
|
||||
"$_src/gpu/GrFixedClip.h",
|
||||
"$_src/gpu/GrFragmentProcessor.cpp",
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include "../private/GrTypesPriv.h"
|
||||
#include "GrBlend.h"
|
||||
#include "GrDriverBugWorkarounds.h"
|
||||
#include "GrShaderCaps.h"
|
||||
#include "SkImageInfo.h"
|
||||
#include "SkRefCnt.h"
|
||||
@ -340,6 +341,8 @@ private:
|
||||
bool fSuppressPrints : 1;
|
||||
bool fWireframeMode : 1;
|
||||
|
||||
GrDriverBugWorkarounds fDriverBugWorkarounds;
|
||||
|
||||
typedef SkRefCnt INHERITED;
|
||||
};
|
||||
|
||||
|
@ -12,11 +12,13 @@
|
||||
#include "SkTypes.h"
|
||||
#include "GrTypes.h"
|
||||
#include "../private/GrTypesPriv.h"
|
||||
#include "GrDriverBugWorkarounds.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
class SkExecutor;
|
||||
|
||||
#if SK_SUPPORT_GPU
|
||||
struct GrContextOptions {
|
||||
enum class Enable {
|
||||
/** Forces an option to be disabled. */
|
||||
@ -239,6 +241,13 @@ struct GrContextOptions {
|
||||
*/
|
||||
Enable fDistanceFieldGlyphVerticesAlwaysHaveW = Enable::kDefault;
|
||||
#endif
|
||||
|
||||
GrDriverBugWorkarounds fDriverBugWorkarounds;
|
||||
};
|
||||
#else
|
||||
struct GrContextOptions {
|
||||
struct PersistentCache {};
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include "GrDriverBugWorkaroundsAutogen.h"
|
||||
#endif
|
||||
|
||||
#include "SkTypes.h"
|
||||
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
|
||||
@ -29,11 +31,16 @@ enum GrDriverBugWorkaroundType {
|
||||
NUMBER_OF_GPU_DRIVER_BUG_WORKAROUND_TYPES
|
||||
};
|
||||
|
||||
class GrDriverBugWorkarounds {
|
||||
class SK_API GrDriverBugWorkarounds {
|
||||
public:
|
||||
GrDriverBugWorkarounds();
|
||||
explicit GrDriverBugWorkarounds(const std::vector<int32_t>& workarounds);
|
||||
|
||||
GrDriverBugWorkarounds& operator=(const GrDriverBugWorkarounds&) = default;
|
||||
|
||||
// Turn on any workarounds listed in |workarounds| (but don't turn any off).
|
||||
void applyOverrides(const GrDriverBugWorkarounds& workarounds);
|
||||
|
||||
~GrDriverBugWorkarounds();
|
||||
|
||||
#define GPU_OP(type, name) bool name = false;
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user