summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp')
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp77
1 files changed, 53 insertions, 24 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp
index 991801a091..d799e0b992 100644
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp
@@ -27,12 +27,25 @@ RenderbufferD3D::~RenderbufferD3D()
mImage = nullptr;
}
-gl::Error RenderbufferD3D::setStorage(GLenum internalformat, size_t width, size_t height)
+gl::Error RenderbufferD3D::onDestroy(const gl::Context *context)
{
- return setStorageMultisample(0, internalformat, width, height);
+ deleteRenderTarget(context);
+ return gl::NoError();
}
-gl::Error RenderbufferD3D::setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height)
+gl::Error RenderbufferD3D::setStorage(const gl::Context *context,
+ GLenum internalformat,
+ size_t width,
+ size_t height)
+{
+ return setStorageMultisample(context, 0, internalformat, width, height);
+}
+
+gl::Error RenderbufferD3D::setStorageMultisample(const gl::Context *context,
+ size_t samples,
+ GLenum internalformat,
+ size_t width,
+ size_t height)
{
// If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
@@ -48,54 +61,70 @@ gl::Error RenderbufferD3D::setStorageMultisample(size_t samples, GLenum internal
// the specified storage.
// Because ES 3.0 already knows the exact number of supported samples, it would already have been
// validated and generated GL_INVALID_VALUE.
- const gl::TextureCaps &formatCaps = mRenderer->getRendererTextureCaps().get(creationFormat);
+ const gl::TextureCaps &formatCaps = mRenderer->getNativeTextureCaps().get(creationFormat);
if (samples > formatCaps.getMaxSamples())
{
- return gl::Error(GL_OUT_OF_MEMORY, "Renderbuffer format does not support %u samples, %u is the maximum.",
- samples, formatCaps.getMaxSamples());
+ return gl::OutOfMemory() << "Renderbuffer format does not support " << samples
+ << " samples, " << formatCaps.getMaxSamples()
+ << " is the maximum.";
}
- RenderTargetD3D *newRT = NULL;
- gl::Error error =
- mRenderer->createRenderTarget(static_cast<int>(width), static_cast<int>(height),
- creationFormat, static_cast<GLsizei>(samples), &newRT);
- if (error.isError())
- {
- return error;
- }
+ RenderTargetD3D *newRT = nullptr;
+ ANGLE_TRY(mRenderer->createRenderTarget(static_cast<int>(width), static_cast<int>(height),
+ creationFormat, static_cast<GLsizei>(samples), &newRT));
- SafeDelete(mRenderTarget);
+ deleteRenderTarget(context);
mImage = nullptr;
mRenderTarget = newRT;
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
-gl::Error RenderbufferD3D::setStorageEGLImageTarget(egl::Image *image)
+gl::Error RenderbufferD3D::setStorageEGLImageTarget(const gl::Context *context, egl::Image *image)
{
mImage = GetImplAs<EGLImageD3D>(image);
- SafeDelete(mRenderTarget);
+ deleteRenderTarget(context);
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
-gl::Error RenderbufferD3D::getRenderTarget(RenderTargetD3D **outRenderTarget)
+gl::Error RenderbufferD3D::getRenderTarget(const gl::Context *context,
+ RenderTargetD3D **outRenderTarget)
{
if (mImage)
{
- return mImage->getRenderTarget(outRenderTarget);
+ return mImage->getRenderTarget(context, outRenderTarget);
}
else
{
*outRenderTarget = mRenderTarget;
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
}
-gl::Error RenderbufferD3D::getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
+gl::Error RenderbufferD3D::getAttachmentRenderTarget(const gl::Context *context,
+ GLenum /*binding*/,
+ const gl::ImageIndex & /*imageIndex*/,
FramebufferAttachmentRenderTarget **rtOut)
{
- return getRenderTarget(reinterpret_cast<RenderTargetD3D **>(rtOut));
+ return getRenderTarget(context, reinterpret_cast<RenderTargetD3D **>(rtOut));
}
+void RenderbufferD3D::deleteRenderTarget(const gl::Context *context)
+{
+ if (mRenderTarget)
+ {
+ mRenderTarget->signalDirty(context);
+ SafeDelete(mRenderTarget);
+ }
}
+
+gl::Error RenderbufferD3D::initializeContents(const gl::Context *context,
+ const gl::ImageIndex &imageIndex)
+{
+ RenderTargetD3D *renderTarget = nullptr;
+ ANGLE_TRY(getRenderTarget(context, &renderTarget));
+ return mRenderer->initRenderTarget(renderTarget);
+}
+
+} // namespace rx