diff options
Diffstat (limited to 'chromium/third_party/angle/src/libANGLE/renderer/gl/ProgramGL.cpp')
-rw-r--r-- | chromium/third_party/angle/src/libANGLE/renderer/gl/ProgramGL.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/chromium/third_party/angle/src/libANGLE/renderer/gl/ProgramGL.cpp b/chromium/third_party/angle/src/libANGLE/renderer/gl/ProgramGL.cpp index b5422e1c9c6..2585d1fa1ee 100644 --- a/chromium/third_party/angle/src/libANGLE/renderer/gl/ProgramGL.cpp +++ b/chromium/third_party/angle/src/libANGLE/renderer/gl/ProgramGL.cpp @@ -57,9 +57,9 @@ ProgramGL::~ProgramGL() mProgramID = 0; } -angle::Result ProgramGL::load(const gl::Context *context, - gl::InfoLog &infoLog, - gl::BinaryInputStream *stream) +std::unique_ptr<LinkEvent> ProgramGL::load(const gl::Context *context, + gl::BinaryInputStream *stream, + gl::InfoLog &infoLog) { preLink(); @@ -75,13 +75,13 @@ angle::Result ProgramGL::load(const gl::Context *context, // Verify that the program linked if (!checkLinkStatus(infoLog)) { - return angle::Result::Incomplete; + return std::make_unique<LinkEventDone>(angle::Result::Incomplete); } postLink(); reapplyUBOBindingsIfNeeded(context); - return angle::Result::Continue; + return std::make_unique<LinkEventDone>(angle::Result::Continue); } void ProgramGL::save(const gl::Context *context, gl::BinaryOutputStream *stream) @@ -130,22 +130,24 @@ void ProgramGL::setSeparable(bool separable) mFunctions->programParameteri(mProgramID, GL_PROGRAM_SEPARABLE, separable ? GL_TRUE : GL_FALSE); } -using LinkImplFunctor = std::function<bool()>; +using LinkImplFunctor = std::function<bool(std::string &)>; class ProgramGL::LinkTask final : public angle::Closure { public: LinkTask(LinkImplFunctor &&functor) : mLinkImplFunctor(functor), mFallbackToMainContext(false) {} - void operator()() override { mFallbackToMainContext = mLinkImplFunctor(); } + void operator()() override { mFallbackToMainContext = mLinkImplFunctor(mInfoLog); } bool fallbackToMainContext() { return mFallbackToMainContext; } + const std::string &getInfoLog() { return mInfoLog; } private: LinkImplFunctor mLinkImplFunctor; bool mFallbackToMainContext; + std::string mInfoLog; }; -using PostLinkImplFunctor = std::function<angle::Result(bool)>; +using PostLinkImplFunctor = std::function<angle::Result(bool, const std::string &)>; class ProgramGL::LinkEventGL final : public LinkEvent { public: @@ -162,7 +164,7 @@ class ProgramGL::LinkEventGL final : public LinkEvent angle::Result wait(const gl::Context *context) override { mWaitableEvent->wait(); - return mPostLinkImplFunctor(mLinkTask->fallbackToMainContext()); + return mPostLinkImplFunctor(mLinkTask->fallbackToMainContext(), mLinkTask->getInfoLog()); } bool isLinking() override { return !mWaitableEvent->isReady(); } @@ -358,13 +360,13 @@ std::unique_ptr<LinkEvent> ProgramGL::link(const gl::Context *context, } } auto workerPool = context->getWorkerThreadPool(); - auto linkTask = std::make_shared<LinkTask>([this]() { - std::string infoLog; - ScopedWorkerContextGL worker(mRenderer.get(), &infoLog); + auto linkTask = std::make_shared<LinkTask>([this](std::string &infoLog) { + std::string workerInfoLog; + ScopedWorkerContextGL worker(mRenderer.get(), &workerInfoLog); if (!worker()) { #if !defined(NDEBUG) - WARN() << "bindWorkerContext failed." << std::endl << infoLog; + infoLog += "bindWorkerContext failed.\n" + workerInfoLog; #endif // Fallback to the main context. return true; @@ -379,7 +381,9 @@ std::unique_ptr<LinkEvent> ProgramGL::link(const gl::Context *context, return false; }); - auto postLinkImplTask = [this, &infoLog, &resources](bool fallbackToMainContext) { + auto postLinkImplTask = [this, &infoLog, &resources](bool fallbackToMainContext, + const std::string &workerInfoLog) { + infoLog << workerInfoLog; if (fallbackToMainContext) { mFunctions->linkProgram(mProgramID); @@ -433,7 +437,7 @@ std::unique_ptr<LinkEvent> ProgramGL::link(const gl::Context *context, } else { - return std::make_unique<LinkEventDone>(postLinkImplTask(true)); + return std::make_unique<LinkEventDone>(postLinkImplTask(true, std::string())); } } |