Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Unified Diff: gpu/vulkan/tests/vulkan_test.cc

Issue 1776453003: Added initial implementation of Vulkan Render Passes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gn_vulkan
Patch Set: Adding logging/macros headers Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/vulkan/tests/native_window_x11.cc ('k') | gpu/vulkan/tests/vulkan_tests_main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/vulkan/tests/vulkan_test.cc
diff --git a/gpu/vulkan/tests/vulkan_test.cc b/gpu/vulkan/tests/vulkan_test.cc
new file mode 100644
index 0000000000000000000000000000000000000000..1d1fd738dabcaed32357b21d410d3f08adf30072
--- /dev/null
+++ b/gpu/vulkan/tests/vulkan_test.cc
@@ -0,0 +1,120 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/vulkan/tests/native_window.h"
+#include "gpu/vulkan/vulkan_command_buffer.h"
+#include "gpu/vulkan/vulkan_render_pass.h"
+#include "gpu/vulkan/vulkan_surface.h"
+#include "gpu/vulkan/vulkan_swap_chain.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/geometry/rect.h"
+
+// This file tests basic vulkan initialization steps.
+
+namespace gpu {
+
+class BasicVulkanTest : public testing::Test {
+ public:
+ void SetUp() override {
+ const gfx::Rect kDefaultBounds(10, 10, 100, 100);
+ window_ = CreateNativeWindow(kDefaultBounds);
+ }
+
+ void TearDown() override {
+ DestroyNativeWindow(window_);
+ window_ = gfx::kNullAcceleratedWidget;
+ }
+
+ gfx::AcceleratedWidget window() const { return window_; }
+
+ private:
+ gfx::AcceleratedWidget window_ = gfx::kNullAcceleratedWidget;
+};
+
+TEST_F(BasicVulkanTest, BasicVulkanSurface) {
+ scoped_ptr<VulkanSurface> surface =
+ VulkanSurface::CreateViewSurface(window());
+ EXPECT_TRUE(surface);
+ EXPECT_TRUE(surface->Initialize(VulkanSurface::DEFAULT_SURFACE_FORMAT));
+ surface->Destroy();
+}
+
+TEST_F(BasicVulkanTest, EmptyVulkanSwaps) {
+ scoped_ptr<VulkanSurface> surface =
+ VulkanSurface::CreateViewSurface(window());
+ ASSERT_TRUE(surface);
+ ASSERT_TRUE(surface->Initialize(VulkanSurface::DEFAULT_SURFACE_FORMAT));
+
+ // First swap is a special case, call it first to get better errors.
+ EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers());
+
+ // Also make sure we can swap multiple times.
+ for (int i = 0; i < 10; ++i) {
+ EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers());
+ }
+ surface->Finish();
+ surface->Destroy();
+}
+
+TEST_F(BasicVulkanTest, BasicRenderPass) {
+ scoped_ptr<VulkanSurface> surface =
+ VulkanSurface::CreateViewSurface(window());
+ ASSERT_TRUE(surface);
+ ASSERT_TRUE(surface->Initialize(VulkanSurface::DEFAULT_SURFACE_FORMAT));
+ VulkanSwapChain* swap_chain = surface->GetSwapChain();
+
+ VulkanRenderPass::RenderPassData render_pass_data;
+
+ // There is a single attachment which transitions present -> color -> present.
+ render_pass_data.attachments.resize(1);
+ VulkanRenderPass::AttachmentData* attachment =
+ &render_pass_data.attachments[0];
+ attachment->attachment_type =
+ VulkanRenderPass::AttachmentType::ATTACHMENT_TYPE_SWAP_IMAGE;
+ attachment->sample_count = VK_SAMPLE_COUNT_1_BIT;
+ attachment->load_op = VK_ATTACHMENT_LOAD_OP_LOAD;
+ attachment->store_op = VK_ATTACHMENT_STORE_OP_STORE;
+ attachment->stencil_load_op = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
+ attachment->stencil_store_op = VK_ATTACHMENT_STORE_OP_DONT_CARE;
+ attachment->start_layout =
+ VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_TYPE_PRESENT;
+ attachment->end_layout =
+ VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_TYPE_PRESENT;
+
+ // Single subpass.
+ render_pass_data.subpass_datas.resize(1);
+ VulkanRenderPass::SubpassData* subpass_data =
+ &render_pass_data.subpass_datas[0];
+
+ // Our subpass will handle the transition to Color.
+ subpass_data->subpass_attachments.resize(1);
+ VulkanRenderPass::SubpassAttachment* subpass_attachment =
+ &subpass_data->subpass_attachments[0];
+ subpass_attachment->attachment_index = 0;
+ subpass_attachment->subpass_layout =
+ VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_TYPE_IMAGE_VIEW;
+
+ ASSERT_TRUE(render_pass_data.ValidateData(swap_chain));
+
+ VulkanRenderPass render_pass;
+ EXPECT_TRUE(render_pass.Initialize(swap_chain, render_pass_data));
+
+ for (int i = 0; i < 10; ++i) {
+ VulkanCommandBuffer* command_buffer = swap_chain->GetCurrentCommandBuffer();
+ {
+ ScopedSingleUseCommandBufferRecorder recorder(*command_buffer);
+
+ render_pass.BeginRenderPass(recorder, true);
+ render_pass.EndRenderPass(recorder);
+ }
+
+ EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers());
+ }
+
+ surface->Finish();
+ render_pass.Destroy();
+ surface->Destroy();
+}
+
+} // namespace gpu
« no previous file with comments | « gpu/vulkan/tests/native_window_x11.cc ('k') | gpu/vulkan/tests/vulkan_tests_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698