1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ShaderErrorHandler.h" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkDebug.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/utils/SkShaderUtils.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker #include <functional> 14*c8dee2aaSAndroid Build Coastguard Worker #include <string> 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { 17*c8dee2aaSAndroid Build Coastguard Worker DefaultShaderErrorHandler()18*c8dee2aaSAndroid Build Coastguard WorkerShaderErrorHandler* DefaultShaderErrorHandler() { 19*c8dee2aaSAndroid Build Coastguard Worker class DefaultShaderErrorHandler : public ShaderErrorHandler { 20*c8dee2aaSAndroid Build Coastguard Worker public: 21*c8dee2aaSAndroid Build Coastguard Worker void compileError(const char* shader, const char* errors) override { 22*c8dee2aaSAndroid Build Coastguard Worker std::string message = SkShaderUtils::BuildShaderErrorMessage(shader, errors); 23*c8dee2aaSAndroid Build Coastguard Worker SkShaderUtils::VisitLineByLine(message, [](int, const char* lineText) { 24*c8dee2aaSAndroid Build Coastguard Worker SkDebugf("%s\n", lineText); 25*c8dee2aaSAndroid Build Coastguard Worker }); 26*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGFAILF("Shader compilation failed!\n\n%s", message.c_str()); 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker }; 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker static DefaultShaderErrorHandler gHandler; 31*c8dee2aaSAndroid Build Coastguard Worker return &gHandler; 32*c8dee2aaSAndroid Build Coastguard Worker } 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker } // namespace SkShaderUtils 35