aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar egdaniel <egdaniel@google.com>2016-04-26 08:15:09 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-26 08:15:09 -0700
commitb1b59576baf8abe457be159b13438b8668f8eeac (patch)
tree6fe58fb507b87d64593663f94e3d16ef7a6fac7e
parent62340067270c5c3365afa6b40b8e995ae6a6c1ec (diff)
Remove unnessary uniform barriers in Vulkan.
-rw-r--r--src/gpu/vk/GrVkGpu.cpp6
-rw-r--r--src/gpu/vk/GrVkPipelineState.cpp20
-rw-r--r--src/gpu/vk/GrVkPipelineStateDataManager.cpp12
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;