1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-21 04:54:15 +01:00

[dxvk] Add helper functions to record pending barriers

This commit is contained in:
Philip Rebohle 2024-10-11 23:03:14 +02:00 committed by Philip Rebohle
parent d154a684ad
commit b771bef837
2 changed files with 140 additions and 0 deletions

View File

@ -6882,6 +6882,102 @@ namespace dxvk {
}
void DxvkContext::accessMemory(
DxvkCmdBuffer cmdBuffer,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess,
VkPipelineStageFlags2 dstStages,
VkAccessFlags2 dstAccess) {
auto* batch = &m_execBarriers;
if (cmdBuffer != DxvkCmdBuffer::ExecBuffer) {
batch = cmdBuffer == DxvkCmdBuffer::InitBuffer
? &m_initBarriers
: &m_sdmaBarriers;
}
batch->accessMemory(srcStages, srcAccess, dstStages, dstAccess);
}
void DxvkContext::accessImage(
DxvkCmdBuffer cmdBuffer,
DxvkImage& image,
const VkImageSubresourceRange& subresources,
VkImageLayout srcLayout,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess) {
accessImage(cmdBuffer, image, subresources,
srcLayout, srcStages, srcAccess,
image.info().layout,
image.info().stages,
image.info().access);
}
void DxvkContext::accessImage(
DxvkCmdBuffer cmdBuffer,
DxvkImage& image,
const VkImageSubresourceRange& subresources,
VkImageLayout srcLayout,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess,
VkImageLayout dstLayout,
VkPipelineStageFlags2 dstStages,
VkAccessFlags2 dstAccess) {
auto* batch = &m_execBarriers;
if (cmdBuffer != DxvkCmdBuffer::ExecBuffer) {
batch = cmdBuffer == DxvkCmdBuffer::InitBuffer
? &m_initBarriers
: &m_sdmaBarriers;
}
batch->accessImage(&image, subresources,
srcLayout, srcStages, srcAccess,
dstLayout, dstStages, dstAccess);
}
void DxvkContext::accessBuffer(
DxvkCmdBuffer cmdBuffer,
DxvkBuffer& buffer,
VkDeviceSize offset,
VkDeviceSize size,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess) {
accessBuffer(cmdBuffer, buffer, offset, size,
srcStages, srcAccess,
buffer.info().stages,
buffer.info().access);
}
void DxvkContext::accessBuffer(
DxvkCmdBuffer cmdBuffer,
DxvkBuffer& buffer,
VkDeviceSize offset,
VkDeviceSize size,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess,
VkPipelineStageFlags2 dstStages,
VkAccessFlags2 dstAccess) {
auto* batch = &m_execBarriers;
if (cmdBuffer != DxvkCmdBuffer::ExecBuffer) {
batch = cmdBuffer == DxvkCmdBuffer::InitBuffer
? &m_initBarriers
: &m_sdmaBarriers;
}
DxvkBufferSliceHandle slice = buffer.getSliceHandle(offset, size);
batch->accessBuffer(slice,
srcStages, srcAccess,
dstStages, dstAccess);
}
bool DxvkContext::formatsAreCopyCompatible(
VkFormat imageFormat,
VkFormat bufferFormat) {

View File

@ -1806,6 +1806,50 @@ namespace dxvk {
VkPipelineStageFlags2 dstStages,
VkAccessFlags2 dstAccess);
void accessMemory(
DxvkCmdBuffer cmdBuffer,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess,
VkPipelineStageFlags2 dstStages,
VkAccessFlags2 dstAccess);
void accessImage(
DxvkCmdBuffer cmdBuffer,
DxvkImage& image,
const VkImageSubresourceRange& subresources,
VkImageLayout srcLayout,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess);
void accessImage(
DxvkCmdBuffer cmdBuffer,
DxvkImage& image,
const VkImageSubresourceRange& subresources,
VkImageLayout srcLayout,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess,
VkImageLayout dstLayout,
VkPipelineStageFlags2 dstStages,
VkAccessFlags2 dstAccess);
void accessBuffer(
DxvkCmdBuffer cmdBuffer,
DxvkBuffer& buffer,
VkDeviceSize offset,
VkDeviceSize size,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess);
void accessBuffer(
DxvkCmdBuffer cmdBuffer,
DxvkBuffer& buffer,
VkDeviceSize offset,
VkDeviceSize size,
VkPipelineStageFlags2 srcStages,
VkAccessFlags2 srcAccess,
VkPipelineStageFlags2 dstStages,
VkAccessFlags2 dstAccess);
static bool formatsAreCopyCompatible(
VkFormat imageFormat,
VkFormat bufferFormat);