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 // RenderbufferVk.h: 7 // Defines the class interface for RenderbufferVk, implementing RenderbufferImpl. 8 // 9 10 #ifndef LIBANGLE_RENDERER_VULKAN_RENDERBUFFERVK_H_ 11 #define LIBANGLE_RENDERER_VULKAN_RENDERBUFFERVK_H_ 12 13 #include "libANGLE/renderer/RenderbufferImpl.h" 14 #include "libANGLE/renderer/vulkan/RenderTargetVk.h" 15 #include "libANGLE/renderer/vulkan/vk_helpers.h" 16 17 namespace rx 18 { 19 20 class RenderbufferVk : public RenderbufferImpl 21 { 22 public: 23 RenderbufferVk(const gl::RenderbufferState &state); 24 ~RenderbufferVk() override; 25 26 void onDestroy(const gl::Context *context) override; 27 28 angle::Result setStorage(const gl::Context *context, 29 GLenum internalformat, 30 size_t width, 31 size_t height) override; 32 angle::Result setStorageMultisample(const gl::Context *context, 33 size_t samples, 34 GLenum internalformat, 35 size_t width, 36 size_t height) override; 37 angle::Result setStorageEGLImageTarget(const gl::Context *context, egl::Image *image) override; 38 39 angle::Result getAttachmentRenderTarget(const gl::Context *context, 40 GLenum binding, 41 const gl::ImageIndex &imageIndex, 42 GLsizei samples, 43 FramebufferAttachmentRenderTarget **rtOut) override; 44 45 angle::Result initializeContents(const gl::Context *context, 46 const gl::ImageIndex &imageIndex) override; 47 getImage()48 vk::ImageHelper *getImage() const { return mImage; } 49 void releaseOwnershipOfImage(const gl::Context *context); 50 51 GLenum getColorReadFormat(const gl::Context *context) override; 52 GLenum getColorReadType(const gl::Context *context) override; 53 54 angle::Result getRenderbufferImage(const gl::Context *context, 55 const gl::PixelPackState &packState, 56 gl::Buffer *packBuffer, 57 GLenum format, 58 GLenum type, 59 void *pixels) override; 60 61 private: 62 void releaseAndDeleteImage(ContextVk *contextVk); 63 void releaseImage(ContextVk *contextVk); 64 65 angle::Result setStorageImpl(const gl::Context *context, 66 size_t samples, 67 GLenum internalformat, 68 size_t width, 69 size_t height); 70 71 const gl::InternalFormat &getImplementationSizedFormat() const; 72 73 bool mOwnsImage; 74 vk::ImageHelper *mImage; 75 vk::ImageViewHelper mImageViews; 76 RenderTargetVk mRenderTarget; 77 }; 78 79 } // namespace rx 80 81 #endif // LIBANGLE_RENDERER_VULKAN_RENDERBUFFERVK_H_ 82