| 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 |