Rework optimization override flags.
Previously, the Compiler optimization overrides only supported force-
disabling a particular behavior; we assumed that the default state of
a Compiler was to allow all optimizations. This assumption is about to
be invalidated, as the Inliner will soon be off by default unless you
are using GLES.
The override flags are now a tri-state; optimization and inlining can
be set to "default", "on" or "off".
Change-Id: I5637693222ca1de74ca1073c24d86c8e7c5026f6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/390136
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 24d8488..0e6e2e5 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -30,6 +30,7 @@
#include "src/gpu/ccpr/GrCoverageCountingPathRenderer.h"
#include "src/gpu/tessellate/GrTessellationPathRenderer.h"
#include "src/image/SkImage_Base.h"
+#include "src/sksl/SkSLCompiler.h"
#include "src/utils/SkJSONWriter.h"
#include "src/utils/SkOSPath.h"
#include "tools/Resources.h"
@@ -65,11 +66,6 @@
#include "tools/viewer/SkRiveSlide.h"
#endif
-namespace SkSL {
-extern bool gSkSLOptimizer;
-extern bool gSkSLInliner;
-}
-
class CapturingShaderErrorHandler : public GrContextOptions::ShaderErrorHandler {
public:
void compileError(const char* shader, const char* errors) override {
@@ -91,6 +87,8 @@
GrContextOptions::ShaderErrorHandler* Viewer::ShaderErrorHandler() { return &gShaderErrorHandler; }
using namespace sk_app;
+using SkSL::Compiler;
+using OverrideFlag = SkSL::Compiler::OverrideFlag;
static std::map<GpuPathRenderers, std::string> gPathRendererNames;
@@ -375,7 +373,7 @@
SetCtxOptionsFromCommonFlags(&displayParams.fGrContextOptions);
displayParams.fGrContextOptions.fPersistentCache = &fPersistentCache;
displayParams.fGrContextOptions.fShaderCacheStrategy =
- GrContextOptions::ShaderCacheStrategy::kBackendSource;
+ GrContextOptions::ShaderCacheStrategy::kSkSL;
displayParams.fGrContextOptions.fShaderErrorHandler = &gShaderErrorHandler;
displayParams.fGrContextOptions.fSuppressPrints = true;
displayParams.fGrContextOptions.fAlwaysAntialias = FLAGS_dmsaa;
@@ -2342,11 +2340,6 @@
bool sksl = params.fGrContextOptions.fShaderCacheStrategy ==
GrContextOptions::ShaderCacheStrategy::kSkSL;
- int optLevel = sksl ? kShaderOptLevel_Source :
- SkSL::gSkSLInliner ? kShaderOptLevel_Inline :
- SkSL::gSkSLOptimizer ? kShaderOptLevel_Optimize :
- kShaderOptLevel_Compile;
-
#if defined(SK_VULKAN)
const bool isVulkan = fBackendType == sk_app::Window::kVulkan_BackendType;
#else
@@ -2401,7 +2394,7 @@
bool doApply = ImGui::Button("Apply Changes"); ImGui::SameLine();
bool doDump = ImGui::Button("Dump SkSL to resources/sksl/");
- int newOptLevel = optLevel;
+ int newOptLevel = fOptLevel;
ImGui::RadioButton("SkSL", &newOptLevel, kShaderOptLevel_Source);
ImGui::SameLine();
ImGui::RadioButton("Compile", &newOptLevel, kShaderOptLevel_Compile);
@@ -2412,10 +2405,27 @@
// If we are changing the compile mode, we want to reset the cache and redo
// everything.
- if (doDump || newOptLevel != optLevel) {
+ if (doDump || newOptLevel != fOptLevel) {
sksl = doDump || (newOptLevel == kShaderOptLevel_Source);
- SkSL::gSkSLOptimizer = (newOptLevel >= kShaderOptLevel_Optimize);
- SkSL::gSkSLInliner = (newOptLevel >= kShaderOptLevel_Inline);
+ fOptLevel = (ShaderOptLevel)newOptLevel;
+ switch (fOptLevel) {
+ case kShaderOptLevel_Source:
+ Compiler::EnableOptimizer(OverrideFlag::kDefault);
+ Compiler::EnableInliner(OverrideFlag::kDefault);
+ break;
+ case kShaderOptLevel_Compile:
+ Compiler::EnableOptimizer(OverrideFlag::kOff);
+ Compiler::EnableInliner(OverrideFlag::kOff);
+ break;
+ case kShaderOptLevel_Optimize:
+ Compiler::EnableOptimizer(OverrideFlag::kOn);
+ Compiler::EnableInliner(OverrideFlag::kOff);
+ break;
+ case kShaderOptLevel_Inline:
+ Compiler::EnableOptimizer(OverrideFlag::kOn);
+ Compiler::EnableInliner(OverrideFlag::kOn);
+ break;
+ }
params.fGrContextOptions.fShaderCacheStrategy =
sksl ? GrContextOptions::ShaderCacheStrategy::kSkSL