mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-23 19:54:16 +01:00
[dxvk] Add more convenience methods to track buffer barriers
This commit is contained in:
parent
23067c48c7
commit
cb92589452
@ -936,13 +936,8 @@ namespace dxvk {
|
|||||||
m_queryManager.endQueries(m_cmd,
|
m_queryManager.endQueries(m_cmd,
|
||||||
VK_QUERY_TYPE_PIPELINE_STATISTICS);
|
VK_QUERY_TYPE_PIPELINE_STATISTICS);
|
||||||
|
|
||||||
accessBuffer(DxvkCmdBuffer::ExecBuffer,
|
accessDrawBuffer(offset, 1, 0, sizeof(VkDispatchIndirectCommand));
|
||||||
*m_state.id.argBuffer.buffer(),
|
|
||||||
m_state.id.argBuffer.offset() + offset,
|
|
||||||
sizeof(VkDispatchIndirectCommand),
|
|
||||||
VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
|
|
||||||
VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT);
|
|
||||||
|
|
||||||
this->trackDrawBuffer();
|
this->trackDrawBuffer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7659,6 +7654,18 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DxvkContext::accessImage(
|
||||||
|
DxvkCmdBuffer cmdBuffer,
|
||||||
|
const DxvkImageView& imageView,
|
||||||
|
VkPipelineStageFlags2 srcStages,
|
||||||
|
VkAccessFlags2 srcAccess) {
|
||||||
|
accessImage(cmdBuffer, *imageView.image(),
|
||||||
|
imageView.imageSubresources(),
|
||||||
|
imageView.image()->info().layout,
|
||||||
|
srcStages, srcAccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::accessImage(
|
void DxvkContext::accessImage(
|
||||||
DxvkCmdBuffer cmdBuffer,
|
DxvkCmdBuffer cmdBuffer,
|
||||||
DxvkImage& image,
|
DxvkImage& image,
|
||||||
@ -7773,6 +7780,35 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DxvkContext::accessBuffer(
|
||||||
|
DxvkCmdBuffer cmdBuffer,
|
||||||
|
const DxvkBufferSlice& bufferSlice,
|
||||||
|
VkPipelineStageFlags2 srcStages,
|
||||||
|
VkAccessFlags2 srcAccess) {
|
||||||
|
accessBuffer(cmdBuffer,
|
||||||
|
*bufferSlice.buffer(),
|
||||||
|
bufferSlice.offset(),
|
||||||
|
bufferSlice.length(),
|
||||||
|
srcStages, srcAccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DxvkContext::accessBuffer(
|
||||||
|
DxvkCmdBuffer cmdBuffer,
|
||||||
|
const DxvkBufferSlice& bufferSlice,
|
||||||
|
VkPipelineStageFlags2 srcStages,
|
||||||
|
VkAccessFlags2 srcAccess,
|
||||||
|
VkPipelineStageFlags2 dstStages,
|
||||||
|
VkAccessFlags2 dstAccess) {
|
||||||
|
accessBuffer(cmdBuffer,
|
||||||
|
*bufferSlice.buffer(),
|
||||||
|
bufferSlice.offset(),
|
||||||
|
bufferSlice.length(),
|
||||||
|
srcStages, srcAccess,
|
||||||
|
dstStages, dstAccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::accessBuffer(
|
void DxvkContext::accessBuffer(
|
||||||
DxvkCmdBuffer cmdBuffer,
|
DxvkCmdBuffer cmdBuffer,
|
||||||
DxvkBufferView& bufferView,
|
DxvkBufferView& bufferView,
|
||||||
@ -7802,6 +7838,31 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DxvkContext::accessDrawBuffer(
|
||||||
|
VkDeviceSize offset,
|
||||||
|
uint32_t count,
|
||||||
|
uint32_t stride,
|
||||||
|
uint32_t size) {
|
||||||
|
uint32_t dataSize = count ? (count - 1u) * stride + size : 0u;
|
||||||
|
|
||||||
|
accessBuffer(DxvkCmdBuffer::ExecBuffer,
|
||||||
|
*m_state.id.argBuffer.buffer(),
|
||||||
|
m_state.id.argBuffer.offset() + offset, dataSize,
|
||||||
|
VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
|
||||||
|
VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DxvkContext::accessDrawCountBuffer(
|
||||||
|
VkDeviceSize offset) {
|
||||||
|
accessBuffer(DxvkCmdBuffer::ExecBuffer,
|
||||||
|
*m_state.id.cntBuffer.buffer(),
|
||||||
|
m_state.id.cntBuffer.offset() + offset, sizeof(uint32_t),
|
||||||
|
VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
|
||||||
|
VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::flushPendingAccesses(
|
void DxvkContext::flushPendingAccesses(
|
||||||
DxvkBuffer& buffer,
|
DxvkBuffer& buffer,
|
||||||
VkDeviceSize offset,
|
VkDeviceSize offset,
|
||||||
|
@ -1878,6 +1878,12 @@ namespace dxvk {
|
|||||||
VkPipelineStageFlags2 srcStages,
|
VkPipelineStageFlags2 srcStages,
|
||||||
VkAccessFlags2 srcAccess);
|
VkAccessFlags2 srcAccess);
|
||||||
|
|
||||||
|
void accessImage(
|
||||||
|
DxvkCmdBuffer cmdBuffer,
|
||||||
|
const DxvkImageView& imageView,
|
||||||
|
VkPipelineStageFlags2 srcStages,
|
||||||
|
VkAccessFlags2 srcAccess);
|
||||||
|
|
||||||
void accessImage(
|
void accessImage(
|
||||||
DxvkCmdBuffer cmdBuffer,
|
DxvkCmdBuffer cmdBuffer,
|
||||||
DxvkImage& image,
|
DxvkImage& image,
|
||||||
@ -1907,6 +1913,20 @@ namespace dxvk {
|
|||||||
VkPipelineStageFlags2 dstStages,
|
VkPipelineStageFlags2 dstStages,
|
||||||
VkAccessFlags2 dstAccess);
|
VkAccessFlags2 dstAccess);
|
||||||
|
|
||||||
|
void accessBuffer(
|
||||||
|
DxvkCmdBuffer cmdBuffer,
|
||||||
|
const DxvkBufferSlice& bufferSlice,
|
||||||
|
VkPipelineStageFlags2 srcStages,
|
||||||
|
VkAccessFlags2 srcAccess);
|
||||||
|
|
||||||
|
void accessBuffer(
|
||||||
|
DxvkCmdBuffer cmdBuffer,
|
||||||
|
const DxvkBufferSlice& bufferSlice,
|
||||||
|
VkPipelineStageFlags2 srcStages,
|
||||||
|
VkAccessFlags2 srcAccess,
|
||||||
|
VkPipelineStageFlags2 dstStages,
|
||||||
|
VkAccessFlags2 dstAccess);
|
||||||
|
|
||||||
void accessBuffer(
|
void accessBuffer(
|
||||||
DxvkCmdBuffer cmdBuffer,
|
DxvkCmdBuffer cmdBuffer,
|
||||||
DxvkBufferView& bufferView,
|
DxvkBufferView& bufferView,
|
||||||
@ -1921,6 +1941,15 @@ namespace dxvk {
|
|||||||
VkPipelineStageFlags2 dstStages,
|
VkPipelineStageFlags2 dstStages,
|
||||||
VkAccessFlags2 dstAccess);
|
VkAccessFlags2 dstAccess);
|
||||||
|
|
||||||
|
void accessDrawBuffer(
|
||||||
|
VkDeviceSize offset,
|
||||||
|
uint32_t count,
|
||||||
|
uint32_t stride,
|
||||||
|
uint32_t size);
|
||||||
|
|
||||||
|
void accessDrawCountBuffer(
|
||||||
|
VkDeviceSize offset);
|
||||||
|
|
||||||
void flushPendingAccesses(
|
void flushPendingAccesses(
|
||||||
DxvkBuffer& buffer,
|
DxvkBuffer& buffer,
|
||||||
VkDeviceSize offset,
|
VkDeviceSize offset,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user