| 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" | 
| 11 #include "GrVkImageView.h" | 11 #include "GrVkImageView.h" | 
|  | 12 #include "GrVkPipeline.h" | 
| 12 #include "GrVkRenderPass.h" | 13 #include "GrVkRenderPass.h" | 
| 13 #include "GrVkRenderTarget.h" | 14 #include "GrVkRenderTarget.h" | 
| 14 #include "GrVkProgram.h" | 15 #include "GrVkProgram.h" | 
| 15 #include "GrVkTransferBuffer.h" | 16 #include "GrVkTransferBuffer.h" | 
| 16 #include "GrVkUtil.h" | 17 #include "GrVkUtil.h" | 
| 17 | 18 | 
| 18 GrVkCommandBuffer* GrVkCommandBuffer::Create(const GrVkGpu* gpu, VkCommandPool c
     mdPool) { | 19 GrVkCommandBuffer* GrVkCommandBuffer::Create(const GrVkGpu* gpu, VkCommandPool c
     mdPool) { | 
| 19     const VkCommandBufferAllocateInfo cmdInfo = { | 20     const VkCommandBufferAllocateInfo cmdInfo = { | 
| 20         VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,   // sType | 21         VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,   // sType | 
| 21         NULL,                                             // pNext | 22         NULL,                                             // pNext | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 33     } | 34     } | 
| 34     return new GrVkCommandBuffer(cmdBuffer); | 35     return new GrVkCommandBuffer(cmdBuffer); | 
| 35 } | 36 } | 
| 36 | 37 | 
| 37 GrVkCommandBuffer::~GrVkCommandBuffer() { | 38 GrVkCommandBuffer::~GrVkCommandBuffer() { | 
| 38     // Should have ended any render pass we're in the middle of | 39     // Should have ended any render pass we're in the middle of | 
| 39     SkASSERT(!fActiveRenderPass); | 40     SkASSERT(!fActiveRenderPass); | 
| 40 } | 41 } | 
| 41 | 42 | 
| 42 void GrVkCommandBuffer::invalidateState() { | 43 void GrVkCommandBuffer::invalidateState() { | 
| 43     fBoundVertexBuffer = 0; | 44     fBoundVertexBuffer = VK_NULL_HANDLE; | 
| 44     fBoundVertexBufferIsValid = false; | 45     fBoundVertexBufferIsValid = false; | 
| 45     fBoundIndexBuffer = 0; | 46     fBoundIndexBuffer = VK_NULL_HANDLE; | 
| 46     fBoundIndexBufferIsValid = false; | 47     fBoundIndexBufferIsValid = false; | 
|  | 48 | 
|  | 49     memset(&fCachedViewport, 0, sizeof(VkViewport)); | 
|  | 50     fCachedViewport.width = - 1.0f; // Viewport must have a width greater than 0 | 
|  | 51 | 
|  | 52     memset(&fCachedScissor, 0, sizeof(VkRect2D)); | 
|  | 53     fCachedScissor.offset.x = -1; // Scissor offset must be greater that 0 to be
      valid | 
|  | 54 | 
|  | 55     for (int i = 0; i < 4; ++i) { | 
|  | 56         fCachedBlendConstant[i] = -1.0; | 
|  | 57     } | 
| 47 } | 58 } | 
| 48 | 59 | 
| 49 void GrVkCommandBuffer::freeGPUData(const GrVkGpu* gpu) const { | 60 void GrVkCommandBuffer::freeGPUData(const GrVkGpu* gpu) const { | 
| 50     SkASSERT(!fIsActive); | 61     SkASSERT(!fIsActive); | 
| 51     SkASSERT(!fActiveRenderPass); | 62     SkASSERT(!fActiveRenderPass); | 
| 52     for (int i = 0; i < fTrackedResources.count(); ++i) { | 63     for (int i = 0; i < fTrackedResources.count(); ++i) { | 
| 53         fTrackedResources[i]->unref(gpu); | 64         fTrackedResources[i]->unref(gpu); | 
| 54     } | 65     } | 
| 55 | 66 | 
| 56     // Destroy the fence, if any | 67     // Destroy the fence, if any | 
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 348                                                          VK_PIPELINE_BIND_POINT_
     GRAPHICS, | 359                                                          VK_PIPELINE_BIND_POINT_
     GRAPHICS, | 
| 349                                                          layout, | 360                                                          layout, | 
| 350                                                          firstSet, | 361                                                          firstSet, | 
| 351                                                          setCount, | 362                                                          setCount, | 
| 352                                                          descriptorSets, | 363                                                          descriptorSets, | 
| 353                                                          dynamicOffsetCount, | 364                                                          dynamicOffsetCount, | 
| 354                                                          dynamicOffsets)); | 365                                                          dynamicOffsets)); | 
| 355     program->addUniformResources(*this); | 366     program->addUniformResources(*this); | 
| 356 } | 367 } | 
| 357 | 368 | 
|  | 369 void GrVkCommandBuffer::bindPipeline(const GrVkGpu* gpu, const GrVkPipeline* pip
     eline) { | 
|  | 370     SkASSERT(fIsActive); | 
|  | 371     SkASSERT(fActiveRenderPass); | 
|  | 372     GR_VK_CALL(gpu->vkInterface(), CmdBindPipeline(fCmdBuffer, | 
|  | 373                                                    VK_PIPELINE_BIND_POINT_GRAPHI
     CS, | 
|  | 374                                                    pipeline->pipeline())); | 
|  | 375     addResource(pipeline); | 
|  | 376 } | 
|  | 377 | 
| 358 void GrVkCommandBuffer::drawIndexed(const GrVkGpu* gpu, | 378 void GrVkCommandBuffer::drawIndexed(const GrVkGpu* gpu, | 
| 359                                     uint32_t indexCount, | 379                                     uint32_t indexCount, | 
| 360                                     uint32_t instanceCount, | 380                                     uint32_t instanceCount, | 
| 361                                     uint32_t firstIndex, | 381                                     uint32_t firstIndex, | 
| 362                                     int32_t vertexOffset, | 382                                     int32_t vertexOffset, | 
| 363                                     uint32_t firstInstance) const { | 383                                     uint32_t firstInstance) const { | 
| 364     SkASSERT(fIsActive); | 384     SkASSERT(fIsActive); | 
| 365     SkASSERT(fActiveRenderPass); | 385     SkASSERT(fActiveRenderPass); | 
| 366     GR_VK_CALL(gpu->vkInterface(), CmdDrawIndexed(fCmdBuffer, | 386     GR_VK_CALL(gpu->vkInterface(), CmdDrawIndexed(fCmdBuffer, | 
| 367                                                   indexCount, | 387                                                   indexCount, | 
| 368                                                   instanceCount, | 388                                                   instanceCount, | 
| 369                                                   firstIndex, | 389                                                   firstIndex, | 
| 370                                                   vertexOffset, | 390                                                   vertexOffset, | 
| 371                                                   firstInstance)); | 391                                                   firstInstance)); | 
| 372 } | 392 } | 
| 373 | 393 | 
| 374 void GrVkCommandBuffer::draw(const GrVkGpu* gpu, | 394 void GrVkCommandBuffer::draw(const GrVkGpu* gpu, | 
| 375                              uint32_t vertexCount, | 395                              uint32_t vertexCount, | 
| 376                              uint32_t instanceCount, | 396                              uint32_t instanceCount, | 
| 377                              uint32_t firstVertex, | 397                              uint32_t firstVertex, | 
| 378                              uint32_t firstInstance) const { | 398                              uint32_t firstInstance) const { | 
| 379     SkASSERT(fIsActive); | 399     SkASSERT(fIsActive); | 
| 380     SkASSERT(fActiveRenderPass); | 400     SkASSERT(fActiveRenderPass); | 
| 381     GR_VK_CALL(gpu->vkInterface(), CmdDraw(fCmdBuffer, | 401     GR_VK_CALL(gpu->vkInterface(), CmdDraw(fCmdBuffer, | 
| 382                                            vertexCount, | 402                                            vertexCount, | 
| 383                                            instanceCount, | 403                                            instanceCount, | 
| 384                                            firstVertex, | 404                                            firstVertex, | 
| 385                                            firstInstance)); | 405                                            firstInstance)); | 
| 386 } | 406 } | 
|  | 407 | 
|  | 408 void GrVkCommandBuffer::setViewport(const GrVkGpu* gpu, | 
|  | 409                                     uint32_t firstViewport, | 
|  | 410                                     uint32_t viewportCount, | 
|  | 411                                     const VkViewport* viewports) { | 
|  | 412     SkASSERT(fIsActive); | 
|  | 413     SkASSERT(1 == viewportCount); | 
|  | 414     if (memcmp(viewports, &fCachedViewport, sizeof(VkViewport))) { | 
|  | 415         GR_VK_CALL(gpu->vkInterface(), CmdSetViewport(fCmdBuffer, | 
|  | 416                                                       firstViewport, | 
|  | 417                                                       viewportCount, | 
|  | 418                                                       viewports)); | 
|  | 419         fCachedViewport = viewports[0]; | 
|  | 420     } | 
|  | 421 } | 
|  | 422 | 
|  | 423 void GrVkCommandBuffer::setScissor(const GrVkGpu* gpu, | 
|  | 424                                    uint32_t firstScissor, | 
|  | 425                                    uint32_t scissorCount, | 
|  | 426                                    const VkRect2D* scissors) { | 
|  | 427     SkASSERT(fIsActive); | 
|  | 428     SkASSERT(1 == scissorCount); | 
|  | 429     if (memcmp(scissors, &fCachedScissor, sizeof(VkRect2D))) { | 
|  | 430         GR_VK_CALL(gpu->vkInterface(), CmdSetScissor(fCmdBuffer, | 
|  | 431                                                      firstScissor, | 
|  | 432                                                      scissorCount, | 
|  | 433                                                      scissors)); | 
|  | 434         fCachedScissor = scissors[0]; | 
|  | 435     } | 
|  | 436 } | 
|  | 437 | 
|  | 438 void GrVkCommandBuffer::setBlendConstants(const GrVkGpu* gpu, | 
|  | 439                                           const float blendConstants[4]) { | 
|  | 440     SkASSERT(fIsActive); | 
|  | 441     if (memcmp(blendConstants, fCachedBlendConstant, 4 * sizeof(float))) { | 
|  | 442         GR_VK_CALL(gpu->vkInterface(), CmdSetBlendConstants(fCmdBuffer, blendCon
     stants)); | 
|  | 443         memcpy(fCachedBlendConstant, blendConstants, 4 * sizeof(float)); | 
|  | 444     } | 
|  | 445 } | 
| OLD | NEW | 
|---|