diff options
author | egdaniel <egdaniel@google.com> | 2016-04-26 08:15:09 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-04-26 08:15:09 -0700 |
commit | b1b59576baf8abe457be159b13438b8668f8eeac (patch) | |
tree | 6fe58fb507b87d64593663f94e3d16ef7a6fac7e | |
parent | 62340067270c5c3365afa6b40b8e995ae6a6c1ec (diff) |
Remove unnessary uniform barriers in Vulkan.
Also added a fix to descriptor set allocation.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1914053004
Review URL: https://codereview.chromium.org/1914053004
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 6 | ||||
-rw-r--r-- | src/gpu/vk/GrVkPipelineState.cpp | 20 | ||||
-rw-r--r-- | src/gpu/vk/GrVkPipelineStateDataManager.cpp | 12 |
3 files changed, 3 insertions, 35 deletions
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index 76fe92abc1..02bd3f2c31 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -1602,7 +1602,6 @@ void GrVkGpu::onDraw(const GrPipeline& pipeline, const GrVkRenderPass* renderPass = vkRT->simpleRenderPass(); SkASSERT(renderPass); - GrPrimitiveType primitiveType = meshes[0].primitiveType(); sk_sp<GrVkPipelineState> pipelineState = this->prepareDrawState(pipeline, primProc, @@ -1659,10 +1658,6 @@ void GrVkGpu::onDraw(const GrPipeline& pipeline, pipelineState->freeTempResources(this); SkDEBUGCODE(pipelineState = nullptr); primitiveType = nonIdxMesh->primitiveType(); - // It is illegal for us to have the necessary memory barriers for when we write and - // update the uniform buffers in prepareDrawState while in an active render pass. - // Thus we must end the current one and then start it up again. - fCurrentCmdBuffer->endRenderPass(this); pipelineState = this->prepareDrawState(pipeline, primProc, primitiveType, @@ -1670,7 +1665,6 @@ void GrVkGpu::onDraw(const GrPipeline& pipeline, if (!pipelineState) { return; } - fCurrentCmdBuffer->beginRenderPass(this, renderPass, *vkRT); } SkASSERT(pipelineState); this->bindGeometry(primProc, *nonIdxMesh); diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp index 4fe292917a..2821483ca6 100644 --- a/src/gpu/vk/GrVkPipelineState.cpp +++ b/src/gpu/vk/GrVkPipelineState.cpp @@ -238,13 +238,6 @@ void GrVkPipelineState::writeUniformBuffers(const GrVkGpu* gpu) { descriptorWrites[0].pImageInfo = nullptr; descriptorWrites[0].pBufferInfo = &vertBufferInfo; descriptorWrites[0].pTexelBufferView = nullptr; - - fVertexUniformBuffer->addMemoryBarrier(gpu, - VK_ACCESS_HOST_WRITE_BIT, - VK_ACCESS_UNIFORM_READ_BIT, - VK_PIPELINE_STAGE_HOST_BIT, - VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, - false); } VkDescriptorBufferInfo fragBufferInfo; @@ -269,13 +262,6 @@ void GrVkPipelineState::writeUniformBuffers(const GrVkGpu* gpu) { descriptorWrites[1].pImageInfo = nullptr; descriptorWrites[1].pBufferInfo = &fragBufferInfo; descriptorWrites[1].pTexelBufferView = nullptr; - - fFragmentUniformBuffer->addMemoryBarrier(gpu, - VK_ACCESS_HOST_WRITE_BIT, - VK_ACCESS_UNIFORM_READ_BIT, - VK_PIPELINE_STAGE_HOST_BIT, - VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, - false); } if (uniformBindingUpdateCount) { @@ -436,11 +422,11 @@ void GrVkPipelineState::DescriptorPoolManager::getNewDescriptorSet(GrVkGpu* gpu, if (!fMaxDescriptors) { return; } - if (fCurrentDescriptorCount == fMaxDescriptors) { + fCurrentDescriptorCount += fDescCountPerSet; + if (fCurrentDescriptorCount > fMaxDescriptors) { this->getNewPool(gpu); - fCurrentDescriptorCount = 0; + fCurrentDescriptorCount = fDescCountPerSet; } - fCurrentDescriptorCount += fDescCountPerSet; VkDescriptorSetAllocateInfo dsAllocateInfo; memset(&dsAllocateInfo, 0, sizeof(VkDescriptorSetAllocateInfo)); diff --git a/src/gpu/vk/GrVkPipelineStateDataManager.cpp b/src/gpu/vk/GrVkPipelineStateDataManager.cpp index c72f209a21..638fdba365 100644 --- a/src/gpu/vk/GrVkPipelineStateDataManager.cpp +++ b/src/gpu/vk/GrVkPipelineStateDataManager.cpp @@ -248,24 +248,12 @@ bool GrVkPipelineStateDataManager::uploadUniformBuffers(const GrVkGpu* gpu, GrVkUniformBuffer* fragmentBuffer) const { bool updatedBuffer = false; if (vertexBuffer && fVertexUniformsDirty) { - vertexBuffer->addMemoryBarrier(gpu, - VK_ACCESS_UNIFORM_READ_BIT, - VK_ACCESS_HOST_WRITE_BIT, - VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, - VK_PIPELINE_STAGE_HOST_BIT, - false); SkAssertResult(vertexBuffer->updateData(gpu, fVertexUniformData.get(), fVertexUniformSize, &updatedBuffer)); fVertexUniformsDirty = false; } if (fragmentBuffer && fFragmentUniformsDirty) { - fragmentBuffer->addMemoryBarrier(gpu, - VK_ACCESS_UNIFORM_READ_BIT, - VK_ACCESS_HOST_WRITE_BIT, - VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, - VK_PIPELINE_STAGE_HOST_BIT, - false); SkAssertResult(fragmentBuffer->updateData(gpu, fFragmentUniformData.get(), fFragmentUniformSize, &updatedBuffer)); fFragmentUniformsDirty = false; |