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