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

Side by Side Diff: gpu/vulkan/vulkan_command_buffer.h

Issue 1776453003: Added initial implementation of Vulkan Render Passes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gn_vulkan
Patch Set: Layout transitions done through render passes 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 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 #ifndef GPU_VULKAN_VULKAN_COMMAND_BUFFER_H_
6 #define GPU_VULKAN_VULKAN_COMMAND_BUFFER_H_
7
8 #include <vulkan/vulkan.h>
9
10 #include "base/macros.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "gpu/vulkan/vulkan_export.h"
13
14 namespace gpu {
15
16 class VulkanCommandPool;
17
18 class VULKAN_EXPORT VulkanCommandBuffer {
19 public:
20 VulkanCommandBuffer(VulkanCommandPool* command_pool, bool primary);
21 ~VulkanCommandBuffer();
22
23 bool Initialize();
24 void Destroy();
25
26 // Submit primary command buffer to the queue.
27 bool Submit(VkQueue queue,
28 uint32_t num_wait_semaphores,
29 VkSemaphore* wait_semaphores,
30 uint32_t num_signal_semaphores,
31 VkSemaphore* signal_semaphores);
32
33 // Enqueue secondary command buffer within a primary command buffer.
34 void Enqueue(VkCommandBuffer primary_command_buffer);
35
36 void Clear();
37
38 private:
39 friend class CommandBufferRecorderBase;
40
41 enum RecordType {
42 // Nothing has been recorded yet.
43 RECORD_TYPE_EMPTY,
44
45 // Recorded for single use, will be reset upon submission.
46 RECORD_TYPE_SINGLE_USE,
47
48 // Recording for multi use, once submitted it can't be modified until reset.
49 RECORD_TYPE_MULTI_USE,
50
51 // Recorded for multi-use, can no longer be modified unless reset.
52 RECORD_TYPE_RECORDED,
53
54 // Dirty, should be cleared before use. This assumes its externally
55 // synchronized and the command buffer is no longer in use.
56 RECORD_TYPE_DIRTY,
57 };
58
59 void PostExecution();
60 void ResetIfDirty();
61
62 const bool primary_;
63 bool recording_ = false;
64 RecordType record_type_ = RECORD_TYPE_EMPTY;
65 VulkanCommandPool* command_pool_;
66 VkCommandBuffer command_buffer_ = VK_NULL_HANDLE;
67
68 DISALLOW_COPY_AND_ASSIGN(VulkanCommandBuffer);
69 };
70
71 class VULKAN_EXPORT CommandBufferRecorderBase {
72 public:
73 VkCommandBuffer handle() const { return handle_; }
74
75 protected:
76 CommandBufferRecorderBase(VulkanCommandBuffer& command_buffer)
77 : handle_(command_buffer.command_buffer_) {
78 command_buffer.ResetIfDirty();
79 }
80
81 virtual ~CommandBufferRecorderBase();
82
83 void ValidateSingleUse(VulkanCommandBuffer& command_buffer) {
84 DCHECK((VulkanCommandBuffer::RECORD_TYPE_SINGLE_USE ==
85 command_buffer.record_type_) ||
86 (VulkanCommandBuffer::RECORD_TYPE_EMPTY ==
87 command_buffer.record_type_));
88 command_buffer.record_type_ = VulkanCommandBuffer::RECORD_TYPE_SINGLE_USE;
89 }
90
91 void ValidateMultiUse(VulkanCommandBuffer& command_buffer) {
92 DCHECK((VulkanCommandBuffer::RECORD_TYPE_MULTI_USE ==
93 command_buffer.record_type_) ||
94 (VulkanCommandBuffer::RECORD_TYPE_EMPTY ==
95 command_buffer.record_type_));
96 command_buffer.record_type_ = VulkanCommandBuffer::RECORD_TYPE_MULTI_USE;
97 }
98
99 VkCommandBuffer handle_;
100 };
101
102 class VULKAN_EXPORT ScopedMultiUseCommandBufferRecorder
103 : public CommandBufferRecorderBase {
104 public:
105 ScopedMultiUseCommandBufferRecorder(VulkanCommandBuffer& command_buffer);
106 ~ScopedMultiUseCommandBufferRecorder() override {}
107
108 private:
109 DISALLOW_COPY_AND_ASSIGN(ScopedMultiUseCommandBufferRecorder);
110 };
111
112 class VULKAN_EXPORT ScopedSingleUseCommandBufferRecorder
113 : public CommandBufferRecorderBase {
114 public:
115 ScopedSingleUseCommandBufferRecorder(VulkanCommandBuffer& command_buffer);
116 ~ScopedSingleUseCommandBufferRecorder() override {}
117
118 private:
119 DISALLOW_COPY_AND_ASSIGN(ScopedSingleUseCommandBufferRecorder);
120 };
121
122 } // namespace gpu
123
124 #endif // GPU_VULKAN_VULKAN_COMMAND_BUFFER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698