Commit 4fd95d54 by Jamie Madill Committed by Commit Bot

Stop using FramebufferAttachment::Target.

Target includes the binding (DEPTH/STENCIL/COLOR), which is not useful for many operations. Simplify this to just passing the mip/layer. This allows us to stop using this internal struct in other classes. BUG=angleproject:1635 Change-Id: Ic5a11781bf45fe7835437fa1e363c190b876d453 Reviewed-on: https://chromium-review.googlesource.com/469152Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent ba992ab5
...@@ -1152,8 +1152,7 @@ void Framebuffer::setAttachmentImpl(GLenum type, ...@@ -1152,8 +1152,7 @@ void Framebuffer::setAttachmentImpl(GLenum type,
FramebufferAttachmentObject *attachmentObj = resource; FramebufferAttachmentObject *attachmentObj = resource;
if (resource) if (resource)
{ {
FramebufferAttachment::Target target(binding, textureIndex); const Format &format = resource->getAttachmentFormat(binding, textureIndex);
const Format &format = resource->getAttachmentFormat(target);
if (format.info->depthBits == 0 || format.info->stencilBits == 0) if (format.info->depthBits == 0 || format.info->stencilBits == 0)
{ {
// Attaching nullptr detaches the current attachment. // Attaching nullptr detaches the current attachment.
......
...@@ -236,10 +236,11 @@ bool FramebufferAttachment::operator!=(const FramebufferAttachment &other) const ...@@ -236,10 +236,11 @@ bool FramebufferAttachment::operator!=(const FramebufferAttachment &other) const
} }
Error FramebufferAttachmentObject::getAttachmentRenderTarget( Error FramebufferAttachmentObject::getAttachmentRenderTarget(
const FramebufferAttachment::Target &target, GLenum binding,
const ImageIndex &imageIndex,
rx::FramebufferAttachmentRenderTarget **rtOut) const rx::FramebufferAttachmentRenderTarget **rtOut) const
{ {
return getAttachmentImpl()->getAttachmentRenderTarget(target, rtOut); return getAttachmentImpl()->getAttachmentRenderTarget(binding, imageIndex, rtOut);
} }
angle::BroadcastChannel<> *FramebufferAttachmentObject::getDirtyChannel() angle::BroadcastChannel<> *FramebufferAttachmentObject::getDirtyChannel()
......
...@@ -64,28 +64,6 @@ class FramebufferAttachment final ...@@ -64,28 +64,6 @@ class FramebufferAttachment final
~FramebufferAttachment(); ~FramebufferAttachment();
// A framebuffer attachment points to one of three types of resources: Renderbuffers,
// Textures and egl::Surface. The "Target" struct indicates which part of the
// object an attachment references. For the three types:
// - a Renderbuffer has a unique renderable target, and needs no target index
// - a Texture has targets for every image and uses an ImageIndex
// - a Surface has targets for Color and Depth/Stencil, and uses the attachment binding
class Target
{
public:
Target();
Target(GLenum binding, const ImageIndex &imageIndex);
Target(const Target &other);
Target &operator=(const Target &other);
GLenum binding() const { return mBinding; }
const ImageIndex &textureIndex() const { return mTextureIndex; }
private:
GLenum mBinding;
ImageIndex mTextureIndex;
};
void detach(); void detach();
void attach(GLenum type, void attach(GLenum type,
GLenum binding, GLenum binding,
...@@ -144,6 +122,28 @@ class FramebufferAttachment final ...@@ -144,6 +122,28 @@ class FramebufferAttachment final
private: private:
gl::Error getRenderTargetImpl(rx::FramebufferAttachmentRenderTarget **rtOut) const; gl::Error getRenderTargetImpl(rx::FramebufferAttachmentRenderTarget **rtOut) const;
// A framebuffer attachment points to one of three types of resources: Renderbuffers,
// Textures and egl::Surface. The "Target" struct indicates which part of the
// object an attachment references. For the three types:
// - a Renderbuffer has a unique renderable target, and needs no target index
// - a Texture has targets for every image and uses an ImageIndex
// - a Surface has targets for Color and Depth/Stencil, and uses the attachment binding
class Target
{
public:
Target();
Target(GLenum binding, const ImageIndex &imageIndex);
Target(const Target &other);
Target &operator=(const Target &other);
GLenum binding() const { return mBinding; }
const ImageIndex &textureIndex() const { return mTextureIndex; }
private:
GLenum mBinding;
ImageIndex mTextureIndex;
};
GLenum mType; GLenum mType;
Target mTarget; Target mTarget;
FramebufferAttachmentObject *mResource; FramebufferAttachmentObject *mResource;
...@@ -156,16 +156,17 @@ class FramebufferAttachmentObject ...@@ -156,16 +156,17 @@ class FramebufferAttachmentObject
FramebufferAttachmentObject() {} FramebufferAttachmentObject() {}
virtual ~FramebufferAttachmentObject() {} virtual ~FramebufferAttachmentObject() {}
virtual Extents getAttachmentSize(const FramebufferAttachment::Target &target) const = 0; virtual Extents getAttachmentSize(const ImageIndex &imageIndex) const = 0;
virtual const Format &getAttachmentFormat( virtual const Format &getAttachmentFormat(GLenum binding,
const FramebufferAttachment::Target &target) const = 0; const ImageIndex &imageIndex) const = 0;
virtual GLsizei getAttachmentSamples(const FramebufferAttachment::Target &target) const = 0; virtual GLsizei getAttachmentSamples(const ImageIndex &imageIndex) const = 0;
virtual void onAttach() = 0; virtual void onAttach() = 0;
virtual void onDetach() = 0; virtual void onDetach() = 0;
virtual GLuint getId() const = 0; virtual GLuint getId() const = 0;
Error getAttachmentRenderTarget(const FramebufferAttachment::Target &target, Error getAttachmentRenderTarget(GLenum binding,
const ImageIndex &imageIndex,
rx::FramebufferAttachmentRenderTarget **rtOut) const; rx::FramebufferAttachmentRenderTarget **rtOut) const;
angle::BroadcastChannel<> *getDirtyChannel(); angle::BroadcastChannel<> *getDirtyChannel();
...@@ -179,26 +180,26 @@ class FramebufferAttachmentObject ...@@ -179,26 +180,26 @@ class FramebufferAttachmentObject
inline Extents FramebufferAttachment::getSize() const inline Extents FramebufferAttachment::getSize() const
{ {
ASSERT(mResource); ASSERT(mResource);
return mResource->getAttachmentSize(mTarget); return mResource->getAttachmentSize(mTarget.textureIndex());
} }
inline const Format &FramebufferAttachment::getFormat() const inline const Format &FramebufferAttachment::getFormat() const
{ {
ASSERT(mResource); ASSERT(mResource);
return mResource->getAttachmentFormat(mTarget); return mResource->getAttachmentFormat(mTarget.binding(), mTarget.textureIndex());
} }
inline GLsizei FramebufferAttachment::getSamples() const inline GLsizei FramebufferAttachment::getSamples() const
{ {
ASSERT(mResource); ASSERT(mResource);
return mResource->getAttachmentSamples(mTarget); return mResource->getAttachmentSamples(mTarget.textureIndex());
} }
inline gl::Error FramebufferAttachment::getRenderTargetImpl( inline gl::Error FramebufferAttachment::getRenderTargetImpl(
rx::FramebufferAttachmentRenderTarget **rtOut) const rx::FramebufferAttachmentRenderTarget **rtOut) const
{ {
ASSERT(mResource); ASSERT(mResource);
return mResource->getAttachmentRenderTarget(mTarget, rtOut); return mResource->getAttachmentRenderTarget(mTarget.binding(), mTarget.textureIndex(), rtOut);
} }
} // namespace gl } // namespace gl
......
...@@ -166,7 +166,7 @@ GLuint Renderbuffer::getId() const ...@@ -166,7 +166,7 @@ GLuint Renderbuffer::getId() const
return id(); return id();
} }
Extents Renderbuffer::getAttachmentSize(const FramebufferAttachment::Target & /*target*/) const Extents Renderbuffer::getAttachmentSize(const gl::ImageIndex & /*imageIndex*/) const
{ {
return Extents(mWidth, mHeight, 1); return Extents(mWidth, mHeight, 1);
} }
......
...@@ -58,13 +58,16 @@ class Renderbuffer final : public egl::ImageSibling, ...@@ -58,13 +58,16 @@ class Renderbuffer final : public egl::ImageSibling,
GLuint getStencilSize() const; GLuint getStencilSize() const;
// FramebufferAttachmentObject Impl // FramebufferAttachmentObject Impl
Extents getAttachmentSize(const FramebufferAttachment::Target &target) const override; Extents getAttachmentSize(const ImageIndex &imageIndex) const override;
const Format &getAttachmentFormat( const Format &getAttachmentFormat(GLenum /*binding*/,
const FramebufferAttachment::Target & /*target*/) const override const ImageIndex & /*imageIndex*/) const override
{ {
return getFormat(); return getFormat();
} }
GLsizei getAttachmentSamples(const FramebufferAttachment::Target &/*target*/) const override { return getSamples(); } GLsizei getAttachmentSamples(const ImageIndex & /*imageIndex*/) const override
{
return getSamples();
}
void onAttach() override; void onAttach() override;
void onDetach() override; void onDetach() override;
......
...@@ -255,18 +255,17 @@ void Surface::releaseTexImageFromTexture() ...@@ -255,18 +255,17 @@ void Surface::releaseTexImageFromTexture()
mTexture.set(nullptr); mTexture.set(nullptr);
} }
gl::Extents Surface::getAttachmentSize(const gl::FramebufferAttachment::Target & /*target*/) const gl::Extents Surface::getAttachmentSize(const gl::ImageIndex & /*target*/) const
{ {
return gl::Extents(getWidth(), getHeight(), 1); return gl::Extents(getWidth(), getHeight(), 1);
} }
const gl::Format &Surface::getAttachmentFormat( const gl::Format &Surface::getAttachmentFormat(GLenum binding, const gl::ImageIndex &target) const
const gl::FramebufferAttachment::Target &target) const
{ {
return (target.binding() == GL_BACK ? mBackFormat : mDSFormat); return (binding == GL_BACK ? mBackFormat : mDSFormat);
} }
GLsizei Surface::getAttachmentSamples(const gl::FramebufferAttachment::Target &target) const GLsizei Surface::getAttachmentSamples(const gl::ImageIndex &target) const
{ {
return getConfig()->samples; return getConfig()->samples;
} }
......
...@@ -87,10 +87,10 @@ class Surface : public gl::FramebufferAttachmentObject ...@@ -87,10 +87,10 @@ class Surface : public gl::FramebufferAttachmentObject
EGLint isFixedSize() const; EGLint isFixedSize() const;
// FramebufferAttachmentObject implementation // FramebufferAttachmentObject implementation
gl::Extents getAttachmentSize(const gl::FramebufferAttachment::Target &target) const override; gl::Extents getAttachmentSize(const gl::ImageIndex &imageIndex) const override;
const gl::Format &getAttachmentFormat( const gl::Format &getAttachmentFormat(GLenum binding,
const gl::FramebufferAttachment::Target &target) const override; const gl::ImageIndex &imageIndex) const override;
GLsizei getAttachmentSamples(const gl::FramebufferAttachment::Target &target) const override; GLsizei getAttachmentSamples(const gl::ImageIndex &imageIndex) const override;
void onAttach() override {} void onAttach() override {}
void onDetach() override {} void onDetach() override {}
......
...@@ -43,7 +43,10 @@ class MockSurfaceImpl : public rx::SurfaceImpl ...@@ -43,7 +43,10 @@ class MockSurfaceImpl : public rx::SurfaceImpl
MOCK_CONST_METHOD0(getHeight, EGLint()); MOCK_CONST_METHOD0(getHeight, EGLint());
MOCK_CONST_METHOD0(isPostSubBufferSupported, EGLint(void)); MOCK_CONST_METHOD0(isPostSubBufferSupported, EGLint(void));
MOCK_CONST_METHOD0(getSwapBehavior, EGLint(void)); MOCK_CONST_METHOD0(getSwapBehavior, EGLint(void));
MOCK_METHOD2(getAttachmentRenderTarget, gl::Error(const gl::FramebufferAttachment::Target &, rx::FramebufferAttachmentRenderTarget **)); MOCK_METHOD3(getAttachmentRenderTarget,
gl::Error(GLenum,
const gl::ImageIndex &,
rx::FramebufferAttachmentRenderTarget **));
MOCK_METHOD0(destructor, void()); MOCK_METHOD0(destructor, void());
......
...@@ -1239,19 +1239,19 @@ Error Texture::setEGLImageTarget(GLenum target, egl::Image *imageTarget) ...@@ -1239,19 +1239,19 @@ Error Texture::setEGLImageTarget(GLenum target, egl::Image *imageTarget)
return NoError(); return NoError();
} }
Extents Texture::getAttachmentSize(const FramebufferAttachment::Target &target) const Extents Texture::getAttachmentSize(const ImageIndex &imageIndex) const
{ {
return mState.getImageDesc(target.textureIndex()).size; return mState.getImageDesc(imageIndex).size;
} }
const Format &Texture::getAttachmentFormat(const FramebufferAttachment::Target &target) const const Format &Texture::getAttachmentFormat(GLenum /*binding*/, const ImageIndex &imageIndex) const
{ {
return mState.getImageDesc(target.textureIndex()).format; return mState.getImageDesc(imageIndex).format;
} }
GLsizei Texture::getAttachmentSamples(const FramebufferAttachment::Target &target) const GLsizei Texture::getAttachmentSamples(const ImageIndex &imageIndex) const
{ {
return getSamples(target.textureIndex().type, 0); return getSamples(imageIndex.type, 0);
} }
void Texture::onAttach() void Texture::onAttach()
......
...@@ -358,9 +358,9 @@ class Texture final : public egl::ImageSibling, ...@@ -358,9 +358,9 @@ class Texture final : public egl::ImageSibling,
rx::TextureImpl *getImplementation() const { return mTexture; } rx::TextureImpl *getImplementation() const { return mTexture; }
// FramebufferAttachmentObject implementation // FramebufferAttachmentObject implementation
Extents getAttachmentSize(const FramebufferAttachment::Target &target) const override; Extents getAttachmentSize(const ImageIndex &imageIndex) const override;
const Format &getAttachmentFormat(const FramebufferAttachment::Target &target) const override; const Format &getAttachmentFormat(GLenum binding, const ImageIndex &imageIndex) const override;
GLsizei getAttachmentSamples(const FramebufferAttachment::Target &target) const override; GLsizei getAttachmentSamples(const ImageIndex &imageIndex) const override;
void onAttach() override; void onAttach() override;
void onDetach() override; void onDetach() override;
......
...@@ -22,11 +22,12 @@ class FramebufferAttachmentObjectImpl : angle::NonCopyable ...@@ -22,11 +22,12 @@ class FramebufferAttachmentObjectImpl : angle::NonCopyable
FramebufferAttachmentObjectImpl() {} FramebufferAttachmentObjectImpl() {}
virtual ~FramebufferAttachmentObjectImpl() {} virtual ~FramebufferAttachmentObjectImpl() {}
virtual gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, virtual gl::Error getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) FramebufferAttachmentRenderTarget **rtOut)
{ {
UNIMPLEMENTED(); UNIMPLEMENTED();
return gl::Error(GL_OUT_OF_MEMORY, "getAttachmentRenderTarget not supported."); return gl::OutOfMemory() << "getAttachmentRenderTarget not supported.";
} }
}; };
......
...@@ -25,7 +25,8 @@ class MockRenderbufferImpl : public RenderbufferImpl ...@@ -25,7 +25,8 @@ class MockRenderbufferImpl : public RenderbufferImpl
MOCK_METHOD4(setStorageMultisample, gl::Error(size_t, GLenum, size_t, size_t)); MOCK_METHOD4(setStorageMultisample, gl::Error(size_t, GLenum, size_t, size_t));
MOCK_METHOD1(setStorageEGLImageTarget, gl::Error(egl::Image *)); MOCK_METHOD1(setStorageEGLImageTarget, gl::Error(egl::Image *));
MOCK_METHOD2(getAttachmentRenderTarget, gl::Error(const gl::FramebufferAttachment::Target &, FramebufferAttachmentRenderTarget **)); MOCK_METHOD3(getAttachmentRenderTarget,
gl::Error(GLenum, const gl::ImageIndex &, FramebufferAttachmentRenderTarget **));
MOCK_METHOD0(destructor, void()); MOCK_METHOD0(destructor, void());
}; };
......
...@@ -103,7 +103,8 @@ class MockTextureImpl : public TextureImpl ...@@ -103,7 +103,8 @@ class MockTextureImpl : public TextureImpl
MOCK_METHOD1(bindTexImage, void(egl::Surface *)); MOCK_METHOD1(bindTexImage, void(egl::Surface *));
MOCK_METHOD0(releaseTexImage, void(void)); MOCK_METHOD0(releaseTexImage, void(void));
MOCK_METHOD2(getAttachmentRenderTarget, gl::Error(const gl::FramebufferAttachment::Target &, FramebufferAttachmentRenderTarget **)); MOCK_METHOD3(getAttachmentRenderTarget,
gl::Error(GLenum, const gl::ImageIndex &, FramebufferAttachmentRenderTarget **));
MOCK_METHOD6(setStorageMultisample, MOCK_METHOD6(setStorageMultisample,
gl::Error(ContextImpl *, GLenum, GLsizei, GLint, const gl::Extents &, GLboolean)); gl::Error(ContextImpl *, GLenum, GLsizei, GLint, const gl::Extents &, GLboolean));
......
...@@ -39,7 +39,11 @@ EGLImageD3D::EGLImageD3D(RendererD3D *renderer, ...@@ -39,7 +39,11 @@ EGLImageD3D::EGLImageD3D(RendererD3D *renderer,
EGLenum target, EGLenum target,
egl::ImageSibling *buffer, egl::ImageSibling *buffer,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
: mRenderer(renderer), mBuffer(buffer), mAttachmentBuffer(nullptr), mRenderTarget(nullptr) : mRenderer(renderer),
mBuffer(buffer),
mImageIndex(gl::ImageIndex::MakeInvalid()),
mAttachmentBuffer(nullptr),
mRenderTarget(nullptr)
{ {
ASSERT(renderer != nullptr); ASSERT(renderer != nullptr);
ASSERT(buffer != nullptr); ASSERT(buffer != nullptr);
...@@ -47,16 +51,13 @@ EGLImageD3D::EGLImageD3D(RendererD3D *renderer, ...@@ -47,16 +51,13 @@ EGLImageD3D::EGLImageD3D(RendererD3D *renderer,
if (egl::IsTextureTarget(target)) if (egl::IsTextureTarget(target))
{ {
mAttachmentBuffer = GetImplAs<TextureD3D>(GetAs<gl::Texture>(buffer)); mAttachmentBuffer = GetImplAs<TextureD3D>(GetAs<gl::Texture>(buffer));
mAttachmentTarget = gl::FramebufferAttachment::Target( mImageIndex = GetImageIndex(egl_gl::EGLImageTargetToGLTextureTarget(target),
GL_NONE, GetImageIndex(egl_gl::EGLImageTargetToGLTextureTarget(target), attribs.get(EGL_GL_TEXTURE_LEVEL_KHR, 0),
attribs.get(EGL_GL_TEXTURE_LEVEL_KHR, 0), attribs.get(EGL_GL_TEXTURE_ZOFFSET_KHR, 0));
attribs.get(EGL_GL_TEXTURE_ZOFFSET_KHR, 0)));
} }
else if (egl::IsRenderbufferTarget(target)) else if (egl::IsRenderbufferTarget(target))
{ {
mAttachmentBuffer = GetImplAs<RenderbufferD3D>(GetAs<gl::Renderbuffer>(buffer)); mAttachmentBuffer = GetImplAs<RenderbufferD3D>(GetAs<gl::Renderbuffer>(buffer));
mAttachmentTarget =
gl::FramebufferAttachment::Target(GL_NONE, gl::ImageIndex::MakeInvalid());
} }
else else
{ {
...@@ -78,11 +79,7 @@ gl::Error EGLImageD3D::orphan(egl::ImageSibling *sibling) ...@@ -78,11 +79,7 @@ gl::Error EGLImageD3D::orphan(egl::ImageSibling *sibling)
{ {
if (sibling == mBuffer) if (sibling == mBuffer)
{ {
gl::Error error = copyToLocalRendertarget(); ANGLE_TRY(copyToLocalRendertarget());
if (error.isError())
{
return error;
}
} }
return gl::NoError(); return gl::NoError();
...@@ -93,12 +90,7 @@ gl::Error EGLImageD3D::getRenderTarget(RenderTargetD3D **outRT) const ...@@ -93,12 +90,7 @@ gl::Error EGLImageD3D::getRenderTarget(RenderTargetD3D **outRT) const
if (mAttachmentBuffer) if (mAttachmentBuffer)
{ {
FramebufferAttachmentRenderTarget *rt = nullptr; FramebufferAttachmentRenderTarget *rt = nullptr;
gl::Error error = mAttachmentBuffer->getAttachmentRenderTarget(mAttachmentTarget, &rt); ANGLE_TRY(mAttachmentBuffer->getAttachmentRenderTarget(GL_NONE, mImageIndex, &rt));
if (error.isError())
{
return error;
}
*outRT = static_cast<RenderTargetD3D *>(rt); *outRT = static_cast<RenderTargetD3D *>(rt);
return gl::NoError(); return gl::NoError();
} }
...@@ -117,11 +109,7 @@ gl::Error EGLImageD3D::copyToLocalRendertarget() ...@@ -117,11 +109,7 @@ gl::Error EGLImageD3D::copyToLocalRendertarget()
ASSERT(mRenderTarget == nullptr); ASSERT(mRenderTarget == nullptr);
RenderTargetD3D *curRenderTarget = nullptr; RenderTargetD3D *curRenderTarget = nullptr;
gl::Error error = getRenderTarget(&curRenderTarget); ANGLE_TRY(getRenderTarget(&curRenderTarget));
if (error.isError())
{
return error;
}
// This only currently applies do D3D11, where it invalidates FBOs with this Image attached. // This only currently applies do D3D11, where it invalidates FBOs with this Image attached.
curRenderTarget->signalDirty(); curRenderTarget->signalDirty();
...@@ -132,4 +120,4 @@ gl::Error EGLImageD3D::copyToLocalRendertarget() ...@@ -132,4 +120,4 @@ gl::Error EGLImageD3D::copyToLocalRendertarget()
return mRenderer->createRenderTargetCopy(curRenderTarget, &mRenderTarget); return mRenderer->createRenderTargetCopy(curRenderTarget, &mRenderTarget);
} }
} } // namespace rx
...@@ -46,7 +46,7 @@ class EGLImageD3D final : public ImageImpl ...@@ -46,7 +46,7 @@ class EGLImageD3D final : public ImageImpl
egl::ImageSibling *mBuffer; egl::ImageSibling *mBuffer;
gl::FramebufferAttachment::Target mAttachmentTarget; gl::ImageIndex mImageIndex;
FramebufferAttachmentObjectImpl *mAttachmentBuffer; FramebufferAttachmentObjectImpl *mAttachmentBuffer;
RenderTargetD3D *mRenderTarget; RenderTargetD3D *mRenderTarget;
......
...@@ -87,7 +87,8 @@ gl::Error RenderbufferD3D::getRenderTarget(RenderTargetD3D **outRenderTarget) ...@@ -87,7 +87,8 @@ gl::Error RenderbufferD3D::getRenderTarget(RenderTargetD3D **outRenderTarget)
} }
} }
gl::Error RenderbufferD3D::getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error RenderbufferD3D::getAttachmentRenderTarget(GLenum /*binding*/,
const gl::ImageIndex & /*imageIndex*/,
FramebufferAttachmentRenderTarget **rtOut) FramebufferAttachmentRenderTarget **rtOut)
{ {
return getRenderTarget(reinterpret_cast<RenderTargetD3D **>(rtOut)); return getRenderTarget(reinterpret_cast<RenderTargetD3D **>(rtOut));
......
...@@ -35,7 +35,8 @@ class RenderbufferD3D : public RenderbufferImpl ...@@ -35,7 +35,8 @@ class RenderbufferD3D : public RenderbufferImpl
gl::Error setStorageEGLImageTarget(egl::Image *image) override; gl::Error setStorageEGLImageTarget(egl::Image *image) override;
gl::Error getRenderTarget(RenderTargetD3D **outRenderTarget); gl::Error getRenderTarget(RenderTargetD3D **outRenderTarget);
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) override; FramebufferAttachmentRenderTarget **rtOut) override;
private: private:
......
...@@ -345,10 +345,11 @@ egl::Error SurfaceD3D::querySurfacePointerANGLE(EGLint attribute, void **value) ...@@ -345,10 +345,11 @@ egl::Error SurfaceD3D::querySurfacePointerANGLE(EGLint attribute, void **value)
return egl::Error(EGL_SUCCESS); return egl::Error(EGL_SUCCESS);
} }
gl::Error SurfaceD3D::getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error SurfaceD3D::getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) FramebufferAttachmentRenderTarget **rtOut)
{ {
if (target.binding() == GL_BACK) if (binding == GL_BACK)
{ {
*rtOut = mSwapChain->getColorRenderTarget(); *rtOut = mSwapChain->getColorRenderTarget();
} }
......
...@@ -53,7 +53,8 @@ class SurfaceD3D : public SurfaceImpl ...@@ -53,7 +53,8 @@ class SurfaceD3D : public SurfaceImpl
// Returns true if swapchain changed due to resize or interval update // Returns true if swapchain changed due to resize or interval update
bool checkForOutOfDateSwapChain(); bool checkForOutOfDateSwapChain();
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) override; FramebufferAttachmentRenderTarget **rtOut) override;
protected: protected:
......
...@@ -536,11 +536,12 @@ gl::Error TextureD3D::commitRegion(const gl::ImageIndex &index, const gl::Box &r ...@@ -536,11 +536,12 @@ gl::Error TextureD3D::commitRegion(const gl::ImageIndex &index, const gl::Box &r
return gl::NoError(); return gl::NoError();
} }
gl::Error TextureD3D::getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error TextureD3D::getAttachmentRenderTarget(GLenum /*binding*/,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) FramebufferAttachmentRenderTarget **rtOut)
{ {
RenderTargetD3D *rtD3D = nullptr; RenderTargetD3D *rtD3D = nullptr;
gl::Error error = getRenderTarget(target.textureIndex(), &rtD3D); gl::Error error = getRenderTarget(imageIndex, &rtD3D);
*rtOut = static_cast<FramebufferAttachmentRenderTarget *>(rtD3D); *rtOut = static_cast<FramebufferAttachmentRenderTarget *>(rtD3D);
return error; return error;
} }
......
...@@ -71,7 +71,8 @@ class TextureD3D : public TextureImpl ...@@ -71,7 +71,8 @@ class TextureD3D : public TextureImpl
TextureStorage *getStorage(); TextureStorage *getStorage();
ImageD3D *getBaseLevelImage() const; ImageD3D *getBaseLevelImage() const;
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) override; FramebufferAttachmentRenderTarget **rtOut) override;
void setBaseLevel(GLuint baseLevel) override; void setBaseLevel(GLuint baseLevel) override;
......
...@@ -43,7 +43,8 @@ gl::Error RenderbufferVk::setStorageEGLImageTarget(egl::Image *image) ...@@ -43,7 +43,8 @@ gl::Error RenderbufferVk::setStorageEGLImageTarget(egl::Image *image)
return gl::Error(GL_INVALID_OPERATION); return gl::Error(GL_INVALID_OPERATION);
} }
gl::Error RenderbufferVk::getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error RenderbufferVk::getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) FramebufferAttachmentRenderTarget **rtOut)
{ {
UNIMPLEMENTED(); UNIMPLEMENTED();
......
...@@ -28,7 +28,8 @@ class RenderbufferVk : public RenderbufferImpl ...@@ -28,7 +28,8 @@ class RenderbufferVk : public RenderbufferImpl
size_t height) override; size_t height) override;
gl::Error setStorageEGLImageTarget(egl::Image *image) override; gl::Error setStorageEGLImageTarget(egl::Image *image) override;
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) override; FramebufferAttachmentRenderTarget **rtOut) override;
}; };
......
...@@ -137,7 +137,8 @@ EGLint OffscreenSurfaceVk::getSwapBehavior() const ...@@ -137,7 +137,8 @@ EGLint OffscreenSurfaceVk::getSwapBehavior() const
} }
gl::Error OffscreenSurfaceVk::getAttachmentRenderTarget( gl::Error OffscreenSurfaceVk::getAttachmentRenderTarget(
const gl::FramebufferAttachment::Target & /*target*/, GLenum /*binding*/,
const gl::ImageIndex & /*imageIndex*/,
FramebufferAttachmentRenderTarget ** /*rtOut*/) FramebufferAttachmentRenderTarget ** /*rtOut*/)
{ {
UNREACHABLE(); UNREACHABLE();
...@@ -529,9 +530,9 @@ EGLint WindowSurfaceVk::getSwapBehavior() const ...@@ -529,9 +530,9 @@ EGLint WindowSurfaceVk::getSwapBehavior() const
return EGL_BUFFER_DESTROYED; return EGL_BUFFER_DESTROYED;
} }
gl::Error WindowSurfaceVk::getAttachmentRenderTarget( gl::Error WindowSurfaceVk::getAttachmentRenderTarget(GLenum /*binding*/,
const gl::FramebufferAttachment::Target & /*target*/, const gl::ImageIndex & /*target*/,
FramebufferAttachmentRenderTarget **rtOut) FramebufferAttachmentRenderTarget **rtOut)
{ {
*rtOut = &mRenderTarget; *rtOut = &mRenderTarget;
return gl::NoError(); return gl::NoError();
......
...@@ -43,7 +43,8 @@ class OffscreenSurfaceVk : public SurfaceImpl ...@@ -43,7 +43,8 @@ class OffscreenSurfaceVk : public SurfaceImpl
EGLint isPostSubBufferSupported() const override; EGLint isPostSubBufferSupported() const override;
EGLint getSwapBehavior() const override; EGLint getSwapBehavior() const override;
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) override; FramebufferAttachmentRenderTarget **rtOut) override;
private: private:
...@@ -79,7 +80,8 @@ class WindowSurfaceVk : public SurfaceImpl, public ResourceVk ...@@ -79,7 +80,8 @@ class WindowSurfaceVk : public SurfaceImpl, public ResourceVk
EGLint isPostSubBufferSupported() const override; EGLint isPostSubBufferSupported() const override;
EGLint getSwapBehavior() const override; EGLint getSwapBehavior() const override;
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) override; FramebufferAttachmentRenderTarget **rtOut) override;
gl::ErrorOrResult<vk::Framebuffer *> getCurrentFramebuffer( gl::ErrorOrResult<vk::Framebuffer *> getCurrentFramebuffer(
......
...@@ -142,7 +142,8 @@ void TextureVk::releaseTexImage() ...@@ -142,7 +142,8 @@ void TextureVk::releaseTexImage()
UNIMPLEMENTED(); UNIMPLEMENTED();
} }
gl::Error TextureVk::getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error TextureVk::getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) FramebufferAttachmentRenderTarget **rtOut)
{ {
UNIMPLEMENTED(); UNIMPLEMENTED();
......
...@@ -88,7 +88,8 @@ class TextureVk : public TextureImpl ...@@ -88,7 +88,8 @@ class TextureVk : public TextureImpl
void bindTexImage(egl::Surface *surface) override; void bindTexImage(egl::Surface *surface) override;
void releaseTexImage() override; void releaseTexImage() override;
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error getAttachmentRenderTarget(GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) override; FramebufferAttachmentRenderTarget **rtOut) override;
void syncState(const gl::Texture::DirtyBits &dirtyBits) override; void syncState(const gl::Texture::DirtyBits &dirtyBits) override;
......
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