blob: 29a572c1d5e8d85822a6c45395f52a8e90acc284 [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);
43 const vk::Format &vkFormat = contextVk->getRenderer()->getFormat(internalformat);
44
45 VkImageUsageFlags usage =
46 (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
47 VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT);
48
49 VkImageCreateInfo imageInfo;
50 imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
51 imageInfo.pNext = nullptr;
52 imageInfo.flags = 0;
53 imageInfo.imageType = VK_IMAGE_TYPE_2D;
54 imageInfo.format = vkFormat.vkTextureFormat;
55 imageInfo.extent.width = static_cast<uint32_t>(width);
56 imageInfo.extent.height = static_cast<uint32_t>(height);
57 imageInfo.extent.depth = 1;
58 imageInfo.mipLevels = 1;
59 imageInfo.arrayLayers = 1;
60 imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
61 imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
62 imageInfo.usage = usage;
63 imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
64 imageInfo.queueFamilyIndexCount = 0;
65 imageInfo.pQueueFamilyIndices = nullptr;
66 imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
67
68 ANGLE_TRY(mImage.init(contextVk->getDevice(), imageInfo));
69
70 VkMemoryPropertyFlags flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
71 ANGLE_TRY(vk::AllocateImageMemory(contextVk, flags, &mImage, &mDeviceMemory, &mRequiredSize));
72 return gl::NoError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040073}
74
Jamie Madillea84f6f2017-09-20 13:20:30 -040075gl::Error RenderbufferVk::setStorageMultisample(const gl::Context *context,
76 size_t samples,
Jamie Madill9e54b5a2016-05-25 12:57:39 -040077 GLenum internalformat,
78 size_t width,
79 size_t height)
80{
81 UNIMPLEMENTED();
Yuly Novikovc4d18aa2017-03-09 18:45:02 -050082 return gl::InternalError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040083}
84
Jamie Madillea84f6f2017-09-20 13:20:30 -040085gl::Error RenderbufferVk::setStorageEGLImageTarget(const gl::Context *context, egl::Image *image)
Jamie Madill9e54b5a2016-05-25 12:57:39 -040086{
87 UNIMPLEMENTED();
Yuly Novikovc4d18aa2017-03-09 18:45:02 -050088 return gl::InternalError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040089}
90
Jamie Madill4928b7c2017-06-20 12:57:39 -040091gl::Error RenderbufferVk::getAttachmentRenderTarget(const gl::Context *context,
92 GLenum binding,
Jamie Madill4fd95d52017-04-05 11:22:18 -040093 const gl::ImageIndex &imageIndex,
Jamie Madill9e54b5a2016-05-25 12:57:39 -040094 FramebufferAttachmentRenderTarget **rtOut)
95{
96 UNIMPLEMENTED();
Yuly Novikovc4d18aa2017-03-09 18:45:02 -050097 return gl::InternalError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040098}
99
Jamie Madill05b35b22017-10-03 09:01:44 -0400100gl::Error RenderbufferVk::initializeContents(const gl::Context *context,
101 const gl::ImageIndex &imageIndex)
102{
103 UNIMPLEMENTED();
104 return gl::NoError();
105}
106
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400107} // namespace rx