mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-21 22:54:16 +01:00
[dxvk] Use new barrier helpers in clearBufferView
This commit is contained in:
parent
5dfc4d6300
commit
6ef6cb3b45
@ -262,20 +262,17 @@ namespace dxvk {
|
|||||||
this->spillRenderPass(true);
|
this->spillRenderPass(true);
|
||||||
this->invalidateState();
|
this->invalidateState();
|
||||||
|
|
||||||
auto bufferSlice = bufferView->getSliceHandle();
|
flushPendingAccesses(*bufferView, DxvkAccess::Write);
|
||||||
|
|
||||||
if (m_execBarriers.isBufferDirty(bufferSlice, DxvkAccess::Write))
|
|
||||||
m_execBarriers.recordCommands(m_cmd);
|
|
||||||
|
|
||||||
// Query pipeline objects to use for this clear operation
|
// Query pipeline objects to use for this clear operation
|
||||||
DxvkMetaClearPipeline pipeInfo = m_common->metaClear().getClearBufferPipeline(
|
DxvkMetaClearPipeline pipeInfo = m_common->metaClear().getClearBufferPipeline(
|
||||||
lookupFormatInfo(bufferView->info().format)->flags);
|
lookupFormatInfo(bufferView->info().format)->flags);
|
||||||
|
|
||||||
// Create a descriptor set pointing to the view
|
// Create a descriptor set pointing to the view
|
||||||
VkBufferView viewObject = bufferView->handle();
|
VkBufferView viewObject = bufferView->handle();
|
||||||
|
|
||||||
VkDescriptorSet descriptorSet = m_descriptorPool->alloc(pipeInfo.dsetLayout);
|
VkDescriptorSet descriptorSet = m_descriptorPool->alloc(pipeInfo.dsetLayout);
|
||||||
|
|
||||||
VkWriteDescriptorSet descriptorWrite = { VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET };
|
VkWriteDescriptorSet descriptorWrite = { VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET };
|
||||||
descriptorWrite.dstSet = descriptorSet;
|
descriptorWrite.dstSet = descriptorSet;
|
||||||
descriptorWrite.dstBinding = 0;
|
descriptorWrite.dstBinding = 0;
|
||||||
@ -284,16 +281,16 @@ namespace dxvk {
|
|||||||
descriptorWrite.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER;
|
descriptorWrite.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER;
|
||||||
descriptorWrite.pTexelBufferView = &viewObject;
|
descriptorWrite.pTexelBufferView = &viewObject;
|
||||||
m_cmd->updateDescriptorSets(1, &descriptorWrite);
|
m_cmd->updateDescriptorSets(1, &descriptorWrite);
|
||||||
|
|
||||||
// Prepare shader arguments
|
// Prepare shader arguments
|
||||||
DxvkMetaClearArgs pushArgs = { };
|
DxvkMetaClearArgs pushArgs = { };
|
||||||
pushArgs.clearValue = value;
|
pushArgs.clearValue = value;
|
||||||
pushArgs.offset = VkOffset3D { int32_t(offset), 0, 0 };
|
pushArgs.offset = VkOffset3D { int32_t(offset), 0, 0 };
|
||||||
pushArgs.extent = VkExtent3D { uint32_t(length), 1, 1 };
|
pushArgs.extent = VkExtent3D { uint32_t(length), 1, 1 };
|
||||||
|
|
||||||
VkExtent3D workgroups = util::computeBlockCount(
|
VkExtent3D workgroups = util::computeBlockCount(
|
||||||
pushArgs.extent, pipeInfo.workgroupSize);
|
pushArgs.extent, pipeInfo.workgroupSize);
|
||||||
|
|
||||||
m_cmd->cmdBindPipeline(DxvkCmdBuffer::ExecBuffer,
|
m_cmd->cmdBindPipeline(DxvkCmdBuffer::ExecBuffer,
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE, pipeInfo.pipeline);
|
VK_PIPELINE_BIND_POINT_COMPUTE, pipeInfo.pipeline);
|
||||||
m_cmd->cmdBindDescriptorSet(DxvkCmdBuffer::ExecBuffer,
|
m_cmd->cmdBindDescriptorSet(DxvkCmdBuffer::ExecBuffer,
|
||||||
@ -304,13 +301,10 @@ namespace dxvk {
|
|||||||
0, sizeof(pushArgs), &pushArgs);
|
0, sizeof(pushArgs), &pushArgs);
|
||||||
m_cmd->cmdDispatch(DxvkCmdBuffer::ExecBuffer,
|
m_cmd->cmdDispatch(DxvkCmdBuffer::ExecBuffer,
|
||||||
workgroups.width, workgroups.height, workgroups.depth);
|
workgroups.width, workgroups.height, workgroups.depth);
|
||||||
|
|
||||||
m_execBarriers.accessBuffer(bufferSlice,
|
accessBuffer(DxvkCmdBuffer::ExecBuffer, *bufferView,
|
||||||
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT);
|
||||||
VK_ACCESS_SHADER_WRITE_BIT,
|
|
||||||
bufferView->buffer()->info().stages,
|
|
||||||
bufferView->buffer()->info().access);
|
|
||||||
|
|
||||||
m_cmd->trackResource<DxvkAccess::Write>(bufferView->buffer());
|
m_cmd->trackResource<DxvkAccess::Write>(bufferView->buffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user