mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-21 22:54:16 +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(
|
bool DxvkContext::formatsAreCopyCompatible(
|
||||||
VkFormat imageFormat,
|
VkFormat imageFormat,
|
||||||
VkFormat bufferFormat) {
|
VkFormat bufferFormat) {
|
||||||
|
@ -1806,6 +1806,50 @@ namespace dxvk {
|
|||||||
VkPipelineStageFlags2 dstStages,
|
VkPipelineStageFlags2 dstStages,
|
||||||
VkAccessFlags2 dstAccess);
|
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(
|
static bool formatsAreCopyCompatible(
|
||||||
VkFormat imageFormat,
|
VkFormat imageFormat,
|
||||||
VkFormat bufferFormat);
|
VkFormat bufferFormat);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user