OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef GrVkCommandBuffer_DEFINED | 8 #ifndef GrVkCommandBuffer_DEFINED |
9 #define GrVkCommandBuffer_DEFINED | 9 #define GrVkCommandBuffer_DEFINED |
10 | 10 |
11 #include "GrVkGpu.h" | 11 #include "GrVkGpu.h" |
12 #include "GrVkPipeline.h" | |
13 #include "GrVkResource.h" | 12 #include "GrVkResource.h" |
14 #include "GrVkUtil.h" | 13 #include "GrVkUtil.h" |
15 #include "vulkan/vulkan.h" | 14 #include "vulkan/vulkan.h" |
16 | 15 |
| 16 class GrVkPipeline; |
17 class GrVkRenderPass; | 17 class GrVkRenderPass; |
18 class GrVkRenderTarget; | 18 class GrVkRenderTarget; |
19 class GrVkTransferBuffer; | 19 class GrVkTransferBuffer; |
20 | 20 |
21 class GrVkCommandBuffer : public GrVkResource { | 21 class GrVkCommandBuffer : public GrVkResource { |
22 public: | 22 public: |
23 static GrVkCommandBuffer* Create(const GrVkGpu* gpu, VkCommandPool cmdPool); | 23 static GrVkCommandBuffer* Create(const GrVkGpu* gpu, VkCommandPool cmdPool); |
24 ~GrVkCommandBuffer() override; | 24 ~GrVkCommandBuffer() override; |
25 | 25 |
26 void begin(const GrVkGpu* gpu); | 26 void begin(const GrVkGpu* gpu); |
27 void end(const GrVkGpu* gpu); | 27 void end(const GrVkGpu* gpu); |
28 | 28 |
29 void invalidateState(); | 29 void invalidateState(); |
30 | 30 |
31 // Begins render pass on this command buffer. The framebuffer from GrVkRende
rTarget will be used | 31 // Begins render pass on this command buffer. The framebuffer from GrVkRende
rTarget will be used |
32 // in the render pass. | 32 // in the render pass. |
33 void beginRenderPass(const GrVkGpu* gpu, | 33 void beginRenderPass(const GrVkGpu* gpu, |
34 const GrVkRenderPass* renderPass, | 34 const GrVkRenderPass* renderPass, |
35 const GrVkRenderTarget& target); | 35 const GrVkRenderTarget& target); |
36 void endRenderPass(const GrVkGpu* gpu); | 36 void endRenderPass(const GrVkGpu* gpu); |
37 | 37 |
38 void submitToQueue(const GrVkGpu* gpu, VkQueue queue, GrVkGpu::SyncQueue syn
c); | 38 void submitToQueue(const GrVkGpu* gpu, VkQueue queue, GrVkGpu::SyncQueue syn
c); |
39 bool finished(const GrVkGpu* gpu) const; | 39 bool finished(const GrVkGpu* gpu) const; |
40 | 40 |
41 //////////////////////////////////////////////////////////////////////////// | 41 //////////////////////////////////////////////////////////////////////////// |
42 // CommandBuffer State/Object bindings | |
43 //////////////////////////////////////////////////////////////////////////// | |
44 #if 0 | |
45 void bindPipeline(const GrVkGpu* gpu) const; | |
46 void bindDynamicState(const GrVkGpu* gpu) const; | |
47 void bindDescriptorSet(const GrVkGpu* gpu) const; | |
48 #endif | |
49 | |
50 //////////////////////////////////////////////////////////////////////////// | |
51 // CommandBuffer commands | 42 // CommandBuffer commands |
52 //////////////////////////////////////////////////////////////////////////// | 43 //////////////////////////////////////////////////////////////////////////// |
53 enum BarrierType { | 44 enum BarrierType { |
54 kMemory_BarrierType, | 45 kMemory_BarrierType, |
55 kBufferMemory_BarrierType, | 46 kBufferMemory_BarrierType, |
56 kImageMemory_BarrierType | 47 kImageMemory_BarrierType |
57 }; | 48 }; |
58 | 49 |
59 void pipelineBarrier(const GrVkGpu* gpu, | 50 void pipelineBarrier(const GrVkGpu* gpu, |
60 VkPipelineStageFlags srcStageMask, | 51 VkPipelineStageFlags srcStageMask, |
(...skipping 23 matching lines...) Expand all Loading... |
84 GR_VK_CALL(gpu->vkInterface(), CmdBindIndexBuffer(fCmdBuffer, | 75 GR_VK_CALL(gpu->vkInterface(), CmdBindIndexBuffer(fCmdBuffer, |
85 vkBuffer, | 76 vkBuffer, |
86 0, | 77 0, |
87 VK_INDEX_TYPE_UINT
16)); | 78 VK_INDEX_TYPE_UINT
16)); |
88 fBoundIndexBufferIsValid = true; | 79 fBoundIndexBufferIsValid = true; |
89 fBoundIndexBuffer = vkBuffer; | 80 fBoundIndexBuffer = vkBuffer; |
90 addResource(ibuffer->resource()); | 81 addResource(ibuffer->resource()); |
91 } | 82 } |
92 } | 83 } |
93 | 84 |
94 void bindPipeline(const GrVkGpu* gpu, const GrVkPipeline* pipeline) { | |
95 GR_VK_CALL(gpu->vkInterface(), CmdBindPipeline(fCmdBuffer, | |
96 VK_PIPELINE_BIND_POINT_GR
APHICS, | |
97 pipeline->pipeline())); | |
98 addResource(pipeline); | |
99 } | |
100 | |
101 void bindDescriptorSets(const GrVkGpu* gpu, | 85 void bindDescriptorSets(const GrVkGpu* gpu, |
102 GrVkProgram*, | 86 GrVkProgram*, |
103 VkPipelineLayout layout, | 87 VkPipelineLayout layout, |
104 uint32_t firstSet, | 88 uint32_t firstSet, |
105 uint32_t setCount, | 89 uint32_t setCount, |
106 const VkDescriptorSet* descriptorSets, | 90 const VkDescriptorSet* descriptorSets, |
107 uint32_t dynamicOffsetCount, | 91 uint32_t dynamicOffsetCount, |
108 const uint32_t* dynamicOffsets); | 92 const uint32_t* dynamicOffsets); |
109 | 93 |
| 94 void setViewport(const GrVkGpu* gpu, |
| 95 uint32_t firstViewport, |
| 96 uint32_t viewportCount, |
| 97 const VkViewport* viewports); |
| 98 |
| 99 void setScissor(const GrVkGpu* gpu, |
| 100 uint32_t firstScissor, |
| 101 uint32_t scissorCount, |
| 102 const VkRect2D* scissors); |
| 103 |
| 104 void setBlendConstants(const GrVkGpu* gpu, const float blendConstants[4]); |
| 105 |
110 // Commands that only work outside of a render pass | 106 // Commands that only work outside of a render pass |
111 void clearColorImage(const GrVkGpu* gpu, | 107 void clearColorImage(const GrVkGpu* gpu, |
112 GrVkImage* image, | 108 GrVkImage* image, |
113 const VkClearColorValue* color, | 109 const VkClearColorValue* color, |
114 uint32_t subRangeCount, | 110 uint32_t subRangeCount, |
115 const VkImageSubresourceRange* subRanges); | 111 const VkImageSubresourceRange* subRanges); |
116 | 112 |
117 void clearDepthStencilImage(const GrVkGpu* gpu, | 113 void clearDepthStencilImage(const GrVkGpu* gpu, |
118 GrVkImage* image, | 114 GrVkImage* image, |
119 const VkClearDepthStencilValue* color, | 115 const VkClearDepthStencilValue* color, |
(...skipping 22 matching lines...) Expand all Loading... |
142 uint32_t copyRegionCount, | 138 uint32_t copyRegionCount, |
143 const VkBufferImageCopy* copyRegions); | 139 const VkBufferImageCopy* copyRegions); |
144 | 140 |
145 // Commands that only work inside of a render pass | 141 // Commands that only work inside of a render pass |
146 void clearAttachments(const GrVkGpu* gpu, | 142 void clearAttachments(const GrVkGpu* gpu, |
147 int numAttachments, | 143 int numAttachments, |
148 const VkClearAttachment* attachments, | 144 const VkClearAttachment* attachments, |
149 int numRects, | 145 int numRects, |
150 const VkClearRect* clearRects) const; | 146 const VkClearRect* clearRects) const; |
151 | 147 |
| 148 void bindPipeline(const GrVkGpu* gpu, const GrVkPipeline* pipeline); |
| 149 |
| 150 |
152 void drawIndexed(const GrVkGpu* gpu, | 151 void drawIndexed(const GrVkGpu* gpu, |
153 uint32_t indexCount, | 152 uint32_t indexCount, |
154 uint32_t instanceCount, | 153 uint32_t instanceCount, |
155 uint32_t firstIndex, | 154 uint32_t firstIndex, |
156 int32_t vertexOffset, | 155 int32_t vertexOffset, |
157 uint32_t firstInstance) const; | 156 uint32_t firstInstance) const; |
158 | 157 |
159 void draw(const GrVkGpu* gpu, | 158 void draw(const GrVkGpu* gpu, |
160 uint32_t vertexCount, | 159 uint32_t vertexCount, |
161 uint32_t instanceCount, | 160 uint32_t instanceCount, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 bool fBoundIndexBufferIsValid; | 197 bool fBoundIndexBufferIsValid; |
199 | 198 |
200 // Tracks whether we are in the middle of a command buffer begin/end calls a
nd thus can add new | 199 // Tracks whether we are in the middle of a command buffer begin/end calls a
nd thus can add new |
201 // commands to the buffer; | 200 // commands to the buffer; |
202 bool fIsActive; | 201 bool fIsActive; |
203 | 202 |
204 // Stores a pointer to the current active render pass (i.e. begin has been c
alled but not end). | 203 // Stores a pointer to the current active render pass (i.e. begin has been c
alled but not end). |
205 // A nullptr means there is no active render pass. The GrVKCommandBuffer doe
s not own the render | 204 // A nullptr means there is no active render pass. The GrVKCommandBuffer doe
s not own the render |
206 // pass. | 205 // pass. |
207 const GrVkRenderPass* fActiveRenderPass; | 206 const GrVkRenderPass* fActiveRenderPass; |
| 207 |
| 208 // Cached values used for dynamic state updates |
| 209 VkViewport fCachedViewport; |
| 210 VkRect2D fCachedScissor; |
| 211 float fCachedBlendConstant[4]; |
208 }; | 212 }; |
209 | 213 |
210 | 214 |
211 #endif | 215 #endif |
212 | 216 |
OLD | NEW |