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:
parent
d154a684ad
commit
b771bef837
@ -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) {
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user