Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(996)

Side by Side Diff: src/gpu/vk/GrVkGpuCommandBuffer.cpp

Issue 2038583002: Add GpuCommandBuffer support. (Closed) Base URL: https://skia.googlesource.com/skia.git@secondaryCB
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/vk/GrVkGpuCommandBuffer.h ('k') | src/gpu/vk/GrVkRenderTarget.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkGpuCommandBuffer.h ('k') | src/gpu/vk/GrVkRenderTarget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698