blob: 45b219de67665613149492d5cf39db00ac01fb98 [file] [log] [blame]
//
// Copyright 2016 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.
//
// ProgramNULL.cpp:
// Implements the class methods for ProgramNULL.
//
#include "libANGLE/renderer/null/ProgramNULL.h"
#include "common/debug.h"
namespace rx
{
namespace
{
class LinkTaskNULL : public LinkTask
{
public:
LinkTaskNULL(const gl::ProgramState *state) : mState(state) {}
~LinkTaskNULL() override = default;
void link(const gl::ProgramLinkedResources &resources,
const gl::ProgramMergedVaryings &mergedVaryings,
std::vector<std::shared_ptr<LinkSubTask>> *linkSubTasksOut,
std::vector<std::shared_ptr<LinkSubTask>> *postLinkSubTasksOut) override
{
ASSERT(linkSubTasksOut && linkSubTasksOut->empty());
ASSERT(postLinkSubTasksOut && postLinkSubTasksOut->empty());
const gl::SharedCompiledShaderState &fragmentShader =
mState->getAttachedShader(gl::ShaderType::Fragment);
if (fragmentShader != nullptr)
{
resources.pixelLocalStorageLinker.link(fragmentShader->pixelLocalStorageFormats);
}
return;
}
angle::Result getResult(const gl::Context *context, gl::InfoLog &infoLog) override
{
return angle::Result::Continue;
}
private:
const gl::ProgramState *mState;
};
} // anonymous namespace
ProgramNULL::ProgramNULL(const gl::ProgramState &state) : ProgramImpl(state) {}
ProgramNULL::~ProgramNULL() {}
angle::Result ProgramNULL::load(const gl::Context *context,
gl::BinaryInputStream *stream,
std::shared_ptr<LinkTask> *loadTaskOut,
egl::CacheGetResult *resultOut)
{
*loadTaskOut = {};
*resultOut = egl::CacheGetResult::Success;
return angle::Result::Continue;
}
void ProgramNULL::save(const gl::Context *context, gl::BinaryOutputStream *stream) {}
void ProgramNULL::setBinaryRetrievableHint(bool retrievable) {}
void ProgramNULL::setSeparable(bool separable) {}
angle::Result ProgramNULL::link(const gl::Context *contextImpl,
std::shared_ptr<LinkTask> *linkTaskOut)
{
*linkTaskOut = std::shared_ptr<LinkTask>(new LinkTaskNULL(&mState));
return angle::Result::Continue;
}
GLboolean ProgramNULL::validate(const gl::Caps &caps)
{
return GL_TRUE;
}
} // namespace rx