• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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