Commit e703c606 by Jamie Madill Committed by Commit Bot

Add gl::RenderbufferState shared state helper.

This shared state will be read-only visible in the RenderbufferImpl class. It mirrors existing structs for Textures, Buffers, and other classes. It allows the implementation class to have a read-only view as to the current GL state of an object. This will be useful to the Vulkan back-end, which would like to know the current Renderbuffer state before having to redefine the storage. If the current parameters match, it might not have to redefine the storage at all. The solution involves passing around the gl::RenderbufferState through various factory methods. Also name the Renderbuffer implementation pointer consistently and make it use std::unique_ptr. Bug: angleproject:2347 Change-Id: Ied6e0358e24e74a7fedbe4aea692edee909b5838 Reviewed-on: https://chromium-review.googlesource.com/922457 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent f81d17c2
...@@ -54,7 +54,8 @@ TEST(ImageTest, RefCounting) ...@@ -54,7 +54,8 @@ TEST(ImageTest, RefCounting)
// Create a renderbuffer and set it as a target of the EGL image // Create a renderbuffer and set it as a target of the EGL image
rx::MockRenderbufferImpl *renderbufferImpl = new rx::MockRenderbufferImpl(); rx::MockRenderbufferImpl *renderbufferImpl = new rx::MockRenderbufferImpl();
gl::Renderbuffer *renderbuffer = new gl::Renderbuffer(renderbufferImpl, 1); EXPECT_CALL(mockGLFactory, createRenderbuffer(_)).WillOnce(Return(renderbufferImpl));
gl::Renderbuffer *renderbuffer = new gl::Renderbuffer(&mockGLFactory, 1);
renderbuffer->addRef(); renderbuffer->addRef();
EXPECT_CALL(*renderbufferImpl, setStorageEGLImageTarget(_, _)) EXPECT_CALL(*renderbufferImpl, setStorageEGLImageTarget(_, _))
......
...@@ -13,21 +13,63 @@ ...@@ -13,21 +13,63 @@
#include "common/utilities.h" #include "common/utilities.h"
#include "libANGLE/FramebufferAttachment.h" #include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/Image.h" #include "libANGLE/Image.h"
#include "libANGLE/Renderbuffer.h"
#include "libANGLE/Texture.h" #include "libANGLE/Texture.h"
#include "libANGLE/formatutils.h" #include "libANGLE/formatutils.h"
#include "libANGLE/renderer/GLImplFactory.h"
#include "libANGLE/renderer/d3d/RenderTargetD3D.h" #include "libANGLE/renderer/d3d/RenderTargetD3D.h"
namespace gl namespace gl
{ {
Renderbuffer::Renderbuffer(rx::RenderbufferImpl *impl, GLuint id) // RenderbufferState implementation.
RenderbufferState::RenderbufferState()
: mWidth(0), mHeight(0), mFormat(GL_RGBA4), mSamples(0), mInitState(InitState::MayNeedInit)
{
}
RenderbufferState::~RenderbufferState()
{
}
GLsizei RenderbufferState::getWidth() const
{
return mWidth;
}
GLsizei RenderbufferState::getHeight() const
{
return mHeight;
}
const Format &RenderbufferState::getFormat() const
{
return mFormat;
}
GLsizei RenderbufferState::getSamples() const
{
return mSamples;
}
void RenderbufferState::update(GLsizei width,
GLsizei height,
const Format &format,
GLsizei samples,
InitState initState)
{
mWidth = static_cast<GLsizei>(width);
mHeight = static_cast<GLsizei>(height);
mFormat = format;
mSamples = samples;
mInitState = InitState::MayNeedInit;
}
// Renderbuffer implementation.
Renderbuffer::Renderbuffer(rx::GLImplFactory *implFactory, GLuint id)
: egl::ImageSibling(id), : egl::ImageSibling(id),
mRenderbuffer(impl), mState(),
mLabel(), mImplementation(implFactory->createRenderbuffer(mState)),
mWidth(0), mLabel()
mHeight(0),
mFormat(GL_RGBA4),
mSamples(0),
mInitState(InitState::MayNeedInit)
{ {
} }
...@@ -35,9 +77,9 @@ Error Renderbuffer::onDestroy(const Context *context) ...@@ -35,9 +77,9 @@ Error Renderbuffer::onDestroy(const Context *context)
{ {
ANGLE_TRY(orphanImages(context)); ANGLE_TRY(orphanImages(context));
if (mRenderbuffer) if (mImplementation)
{ {
ANGLE_TRY(mRenderbuffer->onDestroy(context)); ANGLE_TRY(mImplementation->onDestroy(context));
} }
return NoError(); return NoError();
...@@ -45,7 +87,6 @@ Error Renderbuffer::onDestroy(const Context *context) ...@@ -45,7 +87,6 @@ Error Renderbuffer::onDestroy(const Context *context)
Renderbuffer::~Renderbuffer() Renderbuffer::~Renderbuffer()
{ {
SafeDelete(mRenderbuffer);
} }
void Renderbuffer::setLabel(const std::string &label) void Renderbuffer::setLabel(const std::string &label)
...@@ -64,16 +105,11 @@ Error Renderbuffer::setStorage(const Context *context, ...@@ -64,16 +105,11 @@ Error Renderbuffer::setStorage(const Context *context,
size_t height) size_t height)
{ {
ANGLE_TRY(orphanImages(context)); ANGLE_TRY(orphanImages(context));
ANGLE_TRY(mImplementation->setStorage(context, internalformat, width, height));
ANGLE_TRY(mRenderbuffer->setStorage(context, internalformat, width, height)); mState.update(static_cast<GLsizei>(width), static_cast<GLsizei>(height), Format(internalformat),
0, InitState::MayNeedInit);
mWidth = static_cast<GLsizei>(width); mDirtyChannel.signal(mState.mInitState);
mHeight = static_cast<GLsizei>(height);
mFormat = Format(internalformat);
mSamples = 0;
mInitState = InitState::MayNeedInit;
mDirtyChannel.signal(mInitState);
return NoError(); return NoError();
} }
...@@ -85,17 +121,12 @@ Error Renderbuffer::setStorageMultisample(const Context *context, ...@@ -85,17 +121,12 @@ Error Renderbuffer::setStorageMultisample(const Context *context,
size_t height) size_t height)
{ {
ANGLE_TRY(orphanImages(context)); ANGLE_TRY(orphanImages(context));
ANGLE_TRY( ANGLE_TRY(
mRenderbuffer->setStorageMultisample(context, samples, internalformat, width, height)); mImplementation->setStorageMultisample(context, samples, internalformat, width, height));
mWidth = static_cast<GLsizei>(width);
mHeight = static_cast<GLsizei>(height);
mFormat = Format(internalformat);
mSamples = static_cast<GLsizei>(samples);
mInitState = InitState::MayNeedInit; mState.update(static_cast<GLsizei>(width), static_cast<GLsizei>(height), Format(internalformat),
mDirtyChannel.signal(mInitState); static_cast<GLsizei>(samples), InitState::MayNeedInit);
mDirtyChannel.signal(mState.mInitState);
return NoError(); return NoError();
} }
...@@ -103,76 +134,71 @@ Error Renderbuffer::setStorageMultisample(const Context *context, ...@@ -103,76 +134,71 @@ Error Renderbuffer::setStorageMultisample(const Context *context,
Error Renderbuffer::setStorageEGLImageTarget(const Context *context, egl::Image *image) Error Renderbuffer::setStorageEGLImageTarget(const Context *context, egl::Image *image)
{ {
ANGLE_TRY(orphanImages(context)); ANGLE_TRY(orphanImages(context));
ANGLE_TRY(mImplementation->setStorageEGLImageTarget(context, image));
ANGLE_TRY(mRenderbuffer->setStorageEGLImageTarget(context, image));
setTargetImage(context, image); setTargetImage(context, image);
mWidth = static_cast<GLsizei>(image->getWidth()); mState.update(static_cast<GLsizei>(image->getWidth()), static_cast<GLsizei>(image->getHeight()),
mHeight = static_cast<GLsizei>(image->getHeight()); Format(image->getFormat()), 0, image->sourceInitState());
mFormat = Format(image->getFormat()); mDirtyChannel.signal(mState.mInitState);
mSamples = 0;
mInitState = image->sourceInitState();
mDirtyChannel.signal(mInitState);
return NoError(); return NoError();
} }
rx::RenderbufferImpl *Renderbuffer::getImplementation() const rx::RenderbufferImpl *Renderbuffer::getImplementation() const
{ {
ASSERT(mRenderbuffer); ASSERT(mImplementation);
return mRenderbuffer; return mImplementation.get();
} }
GLsizei Renderbuffer::getWidth() const GLsizei Renderbuffer::getWidth() const
{ {
return mWidth; return mState.mWidth;
} }
GLsizei Renderbuffer::getHeight() const GLsizei Renderbuffer::getHeight() const
{ {
return mHeight; return mState.mHeight;
} }
const Format &Renderbuffer::getFormat() const const Format &Renderbuffer::getFormat() const
{ {
return mFormat; return mState.mFormat;
} }
GLsizei Renderbuffer::getSamples() const GLsizei Renderbuffer::getSamples() const
{ {
return mSamples; return mState.mSamples;
} }
GLuint Renderbuffer::getRedSize() const GLuint Renderbuffer::getRedSize() const
{ {
return mFormat.info->redBits; return mState.mFormat.info->redBits;
} }
GLuint Renderbuffer::getGreenSize() const GLuint Renderbuffer::getGreenSize() const
{ {
return mFormat.info->greenBits; return mState.mFormat.info->greenBits;
} }
GLuint Renderbuffer::getBlueSize() const GLuint Renderbuffer::getBlueSize() const
{ {
return mFormat.info->blueBits; return mState.mFormat.info->blueBits;
} }
GLuint Renderbuffer::getAlphaSize() const GLuint Renderbuffer::getAlphaSize() const
{ {
return mFormat.info->alphaBits; return mState.mFormat.info->alphaBits;
} }
GLuint Renderbuffer::getDepthSize() const GLuint Renderbuffer::getDepthSize() const
{ {
return mFormat.info->depthBits; return mState.mFormat.info->depthBits;
} }
GLuint Renderbuffer::getStencilSize() const GLuint Renderbuffer::getStencilSize() const
{ {
return mFormat.info->stencilBits; return mState.mFormat.info->stencilBits;
} }
void Renderbuffer::onAttach(const Context *context) void Renderbuffer::onAttach(const Context *context)
...@@ -192,7 +218,7 @@ GLuint Renderbuffer::getId() const ...@@ -192,7 +218,7 @@ GLuint Renderbuffer::getId() const
Extents Renderbuffer::getAttachmentSize(const gl::ImageIndex & /*imageIndex*/) const Extents Renderbuffer::getAttachmentSize(const gl::ImageIndex & /*imageIndex*/) const
{ {
return Extents(mWidth, mHeight, 1); return Extents(mState.mWidth, mState.mHeight, 1);
} }
const Format &Renderbuffer::getAttachmentFormat(GLenum /*binding*/, const Format &Renderbuffer::getAttachmentFormat(GLenum /*binding*/,
...@@ -212,7 +238,7 @@ InitState Renderbuffer::initState(const gl::ImageIndex & /*imageIndex*/) const ...@@ -212,7 +238,7 @@ InitState Renderbuffer::initState(const gl::ImageIndex & /*imageIndex*/) const
return sourceEGLImageInitState(); return sourceEGLImageInitState();
} }
return mInitState; return mState.mInitState;
} }
void Renderbuffer::setInitState(const gl::ImageIndex & /*imageIndex*/, InitState initState) void Renderbuffer::setInitState(const gl::ImageIndex & /*imageIndex*/, InitState initState)
...@@ -223,13 +249,13 @@ void Renderbuffer::setInitState(const gl::ImageIndex & /*imageIndex*/, InitState ...@@ -223,13 +249,13 @@ void Renderbuffer::setInitState(const gl::ImageIndex & /*imageIndex*/, InitState
} }
else else
{ {
mInitState = initState; mState.mInitState = initState;
} }
} }
rx::FramebufferAttachmentObjectImpl *Renderbuffer::getAttachmentImpl() const rx::FramebufferAttachmentObjectImpl *Renderbuffer::getAttachmentImpl() const
{ {
return mRenderbuffer; return mImplementation.get();
} }
} // namespace gl } // namespace gl
...@@ -20,6 +20,11 @@ ...@@ -20,6 +20,11 @@
#include "libANGLE/formatutils.h" #include "libANGLE/formatutils.h"
#include "libANGLE/renderer/RenderbufferImpl.h" #include "libANGLE/renderer/RenderbufferImpl.h"
namespace rx
{
class GLImplFactory;
} // namespace rx
namespace gl namespace gl
{ {
// A GL renderbuffer object is usually used as a depth or stencil buffer attachment // A GL renderbuffer object is usually used as a depth or stencil buffer attachment
...@@ -27,11 +32,40 @@ namespace gl ...@@ -27,11 +32,40 @@ namespace gl
// FramebufferAttachment and Framebuffer for how they are applied to an FBO via an // FramebufferAttachment and Framebuffer for how they are applied to an FBO via an
// attachment point. // attachment point.
class RenderbufferState final : angle::NonCopyable
{
public:
RenderbufferState();
~RenderbufferState();
GLsizei getWidth() const;
GLsizei getHeight() const;
const Format &getFormat() const;
GLsizei getSamples() const;
private:
friend class Renderbuffer;
void update(GLsizei width,
GLsizei height,
const Format &format,
GLsizei samples,
InitState initState);
GLsizei mWidth;
GLsizei mHeight;
Format mFormat;
GLsizei mSamples;
// For robust resource init.
InitState mInitState;
};
class Renderbuffer final : public egl::ImageSibling, class Renderbuffer final : public egl::ImageSibling,
public LabeledObject public LabeledObject
{ {
public: public:
Renderbuffer(rx::RenderbufferImpl *impl, GLuint id); Renderbuffer(rx::GLImplFactory *implFactory, GLuint id);
~Renderbuffer() override; ~Renderbuffer() override;
Error onDestroy(const Context *context) override; Error onDestroy(const Context *context) override;
...@@ -75,17 +109,10 @@ class Renderbuffer final : public egl::ImageSibling, ...@@ -75,17 +109,10 @@ class Renderbuffer final : public egl::ImageSibling,
private: private:
rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override; rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override;
rx::RenderbufferImpl *mRenderbuffer; RenderbufferState mState;
std::unique_ptr<rx::RenderbufferImpl> mImplementation;
std::string mLabel; std::string mLabel;
GLsizei mWidth;
GLsizei mHeight;
Format mFormat;
GLsizei mSamples;
// For robust resource init.
InitState mInitState;
}; };
} // namespace gl } // namespace gl
......
...@@ -270,7 +270,7 @@ void TextureManager::enableHandleAllocatorLogging() ...@@ -270,7 +270,7 @@ void TextureManager::enableHandleAllocatorLogging()
// static // static
Renderbuffer *RenderbufferManager::AllocateNewObject(rx::GLImplFactory *factory, GLuint handle) Renderbuffer *RenderbufferManager::AllocateNewObject(rx::GLImplFactory *factory, GLuint handle)
{ {
Renderbuffer *renderbuffer = new Renderbuffer(factory->createRenderbuffer(), handle); Renderbuffer *renderbuffer = new Renderbuffer(factory, handle);
renderbuffer->addRef(); renderbuffer->addRef();
return renderbuffer; return renderbuffer;
} }
......
...@@ -63,7 +63,7 @@ TEST_F(ResourceManagerTest, ReallocateBoundBuffer) ...@@ -63,7 +63,7 @@ TEST_F(ResourceManagerTest, ReallocateBoundBuffer)
TEST_F(ResourceManagerTest, ReallocateBoundRenderbuffer) TEST_F(ResourceManagerTest, ReallocateBoundRenderbuffer)
{ {
EXPECT_CALL(mMockFactory, createRenderbuffer()).Times(1).RetiresOnSaturation(); EXPECT_CALL(mMockFactory, createRenderbuffer(_)).Times(1).RetiresOnSaturation();
mRenderbuffermanager->checkRenderbufferAllocation(&mMockFactory, 1); mRenderbuffermanager->checkRenderbufferAllocation(&mMockFactory, 1);
GLuint newRenderbuffer = mRenderbuffermanager->createRenderbuffer(); GLuint newRenderbuffer = mRenderbuffermanager->createRenderbuffer();
......
...@@ -62,7 +62,7 @@ class GLImplFactory : angle::NonCopyable ...@@ -62,7 +62,7 @@ class GLImplFactory : angle::NonCopyable
virtual TextureImpl *createTexture(const gl::TextureState &state) = 0; virtual TextureImpl *createTexture(const gl::TextureState &state) = 0;
// Renderbuffer creation // Renderbuffer creation
virtual RenderbufferImpl *createRenderbuffer() = 0; virtual RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) = 0;
// Buffer creation // Buffer creation
virtual BufferImpl *createBuffer(const gl::BufferState &state) = 0; virtual BufferImpl *createBuffer(const gl::BufferState &state) = 0;
......
...@@ -14,10 +14,15 @@ ...@@ -14,10 +14,15 @@
#include "libANGLE/Error.h" #include "libANGLE/Error.h"
#include "libANGLE/renderer/FramebufferAttachmentObjectImpl.h" #include "libANGLE/renderer/FramebufferAttachmentObjectImpl.h"
namespace gl
{
class RenderbufferState;
} // namespace gl
namespace egl namespace egl
{ {
class Image; class Image;
} } // namespace egl
namespace rx namespace rx
{ {
...@@ -25,7 +30,7 @@ namespace rx ...@@ -25,7 +30,7 @@ namespace rx
class RenderbufferImpl : public FramebufferAttachmentObjectImpl class RenderbufferImpl : public FramebufferAttachmentObjectImpl
{ {
public: public:
RenderbufferImpl() {} RenderbufferImpl(const gl::RenderbufferState &state) : mState(state) {}
~RenderbufferImpl() override {} ~RenderbufferImpl() override {}
virtual gl::Error onDestroy(const gl::Context *context); virtual gl::Error onDestroy(const gl::Context *context);
...@@ -39,12 +44,15 @@ class RenderbufferImpl : public FramebufferAttachmentObjectImpl ...@@ -39,12 +44,15 @@ class RenderbufferImpl : public FramebufferAttachmentObjectImpl
size_t width, size_t width,
size_t height) = 0; size_t height) = 0;
virtual gl::Error setStorageEGLImageTarget(const gl::Context *context, egl::Image *image) = 0; virtual gl::Error setStorageEGLImageTarget(const gl::Context *context, egl::Image *image) = 0;
protected:
const gl::RenderbufferState &mState;
}; };
inline gl::Error RenderbufferImpl::onDestroy(const gl::Context *context) inline gl::Error RenderbufferImpl::onDestroy(const gl::Context *context)
{ {
return gl::NoError(); return gl::NoError();
} }
} } // namespace rx
#endif // LIBANGLE_RENDERER_RENDERBUFFERIMPL_H_ #endif // LIBANGLE_RENDERER_RENDERBUFFERIMPL_H_
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "gmock/gmock.h" #include "gmock/gmock.h"
#include "libANGLE/Image.h" #include "libANGLE/Image.h"
#include "libANGLE/Renderbuffer.h"
#include "libANGLE/renderer/RenderbufferImpl.h" #include "libANGLE/renderer/RenderbufferImpl.h"
namespace rx namespace rx
...@@ -20,6 +21,7 @@ namespace rx ...@@ -20,6 +21,7 @@ namespace rx
class MockRenderbufferImpl : public RenderbufferImpl class MockRenderbufferImpl : public RenderbufferImpl
{ {
public: public:
MockRenderbufferImpl() : RenderbufferImpl(mMockState) {}
virtual ~MockRenderbufferImpl() { destructor(); } virtual ~MockRenderbufferImpl() { destructor(); }
MOCK_METHOD4(setStorage, gl::Error(const gl::Context *, GLenum, size_t, size_t)); MOCK_METHOD4(setStorage, gl::Error(const gl::Context *, GLenum, size_t, size_t));
MOCK_METHOD5(setStorageMultisample, MOCK_METHOD5(setStorageMultisample,
...@@ -33,8 +35,11 @@ class MockRenderbufferImpl : public RenderbufferImpl ...@@ -33,8 +35,11 @@ class MockRenderbufferImpl : public RenderbufferImpl
FramebufferAttachmentRenderTarget **)); FramebufferAttachmentRenderTarget **));
MOCK_METHOD0(destructor, void()); MOCK_METHOD0(destructor, void());
protected:
gl::RenderbufferState mMockState;
}; };
} } // namespace rx
#endif // LIBANGLE_RENDERER_RENDERBUFFERIMPLMOCK_H_ #endif // LIBANGLE_RENDERER_RENDERBUFFERIMPLMOCK_H_
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
namespace rx namespace rx
{ {
RenderbufferD3D::RenderbufferD3D(RendererD3D *renderer) RenderbufferD3D::RenderbufferD3D(const gl::RenderbufferState &state, RendererD3D *renderer)
: mRenderer(renderer), mRenderTarget(nullptr), mImage(nullptr) : RenderbufferImpl(state), mRenderer(renderer), mRenderTarget(nullptr), mImage(nullptr)
{ {
} }
......
...@@ -24,7 +24,7 @@ class SwapChainD3D; ...@@ -24,7 +24,7 @@ class SwapChainD3D;
class RenderbufferD3D : public RenderbufferImpl class RenderbufferD3D : public RenderbufferImpl
{ {
public: public:
RenderbufferD3D(RendererD3D *renderer); RenderbufferD3D(const gl::RenderbufferState &state, RendererD3D *renderer);
~RenderbufferD3D() override; ~RenderbufferD3D() override;
gl::Error onDestroy(const gl::Context *context) override; gl::Error onDestroy(const gl::Context *context) override;
......
...@@ -95,9 +95,9 @@ TextureImpl *Context11::createTexture(const gl::TextureState &state) ...@@ -95,9 +95,9 @@ TextureImpl *Context11::createTexture(const gl::TextureState &state)
return nullptr; return nullptr;
} }
RenderbufferImpl *Context11::createRenderbuffer() RenderbufferImpl *Context11::createRenderbuffer(const gl::RenderbufferState &state)
{ {
return new RenderbufferD3D(mRenderer); return new RenderbufferD3D(state, mRenderer);
} }
BufferImpl *Context11::createBuffer(const gl::BufferState &state) BufferImpl *Context11::createBuffer(const gl::BufferState &state)
......
...@@ -36,7 +36,7 @@ class Context11 : public ContextImpl ...@@ -36,7 +36,7 @@ class Context11 : public ContextImpl
TextureImpl *createTexture(const gl::TextureState &state) override; TextureImpl *createTexture(const gl::TextureState &state) override;
// Renderbuffer creation // Renderbuffer creation
RenderbufferImpl *createRenderbuffer() override; RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) override;
// Buffer creation // Buffer creation
BufferImpl *createBuffer(const gl::BufferState &state) override; BufferImpl *createBuffer(const gl::BufferState &state) override;
......
...@@ -77,9 +77,9 @@ TextureImpl *Context9::createTexture(const gl::TextureState &state) ...@@ -77,9 +77,9 @@ TextureImpl *Context9::createTexture(const gl::TextureState &state)
return nullptr; return nullptr;
} }
RenderbufferImpl *Context9::createRenderbuffer() RenderbufferImpl *Context9::createRenderbuffer(const gl::RenderbufferState &state)
{ {
return new RenderbufferD3D(mRenderer); return new RenderbufferD3D(state, mRenderer);
} }
BufferImpl *Context9::createBuffer(const gl::BufferState &state) BufferImpl *Context9::createBuffer(const gl::BufferState &state)
......
...@@ -36,7 +36,7 @@ class Context9 : public ContextImpl ...@@ -36,7 +36,7 @@ class Context9 : public ContextImpl
TextureImpl *createTexture(const gl::TextureState &state) override; TextureImpl *createTexture(const gl::TextureState &state) override;
// Renderbuffer creation // Renderbuffer creation
RenderbufferImpl *createRenderbuffer() override; RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) override;
// Buffer creation // Buffer creation
BufferImpl *createBuffer(const gl::BufferState &state) override; BufferImpl *createBuffer(const gl::BufferState &state) override;
......
...@@ -1181,7 +1181,7 @@ gl::Error Renderer9::getNullColorbuffer(const gl::Context *context, ...@@ -1181,7 +1181,7 @@ gl::Error Renderer9::getNullColorbuffer(const gl::Context *context,
auto *implFactory = context->getImplementation(); auto *implFactory = context->getImplementation();
gl::Renderbuffer *nullRenderbuffer = new gl::Renderbuffer(implFactory->createRenderbuffer(), 0); gl::Renderbuffer *nullRenderbuffer = new gl::Renderbuffer(implFactory, 0);
gl::Error error = nullRenderbuffer->setStorage(context, GL_NONE, size.width, size.height); gl::Error error = nullRenderbuffer->setStorage(context, GL_NONE, size.width, size.height);
if (error.isError()) if (error.isError())
{ {
......
...@@ -75,9 +75,9 @@ TextureImpl *ContextGL::createTexture(const gl::TextureState &state) ...@@ -75,9 +75,9 @@ TextureImpl *ContextGL::createTexture(const gl::TextureState &state)
mRenderer->getBlitter()); mRenderer->getBlitter());
} }
RenderbufferImpl *ContextGL::createRenderbuffer() RenderbufferImpl *ContextGL::createRenderbuffer(const gl::RenderbufferState &state)
{ {
return new RenderbufferGL(getFunctions(), getWorkaroundsGL(), getStateManager(), return new RenderbufferGL(state, getFunctions(), getWorkaroundsGL(), getStateManager(),
getNativeTextureCaps()); getNativeTextureCaps());
} }
......
...@@ -44,7 +44,7 @@ class ContextGL : public ContextImpl ...@@ -44,7 +44,7 @@ class ContextGL : public ContextImpl
TextureImpl *createTexture(const gl::TextureState &state) override; TextureImpl *createTexture(const gl::TextureState &state) override;
// Renderbuffer creation // Renderbuffer creation
RenderbufferImpl *createRenderbuffer() override; RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) override;
// Buffer creation // Buffer creation
BufferImpl *createBuffer(const gl::BufferState &state) override; BufferImpl *createBuffer(const gl::BufferState &state) override;
......
...@@ -18,11 +18,12 @@ ...@@ -18,11 +18,12 @@
namespace rx namespace rx
{ {
RenderbufferGL::RenderbufferGL(const FunctionsGL *functions, RenderbufferGL::RenderbufferGL(const gl::RenderbufferState &state,
const FunctionsGL *functions,
const WorkaroundsGL &workarounds, const WorkaroundsGL &workarounds,
StateManagerGL *stateManager, StateManagerGL *stateManager,
const gl::TextureCapsMap &textureCaps) const gl::TextureCapsMap &textureCaps)
: RenderbufferImpl(), : RenderbufferImpl(state),
mFunctions(functions), mFunctions(functions),
mWorkarounds(workarounds), mWorkarounds(workarounds),
mStateManager(stateManager), mStateManager(stateManager),
......
...@@ -26,7 +26,8 @@ struct WorkaroundsGL; ...@@ -26,7 +26,8 @@ struct WorkaroundsGL;
class RenderbufferGL : public RenderbufferImpl class RenderbufferGL : public RenderbufferImpl
{ {
public: public:
RenderbufferGL(const FunctionsGL *functions, RenderbufferGL(const gl::RenderbufferState &state,
const FunctionsGL *functions,
const WorkaroundsGL &workarounds, const WorkaroundsGL &workarounds,
StateManagerGL *stateManager, StateManagerGL *stateManager,
const gl::TextureCapsMap &textureCaps); const gl::TextureCapsMap &textureCaps);
......
...@@ -352,9 +352,9 @@ TextureImpl *ContextNULL::createTexture(const gl::TextureState &state) ...@@ -352,9 +352,9 @@ TextureImpl *ContextNULL::createTexture(const gl::TextureState &state)
return new TextureNULL(state); return new TextureNULL(state);
} }
RenderbufferImpl *ContextNULL::createRenderbuffer() RenderbufferImpl *ContextNULL::createRenderbuffer(const gl::RenderbufferState &state)
{ {
return new RenderbufferNULL(); return new RenderbufferNULL(state);
} }
BufferImpl *ContextNULL::createBuffer(const gl::BufferState &state) BufferImpl *ContextNULL::createBuffer(const gl::BufferState &state)
......
...@@ -169,7 +169,7 @@ class ContextNULL : public ContextImpl ...@@ -169,7 +169,7 @@ class ContextNULL : public ContextImpl
TextureImpl *createTexture(const gl::TextureState &state) override; TextureImpl *createTexture(const gl::TextureState &state) override;
// Renderbuffer creation // Renderbuffer creation
RenderbufferImpl *createRenderbuffer() override; RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) override;
// Buffer creation // Buffer creation
BufferImpl *createBuffer(const gl::BufferState &state) override; BufferImpl *createBuffer(const gl::BufferState &state) override;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
namespace rx namespace rx
{ {
RenderbufferNULL::RenderbufferNULL() : RenderbufferImpl() RenderbufferNULL::RenderbufferNULL(const gl::RenderbufferState &state) : RenderbufferImpl(state)
{ {
} }
......
...@@ -18,7 +18,7 @@ namespace rx ...@@ -18,7 +18,7 @@ namespace rx
class RenderbufferNULL : public RenderbufferImpl class RenderbufferNULL : public RenderbufferImpl
{ {
public: public:
RenderbufferNULL(); RenderbufferNULL(const gl::RenderbufferState &state);
~RenderbufferNULL() override; ~RenderbufferNULL() override;
gl::Error setStorage(const gl::Context *context, gl::Error setStorage(const gl::Context *context,
......
...@@ -709,9 +709,9 @@ TextureImpl *ContextVk::createTexture(const gl::TextureState &state) ...@@ -709,9 +709,9 @@ TextureImpl *ContextVk::createTexture(const gl::TextureState &state)
return new TextureVk(state); return new TextureVk(state);
} }
RenderbufferImpl *ContextVk::createRenderbuffer() RenderbufferImpl *ContextVk::createRenderbuffer(const gl::RenderbufferState &state)
{ {
return new RenderbufferVk(); return new RenderbufferVk(state);
} }
BufferImpl *ContextVk::createBuffer(const gl::BufferState &state) BufferImpl *ContextVk::createBuffer(const gl::BufferState &state)
......
...@@ -115,7 +115,7 @@ class ContextVk : public ContextImpl ...@@ -115,7 +115,7 @@ class ContextVk : public ContextImpl
TextureImpl *createTexture(const gl::TextureState &state) override; TextureImpl *createTexture(const gl::TextureState &state) override;
// Renderbuffer creation // Renderbuffer creation
RenderbufferImpl *createRenderbuffer() override; RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) override;
// Buffer creation // Buffer creation
BufferImpl *createBuffer(const gl::BufferState &state) override; BufferImpl *createBuffer(const gl::BufferState &state) override;
......
...@@ -16,7 +16,8 @@ ...@@ -16,7 +16,8 @@
namespace rx namespace rx
{ {
RenderbufferVk::RenderbufferVk() : RenderbufferImpl(), mRequiredSize(0) RenderbufferVk::RenderbufferVk(const gl::RenderbufferState &state)
: RenderbufferImpl(state), mRequiredSize(0)
{ {
} }
......
...@@ -20,7 +20,7 @@ namespace rx ...@@ -20,7 +20,7 @@ namespace rx
class RenderbufferVk : public RenderbufferImpl, public ResourceVk class RenderbufferVk : public RenderbufferImpl, public ResourceVk
{ {
public: public:
RenderbufferVk(); RenderbufferVk(const gl::RenderbufferState &state);
~RenderbufferVk() override; ~RenderbufferVk() override;
gl::Error onDestroy(const gl::Context *context) override; gl::Error onDestroy(const gl::Context *context) override;
......
...@@ -38,7 +38,10 @@ class NullFactory : public GLImplFactory ...@@ -38,7 +38,10 @@ class NullFactory : public GLImplFactory
TextureImpl *createTexture(const gl::TextureState &data) override { return nullptr; } TextureImpl *createTexture(const gl::TextureState &data) override { return nullptr; }
// Renderbuffer creation // Renderbuffer creation
RenderbufferImpl *createRenderbuffer() override { return nullptr; } RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) override
{
return nullptr;
}
// Buffer creation // Buffer creation
BufferImpl *createBuffer(const gl::BufferState &state) override { return nullptr; } BufferImpl *createBuffer(const gl::BufferState &state) override { return nullptr; }
...@@ -86,7 +89,7 @@ class MockGLFactory : public GLImplFactory ...@@ -86,7 +89,7 @@ class MockGLFactory : public GLImplFactory
MOCK_METHOD1(createProgramPipeline, ProgramPipelineImpl *(const gl::ProgramPipelineState &)); MOCK_METHOD1(createProgramPipeline, ProgramPipelineImpl *(const gl::ProgramPipelineState &));
MOCK_METHOD1(createFramebuffer, FramebufferImpl *(const gl::FramebufferState &)); MOCK_METHOD1(createFramebuffer, FramebufferImpl *(const gl::FramebufferState &));
MOCK_METHOD1(createTexture, TextureImpl *(const gl::TextureState &)); MOCK_METHOD1(createTexture, TextureImpl *(const gl::TextureState &));
MOCK_METHOD0(createRenderbuffer, RenderbufferImpl *()); MOCK_METHOD1(createRenderbuffer, RenderbufferImpl *(const gl::RenderbufferState &));
MOCK_METHOD1(createBuffer, BufferImpl *(const gl::BufferState &)); MOCK_METHOD1(createBuffer, BufferImpl *(const gl::BufferState &));
MOCK_METHOD1(createVertexArray, VertexArrayImpl *(const gl::VertexArrayState &)); MOCK_METHOD1(createVertexArray, VertexArrayImpl *(const gl::VertexArrayState &));
MOCK_METHOD1(createQuery, QueryImpl *(GLenum type)); MOCK_METHOD1(createQuery, QueryImpl *(GLenum type));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment