Edit

kc3-lang/angle/src/libANGLE/renderer/ShaderImpl.cpp

Branch :

  • Show log

    Commit

  • Author : Etienne Bergeron
    Date : 2020-06-08 14:56:14
    Hash : d80d9044
    Message : Reland "Add trace event to angle Program compilation API" This reverts commit be04c04729df41e359ebce625690af4368f12142. Reason for revert: The appropriate fix for ASAN is landed here: https://chromium-review.googlesource.com/ c/angle/angle/+/2233410 Original change's description: > Revert "Add trace event to angle Program compilation API" > > This reverts commit 7685a79eb4a38c212b67d4a830958d69b409bc4c. > > Reason for revert: Causing TSAN failures, see issue. > > Bug: chromium:1091723 > > Original change's description: > > Add trace event to angle Program compilation API > > > > Bug: chromium:1064662 > > Change-Id: I2ee48718ff3946ab9307ba27177a02858bf436b0 > > Reviewed-on: https://chromium-review.googlesource.com/ c/angle/angle/+/2230789 > > Commit-Queue: Etienne Bergeron <etienneb@chromium.org> > > Reviewed-by: Jamie Madill <jmadill@chromium.org> > > TBR=etienneb@chromium.org,jmadill@chromium.org > > Change-Id: I92148677ac53c1ff7a9bc880e0a0834a03fc92ea > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: chromium:1064662 > Reviewed-on: https://chromium-review.googlesource.com/ c/angle/angle/+/2231870 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Jamie Madill <jmadill@chromium.org> TBR=etienneb@chromium.org,jmadill@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Bug: chromium:1091723, chromium:1064662 Change-Id: I6e2ccfcb29fcddc5e0bffee43d3a737c8a6a75ea Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2235915 Commit-Queue: Etienne Bergeron <etienneb@chromium.org> Reviewed-by: Etienne Bergeron <etienneb@chromium.org>

  • src/libANGLE/renderer/ShaderImpl.cpp
  • //
    // Copyright 2019 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // ShaderImpl.cpp: Implementation methods of ShaderImpl
    
    #include "libANGLE/renderer/ShaderImpl.h"
    
    #include "libANGLE/Context.h"
    #include "libANGLE/trace.h"
    
    namespace rx
    {
    
    WaitableCompileEvent::WaitableCompileEvent(std::shared_ptr<angle::WaitableEvent> waitableEvent)
        : mWaitableEvent(waitableEvent)
    {}
    
    WaitableCompileEvent::~WaitableCompileEvent()
    {
        mWaitableEvent.reset();
    }
    
    void WaitableCompileEvent::wait()
    {
        mWaitableEvent->wait();
    }
    
    bool WaitableCompileEvent::isReady()
    {
        return mWaitableEvent->isReady();
    }
    
    const std::string &WaitableCompileEvent::getInfoLog()
    {
        return mInfoLog;
    }
    
    class TranslateTask : public angle::Closure
    {
      public:
        TranslateTask(ShHandle handle, ShCompileOptions options, const std::string &source)
            : mHandle(handle), mOptions(options), mSource(source), mResult(false)
        {}
    
        void operator()() override
        {
            ANGLE_TRACE_EVENT1("gpu.angle", "TranslateTask::run", "source", mSource);
            const char *source = mSource.c_str();
            mResult            = sh::Compile(mHandle, &source, 1, mOptions);
        }
    
        bool getResult() { return mResult; }
    
        ShHandle getHandle() { return mHandle; }
    
      private:
        ShHandle mHandle;
        ShCompileOptions mOptions;
        std::string mSource;
        bool mResult;
    };
    
    class WaitableCompileEventImpl final : public WaitableCompileEvent
    {
      public:
        WaitableCompileEventImpl(std::shared_ptr<angle::WaitableEvent> waitableEvent,
                                 std::shared_ptr<TranslateTask> translateTask)
            : WaitableCompileEvent(waitableEvent), mTranslateTask(translateTask)
        {}
    
        bool getResult() override { return mTranslateTask->getResult(); }
    
        bool postTranslate(std::string *infoLog) override { return true; }
    
      private:
        std::shared_ptr<TranslateTask> mTranslateTask;
    };
    
    std::shared_ptr<WaitableCompileEvent> ShaderImpl::compileImpl(
        const gl::Context *context,
        gl::ShCompilerInstance *compilerInstance,
        const std::string &source,
        ShCompileOptions compileOptions)
    {
    #if defined(ANGLE_ENABLE_ASSERTS)
        compileOptions |= SH_VALIDATE_AST;
    #endif
    
        auto workerThreadPool = context->getWorkerThreadPool();
        auto translateTask =
            std::make_shared<TranslateTask>(compilerInstance->getHandle(), compileOptions, source);
    
        return std::make_shared<WaitableCompileEventImpl>(
            angle::WorkerThreadPool::PostWorkerTask(workerThreadPool, translateTask), translateTask);
    }
    
    }  // namespace rx