• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2021 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // VulkanSecondaryCommandBuffer:
7 //    A class wrapping a Vulkan command buffer for use as a secondary command buffer.
8 //
9 
10 #ifndef LIBANGLE_RENDERER_VULKAN_VULKANSECONDARYCOMMANDBUFFERVK_H_
11 #define LIBANGLE_RENDERER_VULKAN_VULKANSECONDARYCOMMANDBUFFERVK_H_
12 
13 #include "common/vulkan/vk_headers.h"
14 #include "libANGLE/renderer/vulkan/vk_command_buffer_utils.h"
15 #include "libANGLE/renderer/vulkan/vk_wrapper.h"
16 
17 namespace angle
18 {
19 class PoolAllocator;
20 }  // namespace angle
21 
22 namespace rx
23 {
24 class ContextVk;
25 
26 namespace vk
27 {
28 class Context;
29 class RenderPassDesc;
30 
31 class VulkanSecondaryCommandBuffer : public priv::CommandBuffer
32 {
33   public:
34     VulkanSecondaryCommandBuffer() = default;
35 
36     static angle::Result InitializeCommandPool(Context *context,
37                                                CommandPool *pool,
38                                                uint32_t queueFamilyIndex,
39                                                bool hasProtectedContent);
40     static angle::Result InitializeRenderPassInheritanceInfo(
41         ContextVk *contextVk,
42         const Framebuffer &framebuffer,
43         const RenderPassDesc &renderPassDesc,
44         VkCommandBufferInheritanceInfo *inheritanceInfoOut);
45 
46     angle::Result initialize(vk::Context *context,
47                              vk::CommandPool *pool,
48                              bool isRenderPassCommandBuffer,
49                              angle::PoolAllocator *allocator);
50 
51     angle::Result begin(vk::Context *context,
52                         const VkCommandBufferInheritanceInfo &inheritanceInfo);
53     angle::Result end(vk::Context *context);
54     VkResult reset();
55 
executeCommands(PrimaryCommandBuffer * primary)56     void executeCommands(PrimaryCommandBuffer *primary) { primary->executeCommands(1, this); }
57 
58     void beginQuery(const QueryPool &queryPool, uint32_t query, VkQueryControlFlags flags);
59 
60     void blitImage(const Image &srcImage,
61                    VkImageLayout srcImageLayout,
62                    const Image &dstImage,
63                    VkImageLayout dstImageLayout,
64                    uint32_t regionCount,
65                    const VkImageBlit *regions,
66                    VkFilter filter);
67 
68     void clearColorImage(const Image &image,
69                          VkImageLayout imageLayout,
70                          const VkClearColorValue &color,
71                          uint32_t rangeCount,
72                          const VkImageSubresourceRange *ranges);
73     void clearDepthStencilImage(const Image &image,
74                                 VkImageLayout imageLayout,
75                                 const VkClearDepthStencilValue &depthStencil,
76                                 uint32_t rangeCount,
77                                 const VkImageSubresourceRange *ranges);
78 
79     void clearAttachments(uint32_t attachmentCount,
80                           const VkClearAttachment *attachments,
81                           uint32_t rectCount,
82                           const VkClearRect *rects);
83 
84     void copyBuffer(const Buffer &srcBuffer,
85                     const Buffer &destBuffer,
86                     uint32_t regionCount,
87                     const VkBufferCopy *regions);
88 
89     void copyBufferToImage(VkBuffer srcBuffer,
90                            const Image &dstImage,
91                            VkImageLayout dstImageLayout,
92                            uint32_t regionCount,
93                            const VkBufferImageCopy *regions);
94     void copyImageToBuffer(const Image &srcImage,
95                            VkImageLayout srcImageLayout,
96                            VkBuffer dstBuffer,
97                            uint32_t regionCount,
98                            const VkBufferImageCopy *regions);
99     void copyImage(const Image &srcImage,
100                    VkImageLayout srcImageLayout,
101                    const Image &dstImage,
102                    VkImageLayout dstImageLayout,
103                    uint32_t regionCount,
104                    const VkImageCopy *regions);
105 
106     void dispatch(uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
107     void dispatchIndirect(const Buffer &buffer, VkDeviceSize offset);
108 
109     void draw(uint32_t vertexCount,
110               uint32_t instanceCount,
111               uint32_t firstVertex,
112               uint32_t firstInstance);
113     void draw(uint32_t vertexCount, uint32_t firstVertex);
114     void drawInstanced(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex);
115     void drawInstancedBaseInstance(uint32_t vertexCount,
116                                    uint32_t instanceCount,
117                                    uint32_t firstVertex,
118                                    uint32_t firstInstance);
119     void drawIndexed(uint32_t indexCount,
120                      uint32_t instanceCount,
121                      uint32_t firstIndex,
122                      int32_t vertexOffset,
123                      uint32_t firstInstance);
124     void drawIndexed(uint32_t indexCount);
125     void drawIndexedBaseVertex(uint32_t indexCount, uint32_t vertexOffset);
126     void drawIndexedInstanced(uint32_t indexCount, uint32_t instanceCount);
127     void drawIndexedInstancedBaseVertex(uint32_t indexCount,
128                                         uint32_t instanceCount,
129                                         uint32_t vertexOffset);
130     void drawIndexedInstancedBaseVertexBaseInstance(uint32_t indexCount,
131                                                     uint32_t instanceCount,
132                                                     uint32_t firstIndex,
133                                                     int32_t vertexOffset,
134                                                     uint32_t firstInstance);
135     void drawIndexedIndirect(const Buffer &buffer,
136                              VkDeviceSize offset,
137                              uint32_t drawCount,
138                              uint32_t stride);
139     void drawIndirect(const Buffer &buffer,
140                       VkDeviceSize offset,
141                       uint32_t drawCount,
142                       uint32_t stride);
143 
144     void endQuery(const QueryPool &queryPool, uint32_t query);
145 
146     void fillBuffer(const Buffer &dstBuffer,
147                     VkDeviceSize dstOffset,
148                     VkDeviceSize size,
149                     uint32_t data);
150 
151     void executionBarrier(VkPipelineStageFlags stageMask);
152 
153     void bufferBarrier(VkPipelineStageFlags srcStageMask,
154                        VkPipelineStageFlags dstStageMask,
155                        const VkBufferMemoryBarrier *bufferMemoryBarrier);
156 
157     void imageBarrier(VkPipelineStageFlags srcStageMask,
158                       VkPipelineStageFlags dstStageMask,
159                       const VkImageMemoryBarrier &imageMemoryBarrier);
160 
161     void memoryBarrier(VkPipelineStageFlags srcStageMask,
162                        VkPipelineStageFlags dstStageMask,
163                        const VkMemoryBarrier *memoryBarrier);
164 
165     void nextSubpass(VkSubpassContents subpassContents);
166 
167     void pipelineBarrier(VkPipelineStageFlags srcStageMask,
168                          VkPipelineStageFlags dstStageMask,
169                          VkDependencyFlags dependencyFlags,
170                          uint32_t memoryBarrierCount,
171                          const VkMemoryBarrier *memoryBarriers,
172                          uint32_t bufferMemoryBarrierCount,
173                          const VkBufferMemoryBarrier *bufferMemoryBarriers,
174                          uint32_t imageMemoryBarrierCount,
175                          const VkImageMemoryBarrier *imageMemoryBarriers);
176 
177     void pushConstants(const PipelineLayout &layout,
178                        VkShaderStageFlags flag,
179                        uint32_t offset,
180                        uint32_t size,
181                        const void *data);
182 
183     void setEvent(VkEvent event, VkPipelineStageFlags stageMask);
184     void resetEvent(VkEvent event, VkPipelineStageFlags stageMask);
185     void resetQueryPool(const QueryPool &queryPool, uint32_t firstQuery, uint32_t queryCount);
186     void resolveImage(const Image &srcImage,
187                       VkImageLayout srcImageLayout,
188                       const Image &dstImage,
189                       VkImageLayout dstImageLayout,
190                       uint32_t regionCount,
191                       const VkImageResolve *regions);
192     void waitEvents(uint32_t eventCount,
193                     const VkEvent *events,
194                     VkPipelineStageFlags srcStageMask,
195                     VkPipelineStageFlags dstStageMask,
196                     uint32_t memoryBarrierCount,
197                     const VkMemoryBarrier *memoryBarriers,
198                     uint32_t bufferMemoryBarrierCount,
199                     const VkBufferMemoryBarrier *bufferMemoryBarriers,
200                     uint32_t imageMemoryBarrierCount,
201                     const VkImageMemoryBarrier *imageMemoryBarriers);
202 
203     void writeTimestamp(VkPipelineStageFlagBits pipelineStage,
204                         const QueryPool &queryPool,
205                         uint32_t query);
206 
207     // VK_EXT_transform_feedback
208     void beginTransformFeedback(uint32_t firstCounterBuffer,
209                                 uint32_t counterBufferCount,
210                                 const VkBuffer *counterBuffers,
211                                 const VkDeviceSize *counterBufferOffsets);
212     void endTransformFeedback(uint32_t firstCounterBuffer,
213                               uint32_t counterBufferCount,
214                               const VkBuffer *counterBuffers,
215                               const VkDeviceSize *counterBufferOffsets);
216 
217     // VK_EXT_debug_utils
218     void beginDebugUtilsLabelEXT(const VkDebugUtilsLabelEXT &labelInfo);
219     void endDebugUtilsLabelEXT();
220     void insertDebugUtilsLabelEXT(const VkDebugUtilsLabelEXT &labelInfo);
221 
open()222     void open() const {}
close()223     void close() const {}
empty()224     bool empty() const { return !mAnyCommand; }
getRenderPassWriteCommandCount()225     uint32_t getRenderPassWriteCommandCount() const
226     {
227         return mCommandTracker.getRenderPassWriteCommandCount();
228     }
dumpCommands(const char * separator)229     std::string dumpCommands(const char *separator) const { return ""; }
230 
231   private:
onRecordCommand()232     void onRecordCommand() { mAnyCommand = true; }
233 
234     CommandBufferCommandTracker mCommandTracker;
235     bool mAnyCommand = false;
236 };
237 
blitImage(const Image & srcImage,VkImageLayout srcImageLayout,const Image & dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageBlit * regions,VkFilter filter)238 ANGLE_INLINE void VulkanSecondaryCommandBuffer::blitImage(const Image &srcImage,
239                                                           VkImageLayout srcImageLayout,
240                                                           const Image &dstImage,
241                                                           VkImageLayout dstImageLayout,
242                                                           uint32_t regionCount,
243                                                           const VkImageBlit *regions,
244                                                           VkFilter filter)
245 {
246     onRecordCommand();
247     CommandBuffer::blitImage(srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount,
248                              regions, filter);
249 }
250 
beginQuery(const QueryPool & queryPool,uint32_t query,VkQueryControlFlags flags)251 ANGLE_INLINE void VulkanSecondaryCommandBuffer::beginQuery(const QueryPool &queryPool,
252                                                            uint32_t query,
253                                                            VkQueryControlFlags flags)
254 {
255     onRecordCommand();
256     CommandBuffer::beginQuery(queryPool, query, flags);
257 }
258 
endQuery(const QueryPool & queryPool,uint32_t query)259 ANGLE_INLINE void VulkanSecondaryCommandBuffer::endQuery(const QueryPool &queryPool, uint32_t query)
260 {
261     onRecordCommand();
262     CommandBuffer::endQuery(queryPool, query);
263 }
264 
writeTimestamp(VkPipelineStageFlagBits pipelineStage,const QueryPool & queryPool,uint32_t query)265 ANGLE_INLINE void VulkanSecondaryCommandBuffer::writeTimestamp(
266     VkPipelineStageFlagBits pipelineStage,
267     const QueryPool &queryPool,
268     uint32_t query)
269 {
270     onRecordCommand();
271     CommandBuffer::writeTimestamp(pipelineStage, queryPool, query);
272 }
273 
clearColorImage(const Image & image,VkImageLayout imageLayout,const VkClearColorValue & color,uint32_t rangeCount,const VkImageSubresourceRange * ranges)274 ANGLE_INLINE void VulkanSecondaryCommandBuffer::clearColorImage(
275     const Image &image,
276     VkImageLayout imageLayout,
277     const VkClearColorValue &color,
278     uint32_t rangeCount,
279     const VkImageSubresourceRange *ranges)
280 {
281     onRecordCommand();
282     CommandBuffer::clearColorImage(image, imageLayout, color, rangeCount, ranges);
283 }
284 
clearDepthStencilImage(const Image & image,VkImageLayout imageLayout,const VkClearDepthStencilValue & depthStencil,uint32_t rangeCount,const VkImageSubresourceRange * ranges)285 ANGLE_INLINE void VulkanSecondaryCommandBuffer::clearDepthStencilImage(
286     const Image &image,
287     VkImageLayout imageLayout,
288     const VkClearDepthStencilValue &depthStencil,
289     uint32_t rangeCount,
290     const VkImageSubresourceRange *ranges)
291 {
292     onRecordCommand();
293     CommandBuffer::clearDepthStencilImage(image, imageLayout, depthStencil, rangeCount, ranges);
294 }
295 
clearAttachments(uint32_t attachmentCount,const VkClearAttachment * attachments,uint32_t rectCount,const VkClearRect * rects)296 ANGLE_INLINE void VulkanSecondaryCommandBuffer::clearAttachments(
297     uint32_t attachmentCount,
298     const VkClearAttachment *attachments,
299     uint32_t rectCount,
300     const VkClearRect *rects)
301 {
302     onRecordCommand();
303     mCommandTracker.onClearAttachments();
304     CommandBuffer::clearAttachments(attachmentCount, attachments, rectCount, rects);
305 }
306 
copyBuffer(const Buffer & srcBuffer,const Buffer & destBuffer,uint32_t regionCount,const VkBufferCopy * regions)307 ANGLE_INLINE void VulkanSecondaryCommandBuffer::copyBuffer(const Buffer &srcBuffer,
308                                                            const Buffer &destBuffer,
309                                                            uint32_t regionCount,
310                                                            const VkBufferCopy *regions)
311 {
312     onRecordCommand();
313     CommandBuffer::copyBuffer(srcBuffer, destBuffer, regionCount, regions);
314 }
315 
copyBufferToImage(VkBuffer srcBuffer,const Image & dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkBufferImageCopy * regions)316 ANGLE_INLINE void VulkanSecondaryCommandBuffer::copyBufferToImage(VkBuffer srcBuffer,
317                                                                   const Image &dstImage,
318                                                                   VkImageLayout dstImageLayout,
319                                                                   uint32_t regionCount,
320                                                                   const VkBufferImageCopy *regions)
321 {
322     onRecordCommand();
323     CommandBuffer::copyBufferToImage(srcBuffer, dstImage, dstImageLayout, regionCount, regions);
324 }
325 
copyImageToBuffer(const Image & srcImage,VkImageLayout srcImageLayout,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferImageCopy * regions)326 ANGLE_INLINE void VulkanSecondaryCommandBuffer::copyImageToBuffer(const Image &srcImage,
327                                                                   VkImageLayout srcImageLayout,
328                                                                   VkBuffer dstBuffer,
329                                                                   uint32_t regionCount,
330                                                                   const VkBufferImageCopy *regions)
331 {
332     onRecordCommand();
333     CommandBuffer::copyImageToBuffer(srcImage, srcImageLayout, dstBuffer, regionCount, regions);
334 }
335 
copyImage(const Image & srcImage,VkImageLayout srcImageLayout,const Image & dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageCopy * regions)336 ANGLE_INLINE void VulkanSecondaryCommandBuffer::copyImage(const Image &srcImage,
337                                                           VkImageLayout srcImageLayout,
338                                                           const Image &dstImage,
339                                                           VkImageLayout dstImageLayout,
340                                                           uint32_t regionCount,
341                                                           const VkImageCopy *regions)
342 {
343     onRecordCommand();
344     CommandBuffer::copyImage(srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount,
345                              regions);
346 }
347 
draw(uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex,uint32_t firstInstance)348 ANGLE_INLINE void VulkanSecondaryCommandBuffer::draw(uint32_t vertexCount,
349                                                      uint32_t instanceCount,
350                                                      uint32_t firstVertex,
351                                                      uint32_t firstInstance)
352 {
353     onRecordCommand();
354     mCommandTracker.onDraw();
355     CommandBuffer::draw(vertexCount, instanceCount, firstVertex, firstInstance);
356 }
357 
draw(uint32_t vertexCount,uint32_t firstVertex)358 ANGLE_INLINE void VulkanSecondaryCommandBuffer::draw(uint32_t vertexCount, uint32_t firstVertex)
359 {
360     onRecordCommand();
361     mCommandTracker.onDraw();
362     CommandBuffer::draw(vertexCount, 1, firstVertex, 0);
363 }
364 
drawInstanced(uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex)365 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawInstanced(uint32_t vertexCount,
366                                                               uint32_t instanceCount,
367                                                               uint32_t firstVertex)
368 {
369     onRecordCommand();
370     mCommandTracker.onDraw();
371     CommandBuffer::draw(vertexCount, instanceCount, firstVertex, 0);
372 }
373 
drawInstancedBaseInstance(uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex,uint32_t firstInstance)374 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawInstancedBaseInstance(uint32_t vertexCount,
375                                                                           uint32_t instanceCount,
376                                                                           uint32_t firstVertex,
377                                                                           uint32_t firstInstance)
378 {
379     onRecordCommand();
380     mCommandTracker.onDraw();
381     CommandBuffer::draw(vertexCount, instanceCount, firstVertex, firstInstance);
382 }
383 
drawIndexed(uint32_t indexCount,uint32_t instanceCount,uint32_t firstIndex,int32_t vertexOffset,uint32_t firstInstance)384 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawIndexed(uint32_t indexCount,
385                                                             uint32_t instanceCount,
386                                                             uint32_t firstIndex,
387                                                             int32_t vertexOffset,
388                                                             uint32_t firstInstance)
389 {
390     onRecordCommand();
391     mCommandTracker.onDraw();
392     CommandBuffer::drawIndexed(indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
393 }
394 
drawIndexed(uint32_t indexCount)395 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawIndexed(uint32_t indexCount)
396 {
397     onRecordCommand();
398     mCommandTracker.onDraw();
399     CommandBuffer::drawIndexed(indexCount, 1, 0, 0, 0);
400 }
401 
drawIndexedBaseVertex(uint32_t indexCount,uint32_t vertexOffset)402 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawIndexedBaseVertex(uint32_t indexCount,
403                                                                       uint32_t vertexOffset)
404 {
405     onRecordCommand();
406     mCommandTracker.onDraw();
407     CommandBuffer::drawIndexed(indexCount, 1, 0, vertexOffset, 0);
408 }
409 
drawIndexedInstanced(uint32_t indexCount,uint32_t instanceCount)410 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawIndexedInstanced(uint32_t indexCount,
411                                                                      uint32_t instanceCount)
412 {
413     onRecordCommand();
414     mCommandTracker.onDraw();
415     CommandBuffer::drawIndexed(indexCount, instanceCount, 0, 0, 0);
416 }
417 
drawIndexedInstancedBaseVertex(uint32_t indexCount,uint32_t instanceCount,uint32_t vertexOffset)418 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawIndexedInstancedBaseVertex(
419     uint32_t indexCount,
420     uint32_t instanceCount,
421     uint32_t vertexOffset)
422 {
423     onRecordCommand();
424     mCommandTracker.onDraw();
425     CommandBuffer::drawIndexed(indexCount, instanceCount, 0, vertexOffset, 0);
426 }
427 
drawIndexedInstancedBaseVertexBaseInstance(uint32_t indexCount,uint32_t instanceCount,uint32_t firstIndex,int32_t vertexOffset,uint32_t firstInstance)428 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawIndexedInstancedBaseVertexBaseInstance(
429     uint32_t indexCount,
430     uint32_t instanceCount,
431     uint32_t firstIndex,
432     int32_t vertexOffset,
433     uint32_t firstInstance)
434 {
435     onRecordCommand();
436     mCommandTracker.onDraw();
437     CommandBuffer::drawIndexed(indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
438 }
439 
drawIndexedIndirect(const Buffer & buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)440 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawIndexedIndirect(const Buffer &buffer,
441                                                                     VkDeviceSize offset,
442                                                                     uint32_t drawCount,
443                                                                     uint32_t stride)
444 {
445     onRecordCommand();
446     mCommandTracker.onDraw();
447     CommandBuffer::drawIndexedIndirect(buffer, offset, drawCount, stride);
448 }
449 
drawIndirect(const Buffer & buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)450 ANGLE_INLINE void VulkanSecondaryCommandBuffer::drawIndirect(const Buffer &buffer,
451                                                              VkDeviceSize offset,
452                                                              uint32_t drawCount,
453                                                              uint32_t stride)
454 {
455     onRecordCommand();
456     mCommandTracker.onDraw();
457     CommandBuffer::drawIndirect(buffer, offset, drawCount, stride);
458 }
459 
dispatch(uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)460 ANGLE_INLINE void VulkanSecondaryCommandBuffer::dispatch(uint32_t groupCountX,
461                                                          uint32_t groupCountY,
462                                                          uint32_t groupCountZ)
463 {
464     onRecordCommand();
465     CommandBuffer::dispatch(groupCountX, groupCountY, groupCountZ);
466 }
467 
dispatchIndirect(const Buffer & buffer,VkDeviceSize offset)468 ANGLE_INLINE void VulkanSecondaryCommandBuffer::dispatchIndirect(const Buffer &buffer,
469                                                                  VkDeviceSize offset)
470 {
471     onRecordCommand();
472     CommandBuffer::dispatchIndirect(buffer, offset);
473 }
474 
fillBuffer(const Buffer & dstBuffer,VkDeviceSize dstOffset,VkDeviceSize size,uint32_t data)475 ANGLE_INLINE void VulkanSecondaryCommandBuffer::fillBuffer(const Buffer &dstBuffer,
476                                                            VkDeviceSize dstOffset,
477                                                            VkDeviceSize size,
478                                                            uint32_t data)
479 {
480     onRecordCommand();
481     CommandBuffer::fillBuffer(dstBuffer, dstOffset, size, data);
482 }
483 
pipelineBarrier(VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,VkDependencyFlags dependencyFlags,uint32_t memoryBarrierCount,const VkMemoryBarrier * memoryBarriers,uint32_t bufferMemoryBarrierCount,const VkBufferMemoryBarrier * bufferMemoryBarriers,uint32_t imageMemoryBarrierCount,const VkImageMemoryBarrier * imageMemoryBarriers)484 ANGLE_INLINE void VulkanSecondaryCommandBuffer::pipelineBarrier(
485     VkPipelineStageFlags srcStageMask,
486     VkPipelineStageFlags dstStageMask,
487     VkDependencyFlags dependencyFlags,
488     uint32_t memoryBarrierCount,
489     const VkMemoryBarrier *memoryBarriers,
490     uint32_t bufferMemoryBarrierCount,
491     const VkBufferMemoryBarrier *bufferMemoryBarriers,
492     uint32_t imageMemoryBarrierCount,
493     const VkImageMemoryBarrier *imageMemoryBarriers)
494 {
495     onRecordCommand();
496     CommandBuffer::pipelineBarrier(srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount,
497                                    memoryBarriers, bufferMemoryBarrierCount, bufferMemoryBarriers,
498                                    imageMemoryBarrierCount, imageMemoryBarriers);
499 }
500 
memoryBarrier(VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,const VkMemoryBarrier * memoryBarrier)501 ANGLE_INLINE void VulkanSecondaryCommandBuffer::memoryBarrier(VkPipelineStageFlags srcStageMask,
502                                                               VkPipelineStageFlags dstStageMask,
503                                                               const VkMemoryBarrier *memoryBarrier)
504 {
505     onRecordCommand();
506     CommandBuffer::memoryBarrier(srcStageMask, dstStageMask, memoryBarrier);
507 }
508 
bufferBarrier(VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,const VkBufferMemoryBarrier * bufferMemoryBarrier)509 ANGLE_INLINE void VulkanSecondaryCommandBuffer::bufferBarrier(
510     VkPipelineStageFlags srcStageMask,
511     VkPipelineStageFlags dstStageMask,
512     const VkBufferMemoryBarrier *bufferMemoryBarrier)
513 {
514     onRecordCommand();
515     CommandBuffer::pipelineBarrier(srcStageMask, dstStageMask, 0, 0, nullptr, 1,
516                                    bufferMemoryBarrier, 0, nullptr);
517 }
518 
imageBarrier(VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,const VkImageMemoryBarrier & imageMemoryBarrier)519 ANGLE_INLINE void VulkanSecondaryCommandBuffer::imageBarrier(
520     VkPipelineStageFlags srcStageMask,
521     VkPipelineStageFlags dstStageMask,
522     const VkImageMemoryBarrier &imageMemoryBarrier)
523 {
524     onRecordCommand();
525     CommandBuffer::imageBarrier(srcStageMask, dstStageMask, imageMemoryBarrier);
526 }
527 
nextSubpass(VkSubpassContents subpassContents)528 ANGLE_INLINE void VulkanSecondaryCommandBuffer::nextSubpass(VkSubpassContents subpassContents)
529 {
530     onRecordCommand();
531     CommandBuffer::nextSubpass(subpassContents);
532 }
533 
pushConstants(const PipelineLayout & layout,VkShaderStageFlags flag,uint32_t offset,uint32_t size,const void * data)534 ANGLE_INLINE void VulkanSecondaryCommandBuffer::pushConstants(const PipelineLayout &layout,
535                                                               VkShaderStageFlags flag,
536                                                               uint32_t offset,
537                                                               uint32_t size,
538                                                               const void *data)
539 {
540     onRecordCommand();
541     CommandBuffer::pushConstants(layout, flag, offset, size, data);
542 }
543 
setEvent(VkEvent event,VkPipelineStageFlags stageMask)544 ANGLE_INLINE void VulkanSecondaryCommandBuffer::setEvent(VkEvent event,
545                                                          VkPipelineStageFlags stageMask)
546 {
547     onRecordCommand();
548     CommandBuffer::setEvent(event, stageMask);
549 }
550 
resetEvent(VkEvent event,VkPipelineStageFlags stageMask)551 ANGLE_INLINE void VulkanSecondaryCommandBuffer::resetEvent(VkEvent event,
552                                                            VkPipelineStageFlags stageMask)
553 {
554     onRecordCommand();
555     CommandBuffer::resetEvent(event, stageMask);
556 }
557 
waitEvents(uint32_t eventCount,const VkEvent * events,VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,uint32_t memoryBarrierCount,const VkMemoryBarrier * memoryBarriers,uint32_t bufferMemoryBarrierCount,const VkBufferMemoryBarrier * bufferMemoryBarriers,uint32_t imageMemoryBarrierCount,const VkImageMemoryBarrier * imageMemoryBarriers)558 ANGLE_INLINE void VulkanSecondaryCommandBuffer::waitEvents(
559     uint32_t eventCount,
560     const VkEvent *events,
561     VkPipelineStageFlags srcStageMask,
562     VkPipelineStageFlags dstStageMask,
563     uint32_t memoryBarrierCount,
564     const VkMemoryBarrier *memoryBarriers,
565     uint32_t bufferMemoryBarrierCount,
566     const VkBufferMemoryBarrier *bufferMemoryBarriers,
567     uint32_t imageMemoryBarrierCount,
568     const VkImageMemoryBarrier *imageMemoryBarriers)
569 {
570     onRecordCommand();
571     CommandBuffer::waitEvents(eventCount, events, srcStageMask, dstStageMask, memoryBarrierCount,
572                               memoryBarriers, bufferMemoryBarrierCount, bufferMemoryBarriers,
573                               imageMemoryBarrierCount, imageMemoryBarriers);
574 }
575 
resetQueryPool(const QueryPool & queryPool,uint32_t firstQuery,uint32_t queryCount)576 ANGLE_INLINE void VulkanSecondaryCommandBuffer::resetQueryPool(const QueryPool &queryPool,
577                                                                uint32_t firstQuery,
578                                                                uint32_t queryCount)
579 {
580     onRecordCommand();
581     CommandBuffer::resetQueryPool(queryPool, firstQuery, queryCount);
582 }
583 
resolveImage(const Image & srcImage,VkImageLayout srcImageLayout,const Image & dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageResolve * regions)584 ANGLE_INLINE void VulkanSecondaryCommandBuffer::resolveImage(const Image &srcImage,
585                                                              VkImageLayout srcImageLayout,
586                                                              const Image &dstImage,
587                                                              VkImageLayout dstImageLayout,
588                                                              uint32_t regionCount,
589                                                              const VkImageResolve *regions)
590 {
591     onRecordCommand();
592     CommandBuffer::resolveImage(srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount,
593                                 regions);
594 }
595 
beginTransformFeedback(uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * counterBuffers,const VkDeviceSize * counterBufferOffsets)596 ANGLE_INLINE void VulkanSecondaryCommandBuffer::beginTransformFeedback(
597     uint32_t firstCounterBuffer,
598     uint32_t counterBufferCount,
599     const VkBuffer *counterBuffers,
600     const VkDeviceSize *counterBufferOffsets)
601 {
602     onRecordCommand();
603     CommandBuffer::beginTransformFeedback(firstCounterBuffer, counterBufferCount, counterBuffers,
604                                           counterBufferOffsets);
605 }
606 
endTransformFeedback(uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * counterBuffers,const VkDeviceSize * counterBufferOffsets)607 ANGLE_INLINE void VulkanSecondaryCommandBuffer::endTransformFeedback(
608     uint32_t firstCounterBuffer,
609     uint32_t counterBufferCount,
610     const VkBuffer *counterBuffers,
611     const VkDeviceSize *counterBufferOffsets)
612 {
613     onRecordCommand();
614     CommandBuffer::endTransformFeedback(firstCounterBuffer, counterBufferCount, counterBuffers,
615                                         counterBufferOffsets);
616 }
617 
beginDebugUtilsLabelEXT(const VkDebugUtilsLabelEXT & labelInfo)618 ANGLE_INLINE void VulkanSecondaryCommandBuffer::beginDebugUtilsLabelEXT(
619     const VkDebugUtilsLabelEXT &labelInfo)
620 {
621     onRecordCommand();
622     CommandBuffer::beginDebugUtilsLabelEXT(labelInfo);
623 }
624 
endDebugUtilsLabelEXT()625 ANGLE_INLINE void VulkanSecondaryCommandBuffer::endDebugUtilsLabelEXT()
626 {
627     onRecordCommand();
628     CommandBuffer::endDebugUtilsLabelEXT();
629 }
630 
insertDebugUtilsLabelEXT(const VkDebugUtilsLabelEXT & labelInfo)631 ANGLE_INLINE void VulkanSecondaryCommandBuffer::insertDebugUtilsLabelEXT(
632     const VkDebugUtilsLabelEXT &labelInfo)
633 {
634     onRecordCommand();
635     CommandBuffer::insertDebugUtilsLabelEXT(labelInfo);
636 }
637 
638 }  // namespace vk
639 }  // namespace rx
640 
641 #endif  // LIBANGLE_RENDERER_VULKAN_VULKANSECONDARYCOMMANDBUFFERVK_H_
642