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,
ANGLE_TRY(mProgram->updateDescriptorSets(this, commandBuffer));
// Bind the graphics descriptor sets.
commandBuffer->bindGraphicsDescriptorSets(
mProgram->getPipelineLayout(), kDriverUniformsDescriptorSetIndex, 1,
&mDriverUniformsDescriptorSet, 1, &mDriverUniformsDynamicOffset);
commandBuffer->bindDescriptorSets(
mProgram->getPipelineLayout(), VK_PIPELINE_BIND_POINT_GRAPHICS,
kDriverUniformsDescriptorSetIndex, 1, &mDriverUniformsDescriptorSet, 1,
&mDriverUniformsDynamicOffset);
return angle::Result::Continue;
}
......
......@@ -1305,9 +1305,9 @@ angle::Result ProgramVk::updateDescriptorSets(ContextVk *contextVk,
descriptorSetIndex == kUniformsAndXfbDescriptorSetIndex ? mDynamicBufferOffsets.size()
: 0;
commandBuffer->bindGraphicsDescriptorSets(mPipelineLayout.get(), descriptorSetIndex, 1,
&descSet, uniformBlockOffsetCount,
mDynamicBufferOffsets.data());
commandBuffer->bindDescriptorSets(mPipelineLayout.get(), VK_PIPELINE_BIND_POINT_GRAPHICS,
descriptorSetIndex, 1, &descSet, uniformBlockOffsetCount,
mDynamicBufferOffsets.data());
}
return angle::Result::Continue;
......
......@@ -39,16 +39,6 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer)
vkCmdBeginQuery(cmdBuffer, params->queryPool, params->query, params->flags);
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:
{
const BindPipelineParams *params =
......@@ -56,18 +46,18 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer)
vkCmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, params->pipeline);
break;
}
case CommandID::BindGraphicsDescriptorSets:
case CommandID::BindDescriptorSets:
{
const BindGraphicsDescriptorSetParams *params =
getParamPtr<BindGraphicsDescriptorSetParams>(currentCommand);
const BindDescriptorSetParams *params =
getParamPtr<BindDescriptorSetParams>(currentCommand);
const VkDescriptorSet *descriptorSets =
Offset<VkDescriptorSet>(params, sizeof(BindGraphicsDescriptorSetParams));
Offset<VkDescriptorSet>(params, sizeof(BindDescriptorSetParams));
const uint32_t *dynamicOffsets = Offset<uint32_t>(
descriptorSets, sizeof(VkDescriptorSet) * params->descriptorSetCount);
vkCmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
params->layout, params->firstSet,
params->descriptorSetCount, descriptorSets,
params->dynamicOffsetCount, dynamicOffsets);
vkCmdBindDescriptorSets(cmdBuffer, params->pipelineBindPoint, params->layout,
params->firstSet, params->descriptorSetCount,
descriptorSets, params->dynamicOffsetCount,
dynamicOffsets);
break;
}
case CommandID::BindGraphicsPipeline:
......@@ -343,14 +333,11 @@ std::string SecondaryCommandBuffer::dumpCommands(const char *separator) const
case CommandID::BeginQuery:
result += "BeginQuery";
break;
case CommandID::BindComputeDescriptorSets:
result += "BindComputeDescriptorSets";
break;
case CommandID::BindComputePipeline:
result += "BindComputePipeline";
break;
case CommandID::BindGraphicsDescriptorSets:
result += "BindGraphicsDescriptorSets";
case CommandID::BindDescriptorSets:
result += "BindDescriptorSets";
break;
case CommandID::BindGraphicsPipeline:
result += "BindGraphicsPipeline";
......
......@@ -30,9 +30,8 @@ enum class CommandID : uint16_t
// Invalid cmd used to mark end of sequence of commands
Invalid = 0,
BeginQuery,
BindComputeDescriptorSets,
BindComputePipeline,
BindGraphicsDescriptorSets,
BindDescriptorSets,
BindGraphicsPipeline,
BindIndexBuffer,
BindVertexBuffers,
......@@ -77,20 +76,15 @@ struct BindPipelineParams
};
VERIFY_4_BYTE_ALIGNMENT(BindPipelineParams)
struct BindGraphicsDescriptorSetParams
struct BindDescriptorSetParams
{
VkPipelineLayout layout;
VkPipelineBindPoint pipelineBindPoint;
uint32_t firstSet;
uint32_t descriptorSetCount;
uint32_t dynamicOffsetCount;
};
VERIFY_4_BYTE_ALIGNMENT(BindGraphicsDescriptorSetParams)
struct BindComputeDescriptorSetParams
{
VkPipelineLayout layout;
};
VERIFY_4_BYTE_ALIGNMENT(BindComputeDescriptorSetParams)
VERIFY_4_BYTE_ALIGNMENT(BindDescriptorSetParams)
struct BindIndexBufferParams
{
......@@ -364,17 +358,15 @@ class SecondaryCommandBuffer final : angle::NonCopyable
// Add commands
void beginQuery(VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
void bindComputeDescriptorSets(const PipelineLayout &layout,
const VkDescriptorSet *descriptorSets);
void bindComputePipeline(const Pipeline &pipeline);
void bindGraphicsDescriptorSets(const PipelineLayout &layout,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets);
void bindDescriptorSets(const PipelineLayout &layout,
VkPipelineBindPoint pipelineBindPoint,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets);
void bindGraphicsPipeline(const Pipeline &pipeline);
......@@ -641,21 +633,22 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindComputePipeline(const Pipeline &pi
paramStruct->pipeline = pipeline.getHandle();
}
ANGLE_INLINE void SecondaryCommandBuffer::bindGraphicsDescriptorSets(
const PipelineLayout &layout,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets)
ANGLE_INLINE void SecondaryCommandBuffer::bindDescriptorSets(const PipelineLayout &layout,
VkPipelineBindPoint pipelineBindPoint,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets)
{
size_t descSize = descriptorSetCount * sizeof(VkDescriptorSet);
size_t offsetSize = dynamicOffsetCount * sizeof(uint32_t);
uint8_t *writePtr;
BindGraphicsDescriptorSetParams *paramStruct = initCommand<BindGraphicsDescriptorSetParams>(
CommandID::BindGraphicsDescriptorSets, descSize + offsetSize, &writePtr);
BindDescriptorSetParams *paramStruct = initCommand<BindDescriptorSetParams>(
CommandID::BindDescriptorSets, descSize + offsetSize, &writePtr);
// Copy params into memory
paramStruct->layout = layout.getHandle();
paramStruct->pipelineBindPoint = pipelineBindPoint;
paramStruct->firstSet = firstSet;
paramStruct->descriptorSetCount = descriptorSetCount;
paramStruct->dynamicOffsetCount = dynamicOffsetCount;
......@@ -664,19 +657,6 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindGraphicsDescriptorSets(
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)
{
BindPipelineParams *paramStruct =
......
......@@ -522,9 +522,11 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk,
{
RendererVk *renderer = contextVk->getRenderer();
bool isCompute = function >= Function::ComputeStartIndex;
VkShaderStageFlags pushConstantsShaderStage =
const bool isCompute = function >= Function::ComputeStartIndex;
const VkShaderStageFlags pushConstantsShaderStage =
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
// be.
......@@ -541,10 +543,6 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk,
ANGLE_TRY(program->getComputePipeline(contextVk, pipelineLayout.get(), &pipelineAndSerial));
pipelineAndSerial->updateSerial(serial);
commandBuffer->bindComputePipeline(pipelineAndSerial->get());
if (descriptorSet != VK_NULL_HANDLE)
{
commandBuffer->bindComputeDescriptorSets(pipelineLayout.get(), &descriptorSet);
}
}
else
{
......@@ -564,11 +562,12 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk,
&descPtr, &helper));
helper->updateSerial(serial);
commandBuffer->bindGraphicsPipeline(helper->getPipeline());
if (descriptorSet != VK_NULL_HANDLE)
{
commandBuffer->bindGraphicsDescriptorSets(pipelineLayout.get(), 0, 1, &descriptorSet, 0,
nullptr);
}
}
if (descriptorSet != VK_NULL_HANDLE)
{
commandBuffer->bindDescriptorSets(pipelineLayout.get(), pipelineBindPoint, 0, 1,
&descriptorSet, 0, nullptr);
}
commandBuffer->pushConstants(pipelineLayout.get(), pushConstantsShaderStage, 0,
......
......@@ -202,15 +202,14 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
void beginRenderPass(const VkRenderPassBeginInfo &beginInfo, VkSubpassContents subpassContents);
void bindGraphicsDescriptorSets(const PipelineLayout &layout,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets);
void bindDescriptorSets(const PipelineLayout &layout,
VkPipelineBindPoint pipelineBindPoint,
uint32_t firstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet *descriptorSets,
uint32_t dynamicOffsetCount,
const uint32_t *dynamicOffsets);
void bindGraphicsPipeline(const Pipeline &pipeline);
void bindComputeDescriptorSets(const PipelineLayout &layout,
const VkDescriptorSet *descriptorSets);
void bindComputePipeline(const Pipeline &pipeline);
void bindPipeline(VkPipelineBindPoint pipelineBindPoint, const Pipeline &pipeline);
......@@ -781,23 +780,16 @@ ANGLE_INLINE void CommandBuffer::bindIndexBuffer(const Buffer &buffer,
vkCmdBindIndexBuffer(mHandle, buffer.getHandle(), offset, indexType);
}
ANGLE_INLINE void CommandBuffer::bindComputeDescriptorSets(const PipelineLayout &layout,
const VkDescriptorSet *descriptorSets)
ANGLE_INLINE void CommandBuffer::bindDescriptorSets(const PipelineLayout &layout,
VkPipelineBindPoint pipelineBindPoint,
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_COMPUTE, layout.getHandle(), 0, 1,
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,
vkCmdBindDescriptorSets(mHandle, pipelineBindPoint, layout.getHandle(), firstSet,
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