Commit 12eb3d74 by Jamie Madill Committed by Commit Bot

Vulkan: Implement basic Renderbuffer creation.

Bug: angleproject:2347 Change-Id: I56edfde2dbc020d5c792cc4f107aa4b9d6b71840 Reviewed-on: https://chromium-review.googlesource.com/905895Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org> Reviewed-by: 's avatarLuc Ferron <lucferron@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent ee305913
......@@ -9,12 +9,14 @@
#include "libANGLE/renderer/vulkan/RenderbufferVk.h"
#include "common/debug.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/vulkan/ContextVk.h"
#include "libANGLE/renderer/vulkan/RendererVk.h"
namespace rx
{
RenderbufferVk::RenderbufferVk() : RenderbufferImpl()
RenderbufferVk::RenderbufferVk() : RenderbufferImpl(), mRequiredSize(0)
{
}
......@@ -22,13 +24,52 @@ RenderbufferVk::~RenderbufferVk()
{
}
gl::Error RenderbufferVk::onDestroy(const gl::Context *context)
{
ContextVk *contextVk = vk::GetImpl(context);
RendererVk *renderer = contextVk->getRenderer();
renderer->releaseResource(*this, &mImage);
renderer->releaseResource(*this, &mDeviceMemory);
return gl::NoError();
}
gl::Error RenderbufferVk::setStorage(const gl::Context *context,
GLenum internalformat,
size_t width,
size_t height)
{
UNIMPLEMENTED();
return gl::InternalError();
ContextVk *contextVk = vk::GetImpl(context);
const vk::Format &vkFormat = contextVk->getRenderer()->getFormat(internalformat);
VkImageUsageFlags usage =
(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT);
VkImageCreateInfo imageInfo;
imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
imageInfo.pNext = nullptr;
imageInfo.flags = 0;
imageInfo.imageType = VK_IMAGE_TYPE_2D;
imageInfo.format = vkFormat.vkTextureFormat;
imageInfo.extent.width = static_cast<uint32_t>(width);
imageInfo.extent.height = static_cast<uint32_t>(height);
imageInfo.extent.depth = 1;
imageInfo.mipLevels = 1;
imageInfo.arrayLayers = 1;
imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
imageInfo.usage = usage;
imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
imageInfo.queueFamilyIndexCount = 0;
imageInfo.pQueueFamilyIndices = nullptr;
imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
ANGLE_TRY(mImage.init(contextVk->getDevice(), imageInfo));
VkMemoryPropertyFlags flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
ANGLE_TRY(vk::AllocateImageMemory(contextVk, flags, &mImage, &mDeviceMemory, &mRequiredSize));
return gl::NoError();
}
gl::Error RenderbufferVk::setStorageMultisample(const gl::Context *context,
......
......@@ -11,16 +11,19 @@
#define LIBANGLE_RENDERER_VULKAN_RENDERBUFFERVK_H_
#include "libANGLE/renderer/RenderbufferImpl.h"
#include "libANGLE/renderer/vulkan/vk_utils.h"
namespace rx
{
class RenderbufferVk : public RenderbufferImpl
class RenderbufferVk : public RenderbufferImpl, public ResourceVk
{
public:
RenderbufferVk();
~RenderbufferVk() override;
gl::Error onDestroy(const gl::Context *context) override;
gl::Error setStorage(const gl::Context *context,
GLenum internalformat,
size_t width,
......@@ -39,6 +42,11 @@ class RenderbufferVk : public RenderbufferImpl
gl::Error initializeContents(const gl::Context *context,
const gl::ImageIndex &imageIndex) override;
private:
vk::Image mImage;
vk::DeviceMemory mDeviceMemory;
size_t mRequiredSize;
};
} // namespace rx
......
......@@ -741,6 +741,15 @@ TEST_P(SimpleOperationTest, RenderToTexture)
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
}
// Create a simple basic Renderbuffer.
TEST_P(SimpleOperationTest, CreateRenderbuffer)
{
GLRenderbuffer renderbuffer;
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, 16, 16);
ASSERT_GL_NO_ERROR();
}
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
ANGLE_INSTANTIATE_TEST(SimpleOperationTest,
ES2_D3D9(),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment