[dxvk] Add initBuffer method

This commit is contained in:
Philip Rebohle 2022-02-17 15:30:56 +01:00
parent f7e021f791
commit 080aa1a989
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
3 changed files with 29 additions and 4 deletions

View File

@ -1505,6 +1505,22 @@ namespace dxvk {
}
void DxvkContext::initBuffer(
const Rc<DxvkBuffer>& buffer) {
auto slice = buffer->getSliceHandle();
m_cmd->cmdFillBuffer(DxvkCmdBuffer::InitBuffer,
slice.handle, slice.offset,
dxvk::align(slice.length, 4), 0);
m_initBarriers.accessBuffer(slice,
VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_ACCESS_TRANSFER_WRITE_BIT,
buffer->info().stages,
buffer->info().access);
}
void DxvkContext::initImage(
const Rc<DxvkImage>& image,
const VkImageSubresourceRange& subresources,
@ -5234,8 +5250,7 @@ namespace dxvk {
m_zeroBuffer = m_device->createBuffer(bufInfo,
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
clearBuffer(m_zeroBuffer, 0, bufInfo.size, 0);
m_execBarriers.recordCommands(m_cmd);
this->initBuffer(m_zeroBuffer);
return m_zeroBuffer;
}

View File

@ -638,7 +638,17 @@ namespace dxvk {
void generateMipmaps(
const Rc<DxvkImageView>& imageView,
VkFilter filter);
/**
* \brief Initializes a buffer
*
* Clears the given buffer to zero. Only safe to call
* if the buffer is not currently in use by the GPU.
* \param [in] buffer Buffer to clear
*/
void initBuffer(
const Rc<DxvkBuffer>& buffer);
/**
* \brief Initializes an image
*

View File

@ -179,7 +179,7 @@ namespace dxvk {
void DxvkUnboundResources::clearBuffer(
const Rc<DxvkContext>& ctx,
const Rc<DxvkBuffer>& buffer) {
ctx->clearBuffer(buffer, 0, buffer->info().size, 0);
ctx->initBuffer(buffer);
}