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 #include "GrVkCommandBuffer.h" | 8 #include "GrVkCommandBuffer.h" |
9 | 9 |
10 #include "GrVkFramebuffer.h" | 10 #include "GrVkFramebuffer.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 err = GR_VK_CALL(gpu->vkInterface(), CreateFence(gpu->device(), &fenceInfo,
nullptr, | 134 err = GR_VK_CALL(gpu->vkInterface(), CreateFence(gpu->device(), &fenceInfo,
nullptr, |
135 &fSubmitFence)); | 135 &fSubmitFence)); |
136 SkASSERT(!err); | 136 SkASSERT(!err); |
137 | 137 |
138 VkSubmitInfo submitInfo; | 138 VkSubmitInfo submitInfo; |
139 memset(&submitInfo, 0, sizeof(VkSubmitInfo)); | 139 memset(&submitInfo, 0, sizeof(VkSubmitInfo)); |
140 submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; | 140 submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; |
141 submitInfo.pNext = nullptr; | 141 submitInfo.pNext = nullptr; |
142 submitInfo.waitSemaphoreCount = 0; | 142 submitInfo.waitSemaphoreCount = 0; |
143 submitInfo.pWaitSemaphores = nullptr; | 143 submitInfo.pWaitSemaphores = nullptr; |
| 144 submitInfo.pWaitDstStageMask = 0; |
144 submitInfo.commandBufferCount = 1; | 145 submitInfo.commandBufferCount = 1; |
145 submitInfo.pCommandBuffers = &fCmdBuffer; | 146 submitInfo.pCommandBuffers = &fCmdBuffer; |
146 submitInfo.signalSemaphoreCount = 0; | 147 submitInfo.signalSemaphoreCount = 0; |
147 submitInfo.pSignalSemaphores = nullptr; | 148 submitInfo.pSignalSemaphores = nullptr; |
148 GR_VK_CALL_ERRCHECK(gpu->vkInterface(), QueueSubmit(queue, 1, &submitInfo, f
SubmitFence)); | 149 GR_VK_CALL_ERRCHECK(gpu->vkInterface(), QueueSubmit(queue, 1, &submitInfo, f
SubmitFence)); |
149 | 150 |
150 if (GrVkGpu::kForce_SyncQueue == sync) { | 151 if (GrVkGpu::kForce_SyncQueue == sync) { |
151 err = GR_VK_CALL(gpu->vkInterface(), | 152 err = GR_VK_CALL(gpu->vkInterface(), |
152 WaitForFences(gpu->device(), 1, &fSubmitFence, true, UI
NT64_MAX)); | 153 WaitForFences(gpu->device(), 1, &fSubmitFence, true, UI
NT64_MAX)); |
153 if (VK_TIMEOUT == err) { | 154 if (VK_TIMEOUT == err) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 // CommandBuffer commands | 189 // CommandBuffer commands |
189 //////////////////////////////////////////////////////////////////////////////// | 190 //////////////////////////////////////////////////////////////////////////////// |
190 | 191 |
191 void GrVkCommandBuffer::pipelineBarrier(const GrVkGpu* gpu, | 192 void GrVkCommandBuffer::pipelineBarrier(const GrVkGpu* gpu, |
192 VkPipelineStageFlags srcStageMask, | 193 VkPipelineStageFlags srcStageMask, |
193 VkPipelineStageFlags dstStageMask, | 194 VkPipelineStageFlags dstStageMask, |
194 bool byRegion, | 195 bool byRegion, |
195 BarrierType barrierType, | 196 BarrierType barrierType, |
196 void* barrier) const { | 197 void* barrier) const { |
197 SkASSERT(fIsActive); | 198 SkASSERT(fIsActive); |
| 199 // For images we can have barriers inside of render passes but they require
us to add more |
| 200 // support in subpasses which need self dependencies to have barriers inside
them. Also, we can |
| 201 // never have buffer barriers inside of a render pass. For now we will just
assert that we are |
| 202 // not in a render pass. |
| 203 SkASSERT(!fActiveRenderPass); |
198 VkDependencyFlags dependencyFlags = byRegion ? VK_DEPENDENCY_BY_REGION_BIT :
0; | 204 VkDependencyFlags dependencyFlags = byRegion ? VK_DEPENDENCY_BY_REGION_BIT :
0; |
199 | 205 |
200 switch (barrierType) { | 206 switch (barrierType) { |
201 case kMemory_BarrierType: { | 207 case kMemory_BarrierType: { |
202 const VkMemoryBarrier* barrierPtr = reinterpret_cast<VkMemoryBarrier
*>(barrier); | 208 const VkMemoryBarrier* barrierPtr = reinterpret_cast<VkMemoryBarrier
*>(barrier); |
203 GR_VK_CALL(gpu->vkInterface(), CmdPipelineBarrier(fCmdBuffer, srcSta
geMask, | 209 GR_VK_CALL(gpu->vkInterface(), CmdPipelineBarrier(fCmdBuffer, srcSta
geMask, |
204 dstStageMask, depe
ndencyFlags, | 210 dstStageMask, depe
ndencyFlags, |
205 1, barrierPtr, | 211 1, barrierPtr, |
206 0, nullptr, | 212 0, nullptr, |
207 0, nullptr)); | 213 0, nullptr)); |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 firstSet, | 389 firstSet, |
384 setCount, | 390 setCount, |
385 descriptorSets, | 391 descriptorSets, |
386 dynamicOffsetCount, | 392 dynamicOffsetCount, |
387 dynamicOffsets)); | 393 dynamicOffsets)); |
388 pipelineState->addUniformResources(*this); | 394 pipelineState->addUniformResources(*this); |
389 } | 395 } |
390 | 396 |
391 void GrVkCommandBuffer::bindPipeline(const GrVkGpu* gpu, const GrVkPipeline* pip
eline) { | 397 void GrVkCommandBuffer::bindPipeline(const GrVkGpu* gpu, const GrVkPipeline* pip
eline) { |
392 SkASSERT(fIsActive); | 398 SkASSERT(fIsActive); |
393 SkASSERT(fActiveRenderPass); | |
394 GR_VK_CALL(gpu->vkInterface(), CmdBindPipeline(fCmdBuffer, | 399 GR_VK_CALL(gpu->vkInterface(), CmdBindPipeline(fCmdBuffer, |
395 VK_PIPELINE_BIND_POINT_GRAPHI
CS, | 400 VK_PIPELINE_BIND_POINT_GRAPHI
CS, |
396 pipeline->pipeline())); | 401 pipeline->pipeline())); |
397 addResource(pipeline); | 402 addResource(pipeline); |
398 } | 403 } |
399 | 404 |
400 void GrVkCommandBuffer::drawIndexed(const GrVkGpu* gpu, | 405 void GrVkCommandBuffer::drawIndexed(const GrVkGpu* gpu, |
401 uint32_t indexCount, | 406 uint32_t indexCount, |
402 uint32_t instanceCount, | 407 uint32_t instanceCount, |
403 uint32_t firstIndex, | 408 uint32_t firstIndex, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 } | 463 } |
459 | 464 |
460 void GrVkCommandBuffer::setBlendConstants(const GrVkGpu* gpu, | 465 void GrVkCommandBuffer::setBlendConstants(const GrVkGpu* gpu, |
461 const float blendConstants[4]) { | 466 const float blendConstants[4]) { |
462 SkASSERT(fIsActive); | 467 SkASSERT(fIsActive); |
463 if (memcmp(blendConstants, fCachedBlendConstant, 4 * sizeof(float))) { | 468 if (memcmp(blendConstants, fCachedBlendConstant, 4 * sizeof(float))) { |
464 GR_VK_CALL(gpu->vkInterface(), CmdSetBlendConstants(fCmdBuffer, blendCon
stants)); | 469 GR_VK_CALL(gpu->vkInterface(), CmdSetBlendConstants(fCmdBuffer, blendCon
stants)); |
465 memcpy(fCachedBlendConstant, blendConstants, 4 * sizeof(float)); | 470 memcpy(fCachedBlendConstant, blendConstants, 4 * sizeof(float)); |
466 } | 471 } |
467 } | 472 } |
OLD | NEW |