Commit 998a37c9 by Shahbaz Youssefi Committed by Commit Bot

Vulkan: merge bindGraphics/ComputeDescriptorSets

The two called bindDescriptorSets with a fixed GRAPHICS or COMPUTE bind point enum value. The differentation however would result in unnecessary code duplication with upcoming compute support. Bug: angleproject:3562 Change-Id: Ica4400c573a90fda168c64ad777d87aa83256e48 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1703524Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
parent 6f0780f8
...@@ -631,9 +631,10 @@ angle::Result ContextVk::handleDirtyDescriptorSets(const gl::Context *context, ...@@ -631,9 +631,10 @@ angle::Result ContextVk::handleDirtyDescriptorSets(const gl::Context *context,
ANGLE_TRY(mProgram->updateDescriptorSets(this, commandBuffer)); ANGLE_TRY(mProgram->updateDescriptorSets(this, commandBuffer));
// Bind the graphics descriptor sets. // Bind the graphics descriptor sets.
commandBuffer->bindGraphicsDescriptorSets( commandBuffer->bindDescriptorSets(
mProgram->getPipelineLayout(), kDriverUniformsDescriptorSetIndex, 1, mProgram->getPipelineLayout(), VK_PIPELINE_BIND_POINT_GRAPHICS,
&mDriverUniformsDescriptorSet, 1, &mDriverUniformsDynamicOffset); kDriverUniformsDescriptorSetIndex, 1, &mDriverUniformsDescriptorSet, 1,
&mDriverUniformsDynamicOffset);
return angle::Result::Continue; return angle::Result::Continue;
} }
......
...@@ -1305,9 +1305,9 @@ angle::Result ProgramVk::updateDescriptorSets(ContextVk *contextVk, ...@@ -1305,9 +1305,9 @@ angle::Result ProgramVk::updateDescriptorSets(ContextVk *contextVk,
descriptorSetIndex == kUniformsAndXfbDescriptorSetIndex ? mDynamicBufferOffsets.size() descriptorSetIndex == kUniformsAndXfbDescriptorSetIndex ? mDynamicBufferOffsets.size()
: 0; : 0;
commandBuffer->bindGraphicsDescriptorSets(mPipelineLayout.get(), descriptorSetIndex, 1, commandBuffer->bindDescriptorSets(mPipelineLayout.get(), VK_PIPELINE_BIND_POINT_GRAPHICS,
&descSet, uniformBlockOffsetCount, descriptorSetIndex, 1, &descSet, uniformBlockOffsetCount,
mDynamicBufferOffsets.data()); mDynamicBufferOffsets.data());
} }
return angle::Result::Continue; return angle::Result::Continue;
......
...@@ -39,16 +39,6 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer) ...@@ -39,16 +39,6 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer)
vkCmdBeginQuery(cmdBuffer, params->queryPool, params->query, params->flags); vkCmdBeginQuery(cmdBuffer, params->queryPool, params->query, params->flags);
break; break;
} }
case CommandID::BindComputeDescriptorSets:
{
const BindComputeDescriptorSetParams *params =
getParamPtr<BindComputeDescriptorSetParams>(currentCommand);
const VkDescriptorSet *descriptorSets =
Offset<VkDescriptorSet>(params, sizeof(BindComputeDescriptorSetParams));
vkCmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE,
params->layout, 0, 1, descriptorSets, 0, nullptr);
break;
}
case CommandID::BindComputePipeline: case CommandID::BindComputePipeline:
{ {
const BindPipelineParams *params = const BindPipelineParams *params =
...@@ -56,18 +46,18 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer) ...@@ -56,18 +46,18 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer)
vkCmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, params->pipeline); vkCmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, params->pipeline);
break; break;
} }
case CommandID::BindGraphicsDescriptorSets: case CommandID::BindDescriptorSets:
{ {
const BindGraphicsDescriptorSetParams *params = const BindDescriptorSetParams *params =
getParamPtr<BindGraphicsDescriptorSetParams>(currentCommand); getParamPtr<BindDescriptorSetParams>(currentCommand);
const VkDescriptorSet *descriptorSets = const VkDescriptorSet *descriptorSets =
Offset<VkDescriptorSet>(params, sizeof(BindGraphicsDescriptorSetParams)); Offset<VkDescriptorSet>(params, sizeof(BindDescriptorSetParams));
const uint32_t *dynamicOffsets = Offset<uint32_t>( const uint32_t *dynamicOffsets = Offset<uint32_t>(
descriptorSets, sizeof(VkDescriptorSet) * params->descriptorSetCount); descriptorSets, sizeof(VkDescriptorSet) * params->descriptorSetCount);
vkCmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vkCmdBindDescriptorSets(cmdBuffer, params->pipelineBindPoint, params->layout,
params->layout, params->firstSet, params->firstSet, params->descriptorSetCount,
params->descriptorSetCount, descriptorSets, descriptorSets, params->dynamicOffsetCount,
params->dynamicOffsetCount, dynamicOffsets); dynamicOffsets);
break; break;
} }
case CommandID::BindGraphicsPipeline: case CommandID::BindGraphicsPipeline:
...@@ -343,14 +333,11 @@ std::string SecondaryCommandBuffer::dumpCommands(const char *separator) const ...@@ -343,14 +333,11 @@ std::string SecondaryCommandBuffer::dumpCommands(const char *separator) const
case CommandID::BeginQuery: case CommandID::BeginQuery:
result += "BeginQuery"; result += "BeginQuery";
break; break;
case CommandID::BindComputeDescriptorSets:
result += "BindComputeDescriptorSets";
break;
case CommandID::BindComputePipeline: case CommandID::BindComputePipeline:
result += "BindComputePipeline"; result += "BindComputePipeline";
break; break;
case CommandID::BindGraphicsDescriptorSets: case CommandID::BindDescriptorSets:
result += "BindGraphicsDescriptorSets"; result += "BindDescriptorSets";
break; break;
case CommandID::BindGraphicsPipeline: case CommandID::BindGraphicsPipeline:
result += "BindGraphicsPipeline"; result += "BindGraphicsPipeline";
......
...@@ -30,9 +30,8 @@ enum class CommandID : uint16_t ...@@ -30,9 +30,8 @@ enum class CommandID : uint16_t
// Invalid cmd used to mark end of sequence of commands // Invalid cmd used to mark end of sequence of commands
Invalid = 0, Invalid = 0,
BeginQuery, BeginQuery,
BindComputeDescriptorSets,
BindComputePipeline, BindComputePipeline,
BindGraphicsDescriptorSets, BindDescriptorSets,
BindGraphicsPipeline, BindGraphicsPipeline,
BindIndexBuffer, BindIndexBuffer,
BindVertexBuffers, BindVertexBuffers,
...@@ -77,20 +76,15 @@ struct BindPipelineParams ...@@ -77,20 +76,15 @@ struct BindPipelineParams
}; };
VERIFY_4_BYTE_ALIGNMENT(BindPipelineParams) VERIFY_4_BYTE_ALIGNMENT(BindPipelineParams)
struct BindGraphicsDescriptorSetParams struct BindDescriptorSetParams
{ {
VkPipelineLayout layout; VkPipelineLayout layout;
VkPipelineBindPoint pipelineBindPoint;
uint32_t firstSet; uint32_t firstSet;
uint32_t descriptorSetCount; uint32_t descriptorSetCount;
uint32_t dynamicOffsetCount; uint32_t dynamicOffsetCount;
}; };
VERIFY_4_BYTE_ALIGNMENT(BindGraphicsDescriptorSetParams) VERIFY_4_BYTE_ALIGNMENT(BindDescriptorSetParams)
struct BindComputeDescriptorSetParams
{
VkPipelineLayout layout;
};
VERIFY_4_BYTE_ALIGNMENT(BindComputeDescriptorSetParams)
struct BindIndexBufferParams struct BindIndexBufferParams
{ {
...@@ -364,17 +358,15 @@ class SecondaryCommandBuffer final : angle::NonCopyable ...@@ -364,17 +358,15 @@ class SecondaryCommandBuffer final : angle::NonCopyable
// Add commands // Add commands
void beginQuery(VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags); void beginQuery(VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
void bindComputeDescriptorSets(const PipelineLayout &layout,
const VkDescriptorSet *descriptorSets);
void bindComputePipeline(const Pipeline &pipeline); void bindComputePipeline(const Pipeline &pipeline);
void bindGraphicsDescriptorSets(const PipelineLayout &layout, void bindDescriptorSets(const PipelineLayout &layout,
uint32_t firstSet, VkPipelineBindPoint pipelineBindPoint,
uint32_t descriptorSetCount, uint32_t firstSet,
const VkDescriptorSet *descriptorSets, uint32_t descriptorSetCount,
uint32_t dynamicOffsetCount, const VkDescriptorSet *descriptorSets,
const uint32_t *dynamicOffsets); uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets);
void bindGraphicsPipeline(const Pipeline &pipeline); void bindGraphicsPipeline(const Pipeline &pipeline);
...@@ -641,21 +633,22 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindComputePipeline(const Pipeline &pi ...@@ -641,21 +633,22 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindComputePipeline(const Pipeline &pi
paramStruct->pipeline = pipeline.getHandle(); paramStruct->pipeline = pipeline.getHandle();
} }
ANGLE_INLINE void SecondaryCommandBuffer::bindGraphicsDescriptorSets( ANGLE_INLINE void SecondaryCommandBuffer::bindDescriptorSets(const PipelineLayout &layout,
const PipelineLayout &layout, VkPipelineBindPoint pipelineBindPoint,
uint32_t firstSet, uint32_t firstSet,
uint32_t descriptorSetCount, uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets, const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount, uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets) const uint32_t *dynamicOffsets)
{ {
size_t descSize = descriptorSetCount * sizeof(VkDescriptorSet); size_t descSize = descriptorSetCount * sizeof(VkDescriptorSet);
size_t offsetSize = dynamicOffsetCount * sizeof(uint32_t); size_t offsetSize = dynamicOffsetCount * sizeof(uint32_t);
uint8_t *writePtr; uint8_t *writePtr;
BindGraphicsDescriptorSetParams *paramStruct = initCommand<BindGraphicsDescriptorSetParams>( BindDescriptorSetParams *paramStruct = initCommand<BindDescriptorSetParams>(
CommandID::BindGraphicsDescriptorSets, descSize + offsetSize, &writePtr); CommandID::BindDescriptorSets, descSize + offsetSize, &writePtr);
// Copy params into memory // Copy params into memory
paramStruct->layout = layout.getHandle(); paramStruct->layout = layout.getHandle();
paramStruct->pipelineBindPoint = pipelineBindPoint;
paramStruct->firstSet = firstSet; paramStruct->firstSet = firstSet;
paramStruct->descriptorSetCount = descriptorSetCount; paramStruct->descriptorSetCount = descriptorSetCount;
paramStruct->dynamicOffsetCount = dynamicOffsetCount; paramStruct->dynamicOffsetCount = dynamicOffsetCount;
...@@ -664,19 +657,6 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindGraphicsDescriptorSets( ...@@ -664,19 +657,6 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindGraphicsDescriptorSets(
storePointerParameter(writePtr, dynamicOffsets, offsetSize); storePointerParameter(writePtr, dynamicOffsets, offsetSize);
} }
ANGLE_INLINE void SecondaryCommandBuffer::bindComputeDescriptorSets(
const PipelineLayout &layout,
const VkDescriptorSet *descriptorSets)
{
uint8_t *writePtr;
BindComputeDescriptorSetParams *paramStruct = initCommand<BindComputeDescriptorSetParams>(
CommandID::BindComputeDescriptorSets, sizeof(VkDescriptorSet), &writePtr);
// Copy params into memory
paramStruct->layout = layout.getHandle();
// Copy variable sized data
storePointerParameter(writePtr, descriptorSets, sizeof(VkDescriptorSet));
}
ANGLE_INLINE void SecondaryCommandBuffer::bindGraphicsPipeline(const Pipeline &pipeline) ANGLE_INLINE void SecondaryCommandBuffer::bindGraphicsPipeline(const Pipeline &pipeline)
{ {
BindPipelineParams *paramStruct = BindPipelineParams *paramStruct =
......
...@@ -522,9 +522,11 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk, ...@@ -522,9 +522,11 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk,
{ {
RendererVk *renderer = contextVk->getRenderer(); RendererVk *renderer = contextVk->getRenderer();
bool isCompute = function >= Function::ComputeStartIndex; const bool isCompute = function >= Function::ComputeStartIndex;
VkShaderStageFlags pushConstantsShaderStage = const VkShaderStageFlags pushConstantsShaderStage =
isCompute ? VK_SHADER_STAGE_COMPUTE_BIT : VK_SHADER_STAGE_FRAGMENT_BIT; isCompute ? VK_SHADER_STAGE_COMPUTE_BIT : VK_SHADER_STAGE_FRAGMENT_BIT;
const VkPipelineBindPoint pipelineBindPoint =
isCompute ? VK_PIPELINE_BIND_POINT_COMPUTE : VK_PIPELINE_BIND_POINT_GRAPHICS;
// If compute, vsShader and pipelineDesc should be nullptr, and if not compute they shouldn't // If compute, vsShader and pipelineDesc should be nullptr, and if not compute they shouldn't
// be. // be.
...@@ -541,10 +543,6 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk, ...@@ -541,10 +543,6 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk,
ANGLE_TRY(program->getComputePipeline(contextVk, pipelineLayout.get(), &pipelineAndSerial)); ANGLE_TRY(program->getComputePipeline(contextVk, pipelineLayout.get(), &pipelineAndSerial));
pipelineAndSerial->updateSerial(serial); pipelineAndSerial->updateSerial(serial);
commandBuffer->bindComputePipeline(pipelineAndSerial->get()); commandBuffer->bindComputePipeline(pipelineAndSerial->get());
if (descriptorSet != VK_NULL_HANDLE)
{
commandBuffer->bindComputeDescriptorSets(pipelineLayout.get(), &descriptorSet);
}
} }
else else
{ {
...@@ -564,11 +562,12 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk, ...@@ -564,11 +562,12 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk,
&descPtr, &helper)); &descPtr, &helper));
helper->updateSerial(serial); helper->updateSerial(serial);
commandBuffer->bindGraphicsPipeline(helper->getPipeline()); commandBuffer->bindGraphicsPipeline(helper->getPipeline());
if (descriptorSet != VK_NULL_HANDLE) }
{
commandBuffer->bindGraphicsDescriptorSets(pipelineLayout.get(), 0, 1, &descriptorSet, 0, if (descriptorSet != VK_NULL_HANDLE)
nullptr); {
} commandBuffer->bindDescriptorSets(pipelineLayout.get(), pipelineBindPoint, 0, 1,
&descriptorSet, 0, nullptr);
} }
commandBuffer->pushConstants(pipelineLayout.get(), pushConstantsShaderStage, 0, commandBuffer->pushConstants(pipelineLayout.get(), pushConstantsShaderStage, 0,
......
...@@ -202,15 +202,14 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer> ...@@ -202,15 +202,14 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
void beginRenderPass(const VkRenderPassBeginInfo &beginInfo, VkSubpassContents subpassContents); void beginRenderPass(const VkRenderPassBeginInfo &beginInfo, VkSubpassContents subpassContents);
void bindGraphicsDescriptorSets(const PipelineLayout &layout, void bindDescriptorSets(const PipelineLayout &layout,
uint32_t firstSet, VkPipelineBindPoint pipelineBindPoint,
uint32_t descriptorSetCount, uint32_t firstSet,
const VkDescriptorSet *descriptorSets, uint32_t descriptorSetCount,
uint32_t dynamicOffsetCount, const VkDescriptorSet *descriptorSets,
const uint32_t *dynamicOffsets); uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets);
void bindGraphicsPipeline(const Pipeline &pipeline); void bindGraphicsPipeline(const Pipeline &pipeline);
void bindComputeDescriptorSets(const PipelineLayout &layout,
const VkDescriptorSet *descriptorSets);
void bindComputePipeline(const Pipeline &pipeline); void bindComputePipeline(const Pipeline &pipeline);
void bindPipeline(VkPipelineBindPoint pipelineBindPoint, const Pipeline &pipeline); void bindPipeline(VkPipelineBindPoint pipelineBindPoint, const Pipeline &pipeline);
...@@ -781,23 +780,16 @@ ANGLE_INLINE void CommandBuffer::bindIndexBuffer(const Buffer &buffer, ...@@ -781,23 +780,16 @@ ANGLE_INLINE void CommandBuffer::bindIndexBuffer(const Buffer &buffer,
vkCmdBindIndexBuffer(mHandle, buffer.getHandle(), offset, indexType); vkCmdBindIndexBuffer(mHandle, buffer.getHandle(), offset, indexType);
} }
ANGLE_INLINE void CommandBuffer::bindComputeDescriptorSets(const PipelineLayout &layout, ANGLE_INLINE void CommandBuffer::bindDescriptorSets(const PipelineLayout &layout,
const VkDescriptorSet *descriptorSets) VkPipelineBindPoint pipelineBindPoint,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets)
{ {
ASSERT(valid() && layout.valid()); ASSERT(valid() && layout.valid());
vkCmdBindDescriptorSets(mHandle, VK_PIPELINE_BIND_POINT_COMPUTE, layout.getHandle(), 0, 1, vkCmdBindDescriptorSets(mHandle, pipelineBindPoint, layout.getHandle(), firstSet,
descriptorSets, 0, nullptr);
}
ANGLE_INLINE void CommandBuffer::bindGraphicsDescriptorSets(const PipelineLayout &layout,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets)
{
ASSERT(valid() && layout.valid());
vkCmdBindDescriptorSets(mHandle, VK_PIPELINE_BIND_POINT_GRAPHICS, layout.getHandle(), firstSet,
descriptorSetCount, descriptorSets, dynamicOffsetCount, dynamicOffsets); descriptorSetCount, descriptorSets, dynamicOffsetCount, dynamicOffsets);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment