OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2016 Google Inc. |
| 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. |
| 6 */ |
| 7 |
| 8 #include "GrVkGpuCommandBuffer.h" |
| 9 |
| 10 #include "GrVkCommandBuffer.h" |
| 11 #include "GrVkGpu.h" |
| 12 #include "GrVkRenderPass.h" |
| 13 #include "GrVkRenderTarget.h" |
| 14 #include "GrVkResourceProvider.h" |
| 15 |
| 16 void get_vk_load_store_ops(GrGpuCommandBuffer::LoadAndStoreOp op, |
| 17 VkAttachmentLoadOp* loadOp, VkAttachmentStoreOp* stor
eOp) { |
| 18 switch (op) { |
| 19 case GrGpuCommandBuffer::kLoadAndStore_LoadAndStoreOp: |
| 20 *loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; |
| 21 *storeOp = VK_ATTACHMENT_STORE_OP_STORE; |
| 22 break; |
| 23 case GrGpuCommandBuffer::kLoadAndDiscard_LoadAndStoreOp: |
| 24 *loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; |
| 25 *storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; |
| 26 break; |
| 27 case GrGpuCommandBuffer::kClearAndStore_LoadAndStoreOp: |
| 28 *loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; |
| 29 *storeOp = VK_ATTACHMENT_STORE_OP_STORE; |
| 30 break; |
| 31 case GrGpuCommandBuffer::kClearAndDiscard_LoadAndStoreOp: |
| 32 *loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; |
| 33 *storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; |
| 34 break; |
| 35 case GrGpuCommandBuffer::kDiscardAndStore_LoadAndStoreOp: |
| 36 *loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; |
| 37 *storeOp = VK_ATTACHMENT_STORE_OP_STORE; |
| 38 break; |
| 39 case GrGpuCommandBuffer::kDiscardAndDiscard_LoadAndStoreOp: |
| 40 *loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; |
| 41 *storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; |
| 42 break; |
| 43 } |
| 44 } |
| 45 |
| 46 GrVkGpuCommandBuffer::GrVkGpuCommandBuffer(GrVkGpu* gpu, |
| 47 const GrVkRenderTarget& target, |
| 48 LoadAndStoreOp colorOp, GrColor color
Clear, |
| 49 LoadAndStoreOp stencilOp, GrColor ste
ncilClear) |
| 50 : fGpu(gpu) { |
| 51 VkAttachmentLoadOp vkLoadOp; |
| 52 VkAttachmentStoreOp vkStoreOp; |
| 53 |
| 54 get_vk_load_store_ops(colorOp, &vkLoadOp, &vkStoreOp); |
| 55 GrVkRenderPass::LoadStoreOps vkColorOps(vkLoadOp, vkStoreOp); |
| 56 |
| 57 get_vk_load_store_ops(stencilOp, &vkLoadOp, &vkStoreOp); |
| 58 GrVkRenderPass::LoadStoreOps vkStencilOps(vkLoadOp, vkStoreOp); |
| 59 |
| 60 GrVkRenderPass::LoadStoreOps vkResolveOps(VK_ATTACHMENT_LOAD_OP_LOAD, |
| 61 VK_ATTACHMENT_STORE_OP_STORE); |
| 62 |
| 63 const GrVkResourceProvider::CompatibleRPHandle& rpHandle = target.compatible
RenderPassHandle(); |
| 64 if (rpHandle.isValid()) { |
| 65 fRenderPass = fGpu->resourceProvider().findRenderPass(rpHandle, |
| 66 vkColorOps, |
| 67 vkResolveOps, |
| 68 vkStencilOps); |
| 69 } else { |
| 70 fRenderPass = fGpu->resourceProvider().findRenderPass(target, |
| 71 vkColorOps, |
| 72 vkResolveOps, |
| 73 vkStencilOps); |
| 74 } |
| 75 |
| 76 fCommandBuffer = GrVkSecondaryCommandBuffer::Create(gpu, gpu->cmdPool(), fRe
nderPass); |
| 77 fCommandBuffer->begin(gpu, target.framebuffer()); |
| 78 } |
| 79 |
| 80 GrVkGpuCommandBuffer::~GrVkGpuCommandBuffer() { |
| 81 fCommandBuffer->unref(fGpu); |
| 82 fRenderPass->unref(fGpu); |
| 83 } |
| 84 |
| 85 void GrVkGpuCommandBuffer::end() { |
| 86 fCommandBuffer->end(fGpu); |
| 87 } |
| 88 |
| 89 void GrVkGpuCommandBuffer::submit() { |
| 90 fGpu->submitSecondaryCommandBuffer(fCommandBuffer); |
| 91 } |
| 92 |
OLD | NEW |