xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/null/ProgramNULL.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2016 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // ProgramNULL.cpp:
7 //    Implements the class methods for ProgramNULL.
8 //
9 
10 #include "libANGLE/renderer/null/ProgramNULL.h"
11 
12 #include "common/debug.h"
13 
14 namespace rx
15 {
16 namespace
17 {
18 class LinkTaskNULL : public LinkTask
19 {
20   public:
LinkTaskNULL(const gl::ProgramState * state)21     LinkTaskNULL(const gl::ProgramState *state) : mState(state) {}
22     ~LinkTaskNULL() override = default;
link(const gl::ProgramLinkedResources & resources,const gl::ProgramMergedVaryings & mergedVaryings,std::vector<std::shared_ptr<LinkSubTask>> * linkSubTasksOut,std::vector<std::shared_ptr<LinkSubTask>> * postLinkSubTasksOut)23     void link(const gl::ProgramLinkedResources &resources,
24               const gl::ProgramMergedVaryings &mergedVaryings,
25               std::vector<std::shared_ptr<LinkSubTask>> *linkSubTasksOut,
26               std::vector<std::shared_ptr<LinkSubTask>> *postLinkSubTasksOut) override
27     {
28         ASSERT(linkSubTasksOut && linkSubTasksOut->empty());
29         ASSERT(postLinkSubTasksOut && postLinkSubTasksOut->empty());
30 
31         const gl::SharedCompiledShaderState &fragmentShader =
32             mState->getAttachedShader(gl::ShaderType::Fragment);
33         if (fragmentShader != nullptr)
34         {
35             resources.pixelLocalStorageLinker.link(fragmentShader->pixelLocalStorageFormats);
36         }
37 
38         return;
39     }
getResult(const gl::Context * context,gl::InfoLog & infoLog)40     angle::Result getResult(const gl::Context *context, gl::InfoLog &infoLog) override
41     {
42         return angle::Result::Continue;
43     }
44 
45   private:
46     const gl::ProgramState *mState;
47 };
48 }  // anonymous namespace
49 
ProgramNULL(const gl::ProgramState & state)50 ProgramNULL::ProgramNULL(const gl::ProgramState &state) : ProgramImpl(state) {}
51 
~ProgramNULL()52 ProgramNULL::~ProgramNULL() {}
53 
load(const gl::Context * context,gl::BinaryInputStream * stream,std::shared_ptr<LinkTask> * loadTaskOut,egl::CacheGetResult * resultOut)54 angle::Result ProgramNULL::load(const gl::Context *context,
55                                 gl::BinaryInputStream *stream,
56                                 std::shared_ptr<LinkTask> *loadTaskOut,
57                                 egl::CacheGetResult *resultOut)
58 {
59     *loadTaskOut = {};
60     *resultOut   = egl::CacheGetResult::Success;
61     return angle::Result::Continue;
62 }
63 
save(const gl::Context * context,gl::BinaryOutputStream * stream)64 void ProgramNULL::save(const gl::Context *context, gl::BinaryOutputStream *stream) {}
65 
setBinaryRetrievableHint(bool retrievable)66 void ProgramNULL::setBinaryRetrievableHint(bool retrievable) {}
67 
setSeparable(bool separable)68 void ProgramNULL::setSeparable(bool separable) {}
69 
link(const gl::Context * contextImpl,std::shared_ptr<LinkTask> * linkTaskOut)70 angle::Result ProgramNULL::link(const gl::Context *contextImpl,
71                                 std::shared_ptr<LinkTask> *linkTaskOut)
72 {
73     *linkTaskOut = std::shared_ptr<LinkTask>(new LinkTaskNULL(&mState));
74     return angle::Result::Continue;
75 }
76 
validate(const gl::Caps & caps)77 GLboolean ProgramNULL::validate(const gl::Caps &caps)
78 {
79     return GL_TRUE;
80 }
81 
82 }  // namespace rx
83