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

Side by Side 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, 8 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "gpu/vulkan/tests/native_window.h"
6 #include "gpu/vulkan/vulkan_command_buffer.h"
7 #include "gpu/vulkan/vulkan_render_pass.h"
8 #include "gpu/vulkan/vulkan_surface.h"
9 #include "gpu/vulkan/vulkan_swap_chain.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/gfx/geometry/rect.h"
12
13 // This file tests basic vulkan initialization steps.
14
15 namespace gpu {
16
17 class BasicVulkanTest : public testing::Test {
18 public:
19 void SetUp() override {
20 const gfx::Rect kDefaultBounds(10, 10, 100, 100);
21 window_ = CreateNativeWindow(kDefaultBounds);
22 }
23
24 void TearDown() override {
25 DestroyNativeWindow(window_);
26 window_ = gfx::kNullAcceleratedWidget;
27 }
28
29 gfx::AcceleratedWidget window() const { return window_; }
30
31 private:
32 gfx::AcceleratedWidget window_ = gfx::kNullAcceleratedWidget;
33 };
34
35 TEST_F(BasicVulkanTest, BasicVulkanSurface) {
36 scoped_ptr<VulkanSurface> surface =
37 VulkanSurface::CreateViewSurface(window());
38 EXPECT_TRUE(surface);
39 EXPECT_TRUE(surface->Initialize(VulkanSurface::DEFAULT_SURFACE_FORMAT));
40 surface->Destroy();
41 }
42
43 TEST_F(BasicVulkanTest, EmptyVulkanSwaps) {
44 scoped_ptr<VulkanSurface> surface =
45 VulkanSurface::CreateViewSurface(window());
46 ASSERT_TRUE(surface);
47 ASSERT_TRUE(surface->Initialize(VulkanSurface::DEFAULT_SURFACE_FORMAT));
48
49 // First swap is a special case, call it first to get better errors.
50 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers());
51
52 // Also make sure we can swap multiple times.
53 for (int i = 0; i < 10; ++i) {
54 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers());
55 }
56 surface->Finish();
57 surface->Destroy();
58 }
59
60 TEST_F(BasicVulkanTest, BasicRenderPass) {
61 scoped_ptr<VulkanSurface> surface =
62 VulkanSurface::CreateViewSurface(window());
63 ASSERT_TRUE(surface);
64 ASSERT_TRUE(surface->Initialize(VulkanSurface::DEFAULT_SURFACE_FORMAT));
65 VulkanSwapChain* swap_chain = surface->GetSwapChain();
66
67 VulkanRenderPass::RenderPassData render_pass_data;
68
69 // There is a single attachment which transitions present -> color -> present.
70 render_pass_data.attachments.resize(1);
71 VulkanRenderPass::AttachmentData* attachment =
72 &render_pass_data.attachments[0];
73 attachment->attachment_type =
74 VulkanRenderPass::AttachmentType::ATTACHMENT_TYPE_SWAP_IMAGE;
75 attachment->sample_count = VK_SAMPLE_COUNT_1_BIT;
76 attachment->load_op = VK_ATTACHMENT_LOAD_OP_LOAD;
77 attachment->store_op = VK_ATTACHMENT_STORE_OP_STORE;
78 attachment->stencil_load_op = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
79 attachment->stencil_store_op = VK_ATTACHMENT_STORE_OP_DONT_CARE;
80 attachment->start_layout =
81 VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_TYPE_PRESENT;
82 attachment->end_layout =
83 VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_TYPE_PRESENT;
84
85 // Single subpass.
86 render_pass_data.subpass_datas.resize(1);
87 VulkanRenderPass::SubpassData* subpass_data =
88 &render_pass_data.subpass_datas[0];
89
90 // Our subpass will handle the transition to Color.
91 subpass_data->subpass_attachments.resize(1);
92 VulkanRenderPass::SubpassAttachment* subpass_attachment =
93 &subpass_data->subpass_attachments[0];
94 subpass_attachment->attachment_index = 0;
95 subpass_attachment->subpass_layout =
96 VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_TYPE_IMAGE_VIEW;
97
98 ASSERT_TRUE(render_pass_data.ValidateData(swap_chain));
99
100 VulkanRenderPass render_pass;
101 EXPECT_TRUE(render_pass.Initialize(swap_chain, render_pass_data));
102
103 for (int i = 0; i < 10; ++i) {
104 VulkanCommandBuffer* command_buffer = swap_chain->GetCurrentCommandBuffer();
105 {
106 ScopedSingleUseCommandBufferRecorder recorder(*command_buffer);
107
108 render_pass.BeginRenderPass(recorder, true);
109 render_pass.EndRenderPass(recorder);
110 }
111
112 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers());
113 }
114
115 surface->Finish();
116 render_pass.Destroy();
117 surface->Destroy();
118 }
119
120 } // namespace gpu
OLDNEW
« 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