| Index: src/gpu/vk/GrVkCommandBuffer.cpp
|
| diff --git a/src/gpu/vk/GrVkCommandBuffer.cpp b/src/gpu/vk/GrVkCommandBuffer.cpp
|
| deleted file mode 100644
|
| index e43c50fc4ac44bdeaeb546002cc86fd6a614f920..0000000000000000000000000000000000000000
|
| --- a/src/gpu/vk/GrVkCommandBuffer.cpp
|
| +++ /dev/null
|
| @@ -1,371 +0,0 @@
|
| -/*
|
| -* Copyright 2015 Google Inc.
|
| -*
|
| -* Use of this source code is governed by a BSD-style license that can be
|
| -* found in the LICENSE file.
|
| -*/
|
| -
|
| -#include "GrVkCommandBuffer.h"
|
| -
|
| -#include "GrVkFramebuffer.h"
|
| -#include "GrVkImageView.h"
|
| -#include "GrVkRenderPass.h"
|
| -#include "GrVkRenderTarget.h"
|
| -#include "GrVkProgram.h"
|
| -#include "GrVkTransferBuffer.h"
|
| -#include "GrVkUtil.h"
|
| -
|
| -GrVkCommandBuffer* GrVkCommandBuffer::Create(const GrVkGpu* gpu, VkCommandPool cmdPool) {
|
| - const VkCommandBufferAllocateInfo cmdInfo = {
|
| - VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // sType
|
| - NULL, // pNext
|
| - cmdPool, // commandPool
|
| - VK_COMMAND_BUFFER_LEVEL_PRIMARY, // level
|
| - 1 // bufferCount
|
| - };
|
| -
|
| - VkCommandBuffer cmdBuffer;
|
| - VkResult err = GR_VK_CALL(gpu->vkInterface(), AllocateCommandBuffers(gpu->device(),
|
| - &cmdInfo,
|
| - &cmdBuffer));
|
| - if (err) {
|
| - return nullptr;
|
| - }
|
| - return new GrVkCommandBuffer(cmdBuffer);
|
| -}
|
| -
|
| -GrVkCommandBuffer::~GrVkCommandBuffer() {
|
| - // Should have ended any render pass we're in the middle of
|
| - SkASSERT(!fActiveRenderPass);
|
| -}
|
| -
|
| -void GrVkCommandBuffer::invalidateState() {
|
| - fBoundVertexBuffer = 0;
|
| - fBoundVertexBufferIsValid = false;
|
| - fBoundIndexBuffer = 0;
|
| - fBoundIndexBufferIsValid = false;
|
| -}
|
| -
|
| -void GrVkCommandBuffer::freeGPUData(const GrVkGpu* gpu) const {
|
| - SkASSERT(!fIsActive);
|
| - SkASSERT(!fActiveRenderPass);
|
| - for (int i = 0; i < fTrackedResources.count(); ++i) {
|
| - fTrackedResources[i]->unref(gpu);
|
| - }
|
| -
|
| - // Destroy the fence, if any
|
| - if (VK_NULL_HANDLE != fSubmitFence) {
|
| - GR_VK_CALL(gpu->vkInterface(), DestroyFence(gpu->device(), fSubmitFence, nullptr));
|
| - }
|
| -
|
| - GR_VK_CALL(gpu->vkInterface(), FreeCommandBuffers(gpu->device(), gpu->cmdPool(),
|
| - 1, &fCmdBuffer));
|
| -}
|
| -
|
| -void GrVkCommandBuffer::abandonSubResources() const {
|
| - for (int i = 0; i < fTrackedResources.count(); ++i) {
|
| - fTrackedResources[i]->unrefAndAbandon();
|
| - }
|
| -}
|
| -
|
| -void GrVkCommandBuffer::begin(const GrVkGpu* gpu) {
|
| - SkASSERT(!fIsActive);
|
| - VkCommandBufferBeginInfo cmdBufferBeginInfo;
|
| - memset(&cmdBufferBeginInfo, 0, sizeof(VkCommandBufferBeginInfo));
|
| - cmdBufferBeginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
| - cmdBufferBeginInfo.pNext = nullptr;
|
| - cmdBufferBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
|
| - cmdBufferBeginInfo.pInheritanceInfo = nullptr;
|
| -
|
| - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), BeginCommandBuffer(fCmdBuffer,
|
| - &cmdBufferBeginInfo));
|
| - fIsActive = true;
|
| -}
|
| -
|
| -void GrVkCommandBuffer::end(const GrVkGpu* gpu) {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(!fActiveRenderPass);
|
| - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), EndCommandBuffer(fCmdBuffer));
|
| - this->invalidateState();
|
| - fIsActive = false;
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -void GrVkCommandBuffer::beginRenderPass(const GrVkGpu* gpu,
|
| - const GrVkRenderPass* renderPass,
|
| - const GrVkRenderTarget& target) {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(!fActiveRenderPass);
|
| - VkRenderPassBeginInfo beginInfo;
|
| - VkSubpassContents contents;
|
| - renderPass->getBeginInfo(target, &beginInfo, &contents);
|
| - GR_VK_CALL(gpu->vkInterface(), CmdBeginRenderPass(fCmdBuffer, &beginInfo, contents));
|
| - fActiveRenderPass = renderPass;
|
| - this->addResource(renderPass);
|
| - target.addResources(*this);
|
| -
|
| -}
|
| -
|
| -void GrVkCommandBuffer::endRenderPass(const GrVkGpu* gpu) {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(fActiveRenderPass);
|
| - GR_VK_CALL(gpu->vkInterface(), CmdEndRenderPass(fCmdBuffer));
|
| - fActiveRenderPass = nullptr;
|
| -}
|
| -
|
| -void GrVkCommandBuffer::submitToQueue(const GrVkGpu* gpu, VkQueue queue, GrVkGpu::SyncQueue sync) {
|
| - SkASSERT(!fIsActive);
|
| -
|
| - VkResult err;
|
| - VkFenceCreateInfo fenceInfo;
|
| - memset(&fenceInfo, 0, sizeof(VkFenceCreateInfo));
|
| - fenceInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
| - err = GR_VK_CALL(gpu->vkInterface(), CreateFence(gpu->device(), &fenceInfo, nullptr,
|
| - &fSubmitFence));
|
| - SkASSERT(!err);
|
| -
|
| - VkSubmitInfo submitInfo;
|
| - memset(&submitInfo, 0, sizeof(VkSubmitInfo));
|
| - submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
| - submitInfo.pNext = nullptr;
|
| - submitInfo.waitSemaphoreCount = 0;
|
| - submitInfo.pWaitSemaphores = nullptr;
|
| - submitInfo.commandBufferCount = 1;
|
| - submitInfo.pCommandBuffers = &fCmdBuffer;
|
| - submitInfo.signalSemaphoreCount = 0;
|
| - submitInfo.pSignalSemaphores = nullptr;
|
| - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), QueueSubmit(queue, 1, &submitInfo, fSubmitFence));
|
| -
|
| - if (GrVkGpu::kForce_SyncQueue == sync) {
|
| - err = GR_VK_CALL(gpu->vkInterface(),
|
| - WaitForFences(gpu->device(), 1, &fSubmitFence, true, UINT64_MAX));
|
| - if (VK_TIMEOUT == err) {
|
| - SkDebugf("Fence failed to signal: %d\n", err);
|
| - SkFAIL("failing");
|
| - }
|
| - SkASSERT(!err);
|
| -
|
| - // Destroy the fence
|
| - GR_VK_CALL(gpu->vkInterface(), DestroyFence(gpu->device(), fSubmitFence, nullptr));
|
| - fSubmitFence = VK_NULL_HANDLE;
|
| - }
|
| -}
|
| -
|
| -bool GrVkCommandBuffer::finished(const GrVkGpu* gpu) const {
|
| - if (VK_NULL_HANDLE == fSubmitFence) {
|
| - return true;
|
| - }
|
| -
|
| - VkResult err = GR_VK_CALL(gpu->vkInterface(), GetFenceStatus(gpu->device(), fSubmitFence));
|
| - switch (err) {
|
| - case VK_SUCCESS:
|
| - return true;
|
| -
|
| - case VK_NOT_READY:
|
| - return false;
|
| -
|
| - default:
|
| - SkDebugf("Error getting fence status: %d\n", err);
|
| - SkFAIL("failing");
|
| - break;
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// CommandBuffer commands
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -void GrVkCommandBuffer::pipelineBarrier(const GrVkGpu* gpu,
|
| - VkPipelineStageFlags srcStageMask,
|
| - VkPipelineStageFlags dstStageMask,
|
| - bool byRegion,
|
| - BarrierType barrierType,
|
| - void* barrier) const {
|
| - SkASSERT(fIsActive);
|
| - VkDependencyFlags dependencyFlags = byRegion ? VK_DEPENDENCY_BY_REGION_BIT : 0;
|
| -
|
| - switch (barrierType) {
|
| - case kMemory_BarrierType: {
|
| - const VkMemoryBarrier* barrierPtr = reinterpret_cast<VkMemoryBarrier*>(barrier);
|
| - GR_VK_CALL(gpu->vkInterface(), CmdPipelineBarrier(fCmdBuffer, srcStageMask,
|
| - dstStageMask, dependencyFlags,
|
| - 1, barrierPtr,
|
| - 0, nullptr,
|
| - 0, nullptr));
|
| - break;
|
| - }
|
| -
|
| - case kBufferMemory_BarrierType: {
|
| - const VkBufferMemoryBarrier* barrierPtr =
|
| - reinterpret_cast<VkBufferMemoryBarrier*>(barrier);
|
| - GR_VK_CALL(gpu->vkInterface(), CmdPipelineBarrier(fCmdBuffer, srcStageMask,
|
| - dstStageMask, dependencyFlags,
|
| - 0, nullptr,
|
| - 1, barrierPtr,
|
| - 0, nullptr));
|
| - break;
|
| - }
|
| -
|
| - case kImageMemory_BarrierType: {
|
| - const VkImageMemoryBarrier* barrierPtr =
|
| - reinterpret_cast<VkImageMemoryBarrier*>(barrier);
|
| - GR_VK_CALL(gpu->vkInterface(), CmdPipelineBarrier(fCmdBuffer, srcStageMask,
|
| - dstStageMask, dependencyFlags,
|
| - 0, nullptr,
|
| - 0, nullptr,
|
| - 1, barrierPtr));
|
| - break;
|
| - }
|
| - }
|
| -
|
| -}
|
| -
|
| -void GrVkCommandBuffer::copyImage(const GrVkGpu* gpu,
|
| - GrVkImage* srcImage,
|
| - VkImageLayout srcLayout,
|
| - GrVkImage* dstImage,
|
| - VkImageLayout dstLayout,
|
| - uint32_t copyRegionCount,
|
| - const VkImageCopy* copyRegions) {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(!fActiveRenderPass);
|
| - this->addResource(srcImage->resource());
|
| - this->addResource(dstImage->resource());
|
| - GR_VK_CALL(gpu->vkInterface(), CmdCopyImage(fCmdBuffer,
|
| - srcImage->textureImage(),
|
| - srcLayout,
|
| - dstImage->textureImage(),
|
| - dstLayout,
|
| - copyRegionCount,
|
| - copyRegions));
|
| -}
|
| -
|
| -void GrVkCommandBuffer::copyImageToBuffer(const GrVkGpu* gpu,
|
| - GrVkImage* srcImage,
|
| - VkImageLayout srcLayout,
|
| - GrVkTransferBuffer* dstBuffer,
|
| - uint32_t copyRegionCount,
|
| - const VkBufferImageCopy* copyRegions) {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(!fActiveRenderPass);
|
| - this->addResource(srcImage->resource());
|
| - this->addResource(dstBuffer->resource());
|
| - GR_VK_CALL(gpu->vkInterface(), CmdCopyImageToBuffer(fCmdBuffer,
|
| - srcImage->textureImage(),
|
| - srcLayout,
|
| - dstBuffer->buffer(),
|
| - copyRegionCount,
|
| - copyRegions));
|
| -}
|
| -
|
| -void GrVkCommandBuffer::copyBufferToImage(const GrVkGpu* gpu,
|
| - GrVkTransferBuffer* srcBuffer,
|
| - GrVkImage* dstImage,
|
| - VkImageLayout dstLayout,
|
| - uint32_t copyRegionCount,
|
| - const VkBufferImageCopy* copyRegions) {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(!fActiveRenderPass);
|
| - this->addResource(srcBuffer->resource());
|
| - this->addResource(dstImage->resource());
|
| - GR_VK_CALL(gpu->vkInterface(), CmdCopyBufferToImage(fCmdBuffer,
|
| - srcBuffer->buffer(),
|
| - dstImage->textureImage(),
|
| - dstLayout,
|
| - copyRegionCount,
|
| - copyRegions));
|
| -}
|
| -
|
| -void GrVkCommandBuffer::clearColorImage(const GrVkGpu* gpu,
|
| - GrVkImage* image,
|
| - const VkClearColorValue* color,
|
| - uint32_t subRangeCount,
|
| - const VkImageSubresourceRange* subRanges) {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(!fActiveRenderPass);
|
| - this->addResource(image->resource());
|
| - GR_VK_CALL(gpu->vkInterface(), CmdClearColorImage(fCmdBuffer,
|
| - image->textureImage(),
|
| - image->currentLayout(),
|
| - color,
|
| - subRangeCount,
|
| - subRanges));
|
| -}
|
| -
|
| -void GrVkCommandBuffer::clearAttachments(const GrVkGpu* gpu,
|
| - int numAttachments,
|
| - const VkClearAttachment* attachments,
|
| - int numRects,
|
| - const VkClearRect* clearRects) const {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(fActiveRenderPass);
|
| - SkASSERT(numAttachments > 0);
|
| - SkASSERT(numRects > 0);
|
| -#ifdef SK_DEBUG
|
| - for (int i = 0; i < numAttachments; ++i) {
|
| - if (attachments[i].aspectMask == VK_IMAGE_ASPECT_COLOR_BIT) {
|
| - uint32_t testIndex;
|
| - SkAssertResult(fActiveRenderPass->colorAttachmentIndex(&testIndex));
|
| - SkASSERT(testIndex == attachments[i].colorAttachment);
|
| - }
|
| - }
|
| -#endif
|
| - GR_VK_CALL(gpu->vkInterface(), CmdClearAttachments(fCmdBuffer,
|
| - numAttachments,
|
| - attachments,
|
| - numRects,
|
| - clearRects));
|
| -}
|
| -
|
| -void GrVkCommandBuffer::bindDescriptorSets(const GrVkGpu* gpu,
|
| - GrVkProgram* program,
|
| - VkPipelineLayout layout,
|
| - uint32_t firstSet,
|
| - uint32_t setCount,
|
| - const VkDescriptorSet* descriptorSets,
|
| - uint32_t dynamicOffsetCount,
|
| - const uint32_t* dynamicOffsets) {
|
| - SkASSERT(fIsActive);
|
| - GR_VK_CALL(gpu->vkInterface(), CmdBindDescriptorSets(fCmdBuffer,
|
| - VK_PIPELINE_BIND_POINT_GRAPHICS,
|
| - layout,
|
| - firstSet,
|
| - setCount,
|
| - descriptorSets,
|
| - dynamicOffsetCount,
|
| - dynamicOffsets));
|
| - program->addUniformResources(*this);
|
| -}
|
| -
|
| -void GrVkCommandBuffer::drawIndexed(const GrVkGpu* gpu,
|
| - uint32_t indexCount,
|
| - uint32_t instanceCount,
|
| - uint32_t firstIndex,
|
| - int32_t vertexOffset,
|
| - uint32_t firstInstance) const {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(fActiveRenderPass);
|
| - GR_VK_CALL(gpu->vkInterface(), CmdDrawIndexed(fCmdBuffer,
|
| - indexCount,
|
| - instanceCount,
|
| - firstIndex,
|
| - vertexOffset,
|
| - firstInstance));
|
| -}
|
| -
|
| -void GrVkCommandBuffer::draw(const GrVkGpu* gpu,
|
| - uint32_t vertexCount,
|
| - uint32_t instanceCount,
|
| - uint32_t firstVertex,
|
| - uint32_t firstInstance) const {
|
| - SkASSERT(fIsActive);
|
| - SkASSERT(fActiveRenderPass);
|
| - GR_VK_CALL(gpu->vkInterface(), CmdDraw(fCmdBuffer,
|
| - vertexCount,
|
| - instanceCount,
|
| - firstVertex,
|
| - firstInstance));
|
| -}
|
|
|