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 @@ ...@@ -9,12 +9,14 @@
#include "libANGLE/renderer/vulkan/RenderbufferVk.h" #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 namespace rx
{ {
RenderbufferVk::RenderbufferVk() : RenderbufferImpl() RenderbufferVk::RenderbufferVk() : RenderbufferImpl(), mRequiredSize(0)
{ {
} }
...@@ -22,13 +24,52 @@ RenderbufferVk::~RenderbufferVk() ...@@ -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, gl::Error RenderbufferVk::setStorage(const gl::Context *context,
GLenum internalformat, GLenum internalformat,
size_t width, size_t width,
size_t height) size_t height)
{ {
UNIMPLEMENTED(); ContextVk *contextVk = vk::GetImpl(context);
return gl::InternalError(); 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, gl::Error RenderbufferVk::setStorageMultisample(const gl::Context *context,
......
...@@ -11,16 +11,19 @@ ...@@ -11,16 +11,19 @@
#define LIBANGLE_RENDERER_VULKAN_RENDERBUFFERVK_H_ #define LIBANGLE_RENDERER_VULKAN_RENDERBUFFERVK_H_
#include "libANGLE/renderer/RenderbufferImpl.h" #include "libANGLE/renderer/RenderbufferImpl.h"
#include "libANGLE/renderer/vulkan/vk_utils.h"
namespace rx namespace rx
{ {
class RenderbufferVk : public RenderbufferImpl class RenderbufferVk : public RenderbufferImpl, public ResourceVk
{ {
public: public:
RenderbufferVk(); RenderbufferVk();
~RenderbufferVk() override; ~RenderbufferVk() override;
gl::Error onDestroy(const gl::Context *context) override;
gl::Error setStorage(const gl::Context *context, gl::Error setStorage(const gl::Context *context,
GLenum internalformat, GLenum internalformat,
size_t width, size_t width,
...@@ -39,6 +42,11 @@ class RenderbufferVk : public RenderbufferImpl ...@@ -39,6 +42,11 @@ class RenderbufferVk : public RenderbufferImpl
gl::Error initializeContents(const gl::Context *context, gl::Error initializeContents(const gl::Context *context,
const gl::ImageIndex &imageIndex) override; const gl::ImageIndex &imageIndex) override;
private:
vk::Image mImage;
vk::DeviceMemory mDeviceMemory;
size_t mRequiredSize;
}; };
} // namespace rx } // namespace rx
......
...@@ -741,6 +741,15 @@ TEST_P(SimpleOperationTest, RenderToTexture) ...@@ -741,6 +741,15 @@ TEST_P(SimpleOperationTest, RenderToTexture)
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green); 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. // Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
ANGLE_INSTANTIATE_TEST(SimpleOperationTest, ANGLE_INSTANTIATE_TEST(SimpleOperationTest,
ES2_D3D9(), 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