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 void setAttachment(ImageView *imageView, uint32_t index);
36 ImageView *getAttachment(uint32_t index) const;
37 void resolve(const RenderPass *renderPass, uint32_t subpassIndex);
38
getExtent() const39 const VkExtent3D &getExtent() const { return extent; }
40
41 private:
42 uint32_t attachmentCount = 0;
43 ImageView **attachments = nullptr;
44 const VkExtent3D extent = {};
45 };
46
Cast(VkFramebuffer object)47 static inline Framebuffer *Cast(VkFramebuffer object)
48 {
49 return Framebuffer::Cast(object);
50 }
51
52 } // namespace vk
53
54 #endif // VK_FRAMEBUFFER_HPP_
55