1 // Copyright 2018 The SwiftShader Authors. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #ifndef VK_FRAMEBUFFER_HPP_
16 #define VK_FRAMEBUFFER_HPP_
17
18 #include "VkObject.hpp"
19
20 namespace vk {
21
22 class ImageView;
23 class RenderPass;
24
25 class Framebuffer : public Object<Framebuffer, VkFramebuffer>
26 {
27 public:
28 Framebuffer(const VkFramebufferCreateInfo *pCreateInfo, void *mem);
29 void destroy(const VkAllocationCallbacks *pAllocator);
30
31 void clear(const RenderPass *renderPass, uint32_t clearValueCount, const VkClearValue *pClearValues, const VkRect2D &renderArea);
32 void clearAttachment(const RenderPass *renderPass, uint32_t subpassIndex, const VkClearAttachment &attachment, const VkClearRect &rect);
33
34 static size_t ComputeRequiredAllocationSize(const VkFramebufferCreateInfo *pCreateInfo);
35 ImageView *getAttachment(uint32_t index) const;
36 void resolve(const RenderPass *renderPass, uint32_t subpassIndex);
37
getExtent() const38 const VkExtent3D &getExtent() const { return extent; }
39
40 private:
41 uint32_t attachmentCount = 0;
42 ImageView **attachments = nullptr;
43 const VkExtent3D extent = {};
44 };
45
Cast(VkFramebuffer object)46 static inline Framebuffer *Cast(VkFramebuffer object)
47 {
48 return Framebuffer::Cast(object);
49 }
50
51 } // namespace vk
52
53 #endif // VK_FRAMEBUFFER_HPP_
54