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

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

Issue 2078483002: Start using GrGpuCommandBuffer in GrDrawTarget. (Closed) Base URL: https://skia.googlesource.com/skia.git@memoryWAR
Patch Set: remove errant lines 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/GrVkCommandBuffer.h ('k') | src/gpu/vk/GrVkGpu.h » ('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 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"
11 #include "GrVkImageView.h" 11 #include "GrVkImageView.h"
12 #include "GrVkPipeline.h" 12 #include "GrVkPipeline.h"
13 #include "GrVkRenderPass.h" 13 #include "GrVkRenderPass.h"
14 #include "GrVkRenderTarget.h" 14 #include "GrVkRenderTarget.h"
15 #include "GrVkPipelineState.h" 15 #include "GrVkPipelineState.h"
16 #include "GrVkTransferBuffer.h" 16 #include "GrVkTransferBuffer.h"
17 #include "GrVkUtil.h" 17 #include "GrVkUtil.h"
18 18 #include "SkRect.h"
19
20 GrVkCommandBuffer::~GrVkCommandBuffer() {
21 // Should have ended any render pass we're in the middle of
22 SkASSERT(!fActiveRenderPass);
23 }
24 19
25 void GrVkCommandBuffer::invalidateState() { 20 void GrVkCommandBuffer::invalidateState() {
26 fBoundVertexBuffer = VK_NULL_HANDLE; 21 fBoundVertexBuffer = VK_NULL_HANDLE;
27 fBoundVertexBufferIsValid = false; 22 fBoundVertexBufferIsValid = false;
28 fBoundIndexBuffer = VK_NULL_HANDLE; 23 fBoundIndexBuffer = VK_NULL_HANDLE;
29 fBoundIndexBufferIsValid = false; 24 fBoundIndexBufferIsValid = false;
30 25
31 memset(&fCachedViewport, 0, sizeof(VkViewport)); 26 memset(&fCachedViewport, 0, sizeof(VkViewport));
32 fCachedViewport.width = - 1.0f; // Viewport must have a width greater than 0 27 fCachedViewport.width = - 1.0f; // Viewport must have a width greater than 0
33 28
34 memset(&fCachedScissor, 0, sizeof(VkRect2D)); 29 memset(&fCachedScissor, 0, sizeof(VkRect2D));
35 fCachedScissor.offset.x = -1; // Scissor offset must be greater that 0 to be valid 30 fCachedScissor.offset.x = -1; // Scissor offset must be greater that 0 to be valid
36 31
37 for (int i = 0; i < 4; ++i) { 32 for (int i = 0; i < 4; ++i) {
38 fCachedBlendConstant[i] = -1.0; 33 fCachedBlendConstant[i] = -1.0;
39 } 34 }
40 } 35 }
41 36
42 void GrVkCommandBuffer::freeGPUData(const GrVkGpu* gpu) const { 37 void GrVkCommandBuffer::freeGPUData(const GrVkGpu* gpu) const {
43 SkASSERT(!fIsActive); 38 SkASSERT(!fIsActive);
44 SkASSERT(!fActiveRenderPass);
45 for (int i = 0; i < fTrackedResources.count(); ++i) { 39 for (int i = 0; i < fTrackedResources.count(); ++i) {
46 fTrackedResources[i]->unref(gpu); 40 fTrackedResources[i]->unref(gpu);
47 } 41 }
48 42
49 // Destroy the fence, if any
50 if (VK_NULL_HANDLE != fSubmitFence) {
51 GR_VK_CALL(gpu->vkInterface(), DestroyFence(gpu->device(), fSubmitFence, nullptr));
52 }
53
54 GR_VK_CALL(gpu->vkInterface(), FreeCommandBuffers(gpu->device(), gpu->cmdPoo l(), 43 GR_VK_CALL(gpu->vkInterface(), FreeCommandBuffers(gpu->device(), gpu->cmdPoo l(),
55 1, &fCmdBuffer)); 44 1, &fCmdBuffer));
45
46 this->onFreeGPUData(gpu);
56 } 47 }
57 48
58 void GrVkCommandBuffer::abandonSubResources() const { 49 void GrVkCommandBuffer::abandonSubResources() const {
59 for (int i = 0; i < fTrackedResources.count(); ++i) { 50 for (int i = 0; i < fTrackedResources.count(); ++i) {
60 fTrackedResources[i]->unrefAndAbandon(); 51 fTrackedResources[i]->unrefAndAbandon();
61 } 52 }
62 } 53 }
63 54
64 //////////////////////////////////////////////////////////////////////////////// 55 ////////////////////////////////////////////////////////////////////////////////
65 // CommandBuffer commands 56 // CommandBuffer commands
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 SkASSERT(fIsActive); 224 SkASSERT(fIsActive);
234 if (memcmp(blendConstants, fCachedBlendConstant, 4 * sizeof(float))) { 225 if (memcmp(blendConstants, fCachedBlendConstant, 4 * sizeof(float))) {
235 GR_VK_CALL(gpu->vkInterface(), CmdSetBlendConstants(fCmdBuffer, blendCon stants)); 226 GR_VK_CALL(gpu->vkInterface(), CmdSetBlendConstants(fCmdBuffer, blendCon stants));
236 memcpy(fCachedBlendConstant, blendConstants, 4 * sizeof(float)); 227 memcpy(fCachedBlendConstant, blendConstants, 4 * sizeof(float));
237 } 228 }
238 } 229 }
239 230
240 /////////////////////////////////////////////////////////////////////////////// 231 ///////////////////////////////////////////////////////////////////////////////
241 // PrimaryCommandBuffer 232 // PrimaryCommandBuffer
242 //////////////////////////////////////////////////////////////////////////////// 233 ////////////////////////////////////////////////////////////////////////////////
234 GrVkPrimaryCommandBuffer::~GrVkPrimaryCommandBuffer() {
235 // Should have ended any render pass we're in the middle of
236 SkASSERT(!fActiveRenderPass);
237 }
238
243 GrVkPrimaryCommandBuffer* GrVkPrimaryCommandBuffer::Create(const GrVkGpu* gpu, 239 GrVkPrimaryCommandBuffer* GrVkPrimaryCommandBuffer::Create(const GrVkGpu* gpu,
244 VkCommandPool cmdPool ) { 240 VkCommandPool cmdPool ) {
245 const VkCommandBufferAllocateInfo cmdInfo = { 241 const VkCommandBufferAllocateInfo cmdInfo = {
246 VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // sType 242 VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // sType
247 NULL, // pNext 243 NULL, // pNext
248 cmdPool, // commandPool 244 cmdPool, // commandPool
249 VK_COMMAND_BUFFER_LEVEL_PRIMARY, // level 245 VK_COMMAND_BUFFER_LEVEL_PRIMARY, // level
250 1 // bufferCount 246 1 // bufferCount
251 }; 247 };
252 248
(...skipping 23 matching lines...) Expand all
276 272
277 void GrVkPrimaryCommandBuffer::end(const GrVkGpu* gpu) { 273 void GrVkPrimaryCommandBuffer::end(const GrVkGpu* gpu) {
278 SkASSERT(fIsActive); 274 SkASSERT(fIsActive);
279 SkASSERT(!fActiveRenderPass); 275 SkASSERT(!fActiveRenderPass);
280 GR_VK_CALL_ERRCHECK(gpu->vkInterface(), EndCommandBuffer(fCmdBuffer)); 276 GR_VK_CALL_ERRCHECK(gpu->vkInterface(), EndCommandBuffer(fCmdBuffer));
281 this->invalidateState(); 277 this->invalidateState();
282 fIsActive = false; 278 fIsActive = false;
283 } 279 }
284 280
285 void GrVkPrimaryCommandBuffer::beginRenderPass(const GrVkGpu* gpu, 281 void GrVkPrimaryCommandBuffer::beginRenderPass(const GrVkGpu* gpu,
286 const GrVkRenderPass* renderPass, 282 const GrVkRenderPass* renderPass,
287 const GrVkRenderTarget& target) { 283 uint32_t clearCount,
284 const VkClearValue* clearValues,
285 const GrVkRenderTarget& target,
286 const SkIRect& bounds,
287 bool forSecondaryCB) {
288 SkASSERT(fIsActive); 288 SkASSERT(fIsActive);
289 SkASSERT(!fActiveRenderPass); 289 SkASSERT(!fActiveRenderPass);
290 SkASSERT(renderPass->isCompatible(target));
291
290 VkRenderPassBeginInfo beginInfo; 292 VkRenderPassBeginInfo beginInfo;
291 VkSubpassContents contents; 293 VkRect2D renderArea;
292 renderPass->getBeginInfo(target, &beginInfo, &contents); 294 renderArea.offset = { bounds.fLeft , bounds.fTop };
295 renderArea.extent = { (uint32_t)bounds.width(), (uint32_t)bounds.height() };
296
297 memset(&beginInfo, 0, sizeof(VkRenderPassBeginInfo));
298 beginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
299 beginInfo.pNext = nullptr;
300 beginInfo.renderPass = renderPass->vkRenderPass();
301 beginInfo.framebuffer = target.framebuffer()->framebuffer();
302 beginInfo.renderArea = renderArea;
303 beginInfo.clearValueCount = clearCount;
304 beginInfo.pClearValues = clearValues;
305
306 VkSubpassContents contents = forSecondaryCB ? VK_SUBPASS_CONTENTS_SECONDARY_ COMMAND_BUFFERS
307 : VK_SUBPASS_CONTENTS_INLINE;
308
293 GR_VK_CALL(gpu->vkInterface(), CmdBeginRenderPass(fCmdBuffer, &beginInfo, co ntents)); 309 GR_VK_CALL(gpu->vkInterface(), CmdBeginRenderPass(fCmdBuffer, &beginInfo, co ntents));
294 fActiveRenderPass = renderPass; 310 fActiveRenderPass = renderPass;
295 this->addResource(renderPass); 311 this->addResource(renderPass);
296 target.addResources(*this); 312 target.addResources(*this);
297 } 313 }
298 314
299 void GrVkPrimaryCommandBuffer::endRenderPass(const GrVkGpu* gpu) { 315 void GrVkPrimaryCommandBuffer::endRenderPass(const GrVkGpu* gpu) {
300 SkASSERT(fIsActive); 316 SkASSERT(fIsActive);
301 SkASSERT(fActiveRenderPass); 317 SkASSERT(fActiveRenderPass);
302 GR_VK_CALL(gpu->vkInterface(), CmdEndRenderPass(fCmdBuffer)); 318 GR_VK_CALL(gpu->vkInterface(), CmdEndRenderPass(fCmdBuffer));
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 SkASSERT(!fActiveRenderPass); 500 SkASSERT(!fActiveRenderPass);
485 this->addResource(image->resource()); 501 this->addResource(image->resource());
486 GR_VK_CALL(gpu->vkInterface(), CmdClearDepthStencilImage(fCmdBuffer, 502 GR_VK_CALL(gpu->vkInterface(), CmdClearDepthStencilImage(fCmdBuffer,
487 image->image(), 503 image->image(),
488 image->currentLayou t(), 504 image->currentLayou t(),
489 color, 505 color,
490 subRangeCount, 506 subRangeCount,
491 subRanges)); 507 subRanges));
492 } 508 }
493 509
510 void GrVkPrimaryCommandBuffer::onFreeGPUData(const GrVkGpu* gpu) const {
511 SkASSERT(!fActiveRenderPass);
512 // Destroy the fence, if any
513 if (VK_NULL_HANDLE != fSubmitFence) {
514 GR_VK_CALL(gpu->vkInterface(), DestroyFence(gpu->device(), fSubmitFence, nullptr));
515 }
516 }
517
494 /////////////////////////////////////////////////////////////////////////////// 518 ///////////////////////////////////////////////////////////////////////////////
495 // SecondaryCommandBuffer 519 // SecondaryCommandBuffer
496 //////////////////////////////////////////////////////////////////////////////// 520 ////////////////////////////////////////////////////////////////////////////////
497 521
498 GrVkSecondaryCommandBuffer* GrVkSecondaryCommandBuffer::Create( 522 GrVkSecondaryCommandBuffer* GrVkSecondaryCommandBuffer::Create(
499 const GrVkGpu* gpu, 523 const GrVkGpu* gpu,
500 VkCommandPool cmdPool, 524 VkCommandPool cmdPool,
501 const GrVkRenderPass* com patibleRenderPass) { 525 const GrVkRenderPass* com patibleRenderPass) {
502 const VkCommandBufferAllocateInfo cmdInfo = { 526 const VkCommandBufferAllocateInfo cmdInfo = {
503 VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // sType 527 VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // sType
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 fIsActive = true; 570 fIsActive = true;
547 } 571 }
548 572
549 void GrVkSecondaryCommandBuffer::end(const GrVkGpu* gpu) { 573 void GrVkSecondaryCommandBuffer::end(const GrVkGpu* gpu) {
550 SkASSERT(fIsActive); 574 SkASSERT(fIsActive);
551 GR_VK_CALL_ERRCHECK(gpu->vkInterface(), EndCommandBuffer(fCmdBuffer)); 575 GR_VK_CALL_ERRCHECK(gpu->vkInterface(), EndCommandBuffer(fCmdBuffer));
552 this->invalidateState(); 576 this->invalidateState();
553 fIsActive = false; 577 fIsActive = false;
554 } 578 }
555 579
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkCommandBuffer.h ('k') | src/gpu/vk/GrVkGpu.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698