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

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

Issue 2336763002: Lots of little cleanup improvements to Vulkan (Closed)
Patch Set: [ Created 4 years, 3 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/GrVkPipeline.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 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 "GrVkGpuCommandBuffer.h" 8 #include "GrVkGpuCommandBuffer.h"
9 9
10 #include "GrFixedClip.h" 10 #include "GrFixedClip.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 *storeOp = VK_ATTACHMENT_STORE_OP_STORE; 50 *storeOp = VK_ATTACHMENT_STORE_OP_STORE;
51 } 51 }
52 } 52 }
53 53
54 GrVkGpuCommandBuffer::GrVkGpuCommandBuffer(GrVkGpu* gpu, 54 GrVkGpuCommandBuffer::GrVkGpuCommandBuffer(GrVkGpu* gpu,
55 GrVkRenderTarget* target, 55 GrVkRenderTarget* target,
56 const LoadAndStoreInfo& colorInfo, 56 const LoadAndStoreInfo& colorInfo,
57 const LoadAndStoreInfo& stencilInfo) 57 const LoadAndStoreInfo& stencilInfo)
58 : fGpu(gpu) 58 : fGpu(gpu)
59 , fRenderTarget(target) 59 , fRenderTarget(target)
60 , fIsEmpty(true) { 60 , fIsEmpty(true)
61 , fStartsWithClear(false) {
61 VkAttachmentLoadOp vkLoadOp; 62 VkAttachmentLoadOp vkLoadOp;
62 VkAttachmentStoreOp vkStoreOp; 63 VkAttachmentStoreOp vkStoreOp;
63 64
64 get_vk_load_store_ops(colorInfo, &vkLoadOp, &vkStoreOp); 65 get_vk_load_store_ops(colorInfo, &vkLoadOp, &vkStoreOp);
65 GrVkRenderPass::LoadStoreOps vkColorOps(vkLoadOp, vkStoreOp); 66 GrVkRenderPass::LoadStoreOps vkColorOps(vkLoadOp, vkStoreOp);
66 67
67 get_vk_load_store_ops(stencilInfo, &vkLoadOp, &vkStoreOp); 68 get_vk_load_store_ops(stencilInfo, &vkLoadOp, &vkStoreOp);
68 GrVkRenderPass::LoadStoreOps vkStencilOps(vkLoadOp, vkStoreOp); 69 GrVkRenderPass::LoadStoreOps vkStencilOps(vkLoadOp, vkStoreOp);
69 70
70 GrVkRenderPass::LoadStoreOps vkResolveOps(VK_ATTACHMENT_LOAD_OP_LOAD, 71 GrVkRenderPass::LoadStoreOps vkResolveOps(VK_ATTACHMENT_LOAD_OP_LOAD,
(...skipping 23 matching lines...) Expand all
94 fRenderPass->unref(fGpu); 95 fRenderPass->unref(fGpu);
95 } 96 }
96 97
97 GrGpu* GrVkGpuCommandBuffer::gpu() { return fGpu; } 98 GrGpu* GrVkGpuCommandBuffer::gpu() { return fGpu; }
98 99
99 void GrVkGpuCommandBuffer::end() { 100 void GrVkGpuCommandBuffer::end() {
100 fCommandBuffer->end(fGpu); 101 fCommandBuffer->end(fGpu);
101 } 102 }
102 103
103 void GrVkGpuCommandBuffer::onSubmit(const SkIRect& bounds) { 104 void GrVkGpuCommandBuffer::onSubmit(const SkIRect& bounds) {
105 if (fIsEmpty && !fStartsWithClear) {
106 // We have sumbitted no actual draw commands to the command buffer and w e are not using
107 // the render pass to do a clear so there is no need to submit anything.
108 return;
109 }
110
104 // Change layout of our render target so it can be used as the color attachm ent. Currently 111 // Change layout of our render target so it can be used as the color attachm ent. Currently
105 // we don't attach the resolve to the framebuffer so no need to change its l ayout. 112 // we don't attach the resolve to the framebuffer so no need to change its l ayout.
106 GrVkImage* targetImage = fRenderTarget->msaaImage() ? fRenderTarget->msaaIma ge() 113 GrVkImage* targetImage = fRenderTarget->msaaImage() ? fRenderTarget->msaaIma ge()
107 : fRenderTarget; 114 : fRenderTarget;
108 targetImage->setImageLayout(fGpu, 115 targetImage->setImageLayout(fGpu,
109 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, 116 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
110 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, 117 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
111 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 118 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
112 false); 119 false);
113 120
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 vkStencilOps); 155 vkStencilOps);
149 } else { 156 } else {
150 fRenderPass = fGpu->resourceProvider().findRenderPass(*vkRT, 157 fRenderPass = fGpu->resourceProvider().findRenderPass(*vkRT,
151 vkColorOps, 158 vkColorOps,
152 vkResolveOps, 159 vkResolveOps,
153 vkStencilOps); 160 vkStencilOps);
154 } 161 }
155 162
156 SkASSERT(fRenderPass->isCompatible(*oldRP)); 163 SkASSERT(fRenderPass->isCompatible(*oldRP));
157 oldRP->unref(fGpu); 164 oldRP->unref(fGpu);
165 fStartsWithClear = false;
158 } 166 }
159 } 167 }
160 168
161 void GrVkGpuCommandBuffer::onClearStencilClip(GrRenderTarget* target, 169 void GrVkGpuCommandBuffer::onClearStencilClip(GrRenderTarget* target,
162 const GrFixedClip& clip, 170 const GrFixedClip& clip,
163 bool insideStencilMask) { 171 bool insideStencilMask) {
164 SkASSERT(target); 172 SkASSERT(target);
165 SkASSERT(!clip.hasWindowRectangles()); 173 SkASSERT(!clip.hasWindowRectangles());
166 174
167 GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(target); 175 GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(target);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 fRenderPass = fGpu->resourceProvider().findRenderPass(*vkRT, 253 fRenderPass = fGpu->resourceProvider().findRenderPass(*vkRT,
246 vkColorOps, 254 vkColorOps,
247 vkResolveOps, 255 vkResolveOps,
248 vkStencilOps); 256 vkStencilOps);
249 } 257 }
250 258
251 SkASSERT(fRenderPass->isCompatible(*oldRP)); 259 SkASSERT(fRenderPass->isCompatible(*oldRP));
252 oldRP->unref(fGpu); 260 oldRP->unref(fGpu);
253 261
254 GrColorToRGBAFloat(color, fColorClearValue.color.float32); 262 GrColorToRGBAFloat(color, fColorClearValue.color.float32);
263 fStartsWithClear = true;
255 return; 264 return;
256 } 265 }
257 266
258 // We always do a sub rect clear with clearAttachments since we are inside a render pass 267 // We always do a sub rect clear with clearAttachments since we are inside a render pass
259 VkClearRect clearRect; 268 VkClearRect clearRect;
260 // Flip rect if necessary 269 // Flip rect if necessary
261 SkIRect vkRect; 270 SkIRect vkRect;
262 if (!clip.scissorEnabled()) { 271 if (!clip.scissorEnabled()) {
263 vkRect.setXYWH(0, 0, vkRT->width(), vkRT->height()); 272 vkRect.setXYWH(0, 0, vkRT->width(), vkRT->height());
264 } else if (kBottomLeft_GrSurfaceOrigin != vkRT->origin()) { 273 } else if (kBottomLeft_GrSurfaceOrigin != vkRT->origin()) {
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 fGpu->stats()->incNumDraws(); 445 fGpu->stats()->incNumDraws();
437 } while ((nonIdxMesh = iter.next())); 446 } while ((nonIdxMesh = iter.next()));
438 } 447 }
439 448
440 // Technically we don't have to call this here (since there is a safety chec k in 449 // Technically we don't have to call this here (since there is a safety chec k in
441 // pipelineState:setData but this will allow for quicker freeing of resource s if the 450 // pipelineState:setData but this will allow for quicker freeing of resource s if the
442 // pipelineState sits in a cache for a while. 451 // pipelineState sits in a cache for a while.
443 pipelineState->freeTempResources(fGpu); 452 pipelineState->freeTempResources(fGpu);
444 } 453 }
445 454
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkGpuCommandBuffer.h ('k') | src/gpu/vk/GrVkPipeline.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698