blob: d87747b321fced41aff5784667563cfbc78df272 [file] [log] [blame]
Jamie Madill9e54b5a2016-05-25 12:57:39 -04001//
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.cpp:
7// Implements the class methods for RenderbufferVk.
8//
9
10#include "libANGLE/renderer/vulkan/RenderbufferVk.h"
11
Jamie Madill12eb3d72018-02-14 12:34:45 -050012#include "libANGLE/Context.h"
13#include "libANGLE/renderer/vulkan/ContextVk.h"
14#include "libANGLE/renderer/vulkan/RendererVk.h"
Jamie Madill9e54b5a2016-05-25 12:57:39 -040015
16namespace rx
17{
18
Jamie Madill12eb3d72018-02-14 12:34:45 -050019RenderbufferVk::RenderbufferVk() : RenderbufferImpl(), mRequiredSize(0)
Jamie Madill9e54b5a2016-05-25 12:57:39 -040020{
21}
22
23RenderbufferVk::~RenderbufferVk()
24{
25}
26
Jamie Madill12eb3d72018-02-14 12:34:45 -050027gl::Error RenderbufferVk::onDestroy(const gl::Context *context)
28{
29 ContextVk *contextVk = vk::GetImpl(context);
30 RendererVk *renderer = contextVk->getRenderer();
31
32 renderer->releaseResource(*this, &mImage);
33 renderer->releaseResource(*this, &mDeviceMemory);
34 return gl::NoError();
35}
36
Jamie Madillea84f6f2017-09-20 13:20:30 -040037gl::Error RenderbufferVk::setStorage(const gl::Context *context,
38 GLenum internalformat,
39 size_t width,
40 size_t height)
Jamie Madill9e54b5a2016-05-25 12:57:39 -040041{
Jamie Madill12eb3d72018-02-14 12:34:45 -050042 ContextVk *contextVk = vk::GetImpl(context);
Jamie Madill57fbfd82018-02-14 12:45:34 -050043 RendererVk *renderer = contextVk->getRenderer();
44 const vk::Format &vkFormat = renderer->getFormat(internalformat);
Jamie Madill12eb3d72018-02-14 12:34:45 -050045
46 VkImageUsageFlags usage =
47 (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
48 VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT);
49
50 VkImageCreateInfo imageInfo;
51 imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
52 imageInfo.pNext = nullptr;
53 imageInfo.flags = 0;
54 imageInfo.imageType = VK_IMAGE_TYPE_2D;
55 imageInfo.format = vkFormat.vkTextureFormat;
56 imageInfo.extent.width = static_cast<uint32_t>(width);
57 imageInfo.extent.height = static_cast<uint32_t>(height);
58 imageInfo.extent.depth = 1;
59 imageInfo.mipLevels = 1;
60 imageInfo.arrayLayers = 1;
61 imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
62 imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
63 imageInfo.usage = usage;
64 imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
65 imageInfo.queueFamilyIndexCount = 0;
66 imageInfo.pQueueFamilyIndices = nullptr;
67 imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
68
69 ANGLE_TRY(mImage.init(contextVk->getDevice(), imageInfo));
70
71 VkMemoryPropertyFlags flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
Jamie Madill57fbfd82018-02-14 12:45:34 -050072 ANGLE_TRY(vk::AllocateImageMemory(renderer, flags, &mImage, &mDeviceMemory, &mRequiredSize));
Jamie Madill12eb3d72018-02-14 12:34:45 -050073 return gl::NoError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040074}
75
Jamie Madillea84f6f2017-09-20 13:20:30 -040076gl::Error RenderbufferVk::setStorageMultisample(const gl::Context *context,
77 size_t samples,
Jamie Madill9e54b5a2016-05-25 12:57:39 -040078 GLenum internalformat,
79 size_t width,
80 size_t height)
81{
82 UNIMPLEMENTED();
Yuly Novikovc4d18aa2017-03-09 18:45:02 -050083 return gl::InternalError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040084}
85
Jamie Madillea84f6f2017-09-20 13:20:30 -040086gl::Error RenderbufferVk::setStorageEGLImageTarget(const gl::Context *context, egl::Image *image)
Jamie Madill9e54b5a2016-05-25 12:57:39 -040087{
88 UNIMPLEMENTED();
Yuly Novikovc4d18aa2017-03-09 18:45:02 -050089 return gl::InternalError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040090}
91
Jamie Madill4928b7c2017-06-20 12:57:39 -040092gl::Error RenderbufferVk::getAttachmentRenderTarget(const gl::Context *context,
93 GLenum binding,
Jamie Madill4fd95d52017-04-05 11:22:18 -040094 const gl::ImageIndex &imageIndex,
Jamie Madill9e54b5a2016-05-25 12:57:39 -040095 FramebufferAttachmentRenderTarget **rtOut)
96{
97 UNIMPLEMENTED();
Yuly Novikovc4d18aa2017-03-09 18:45:02 -050098 return gl::InternalError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040099}
100
Jamie Madill05b35b22017-10-03 09:01:44 -0400101gl::Error RenderbufferVk::initializeContents(const gl::Context *context,
102 const gl::ImageIndex &imageIndex)
103{
104 UNIMPLEMENTED();
105 return gl::NoError();
106}
107
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400108} // namespace rx