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,12 +936,7 @@ namespace dxvk {
|
||||
m_queryManager.endQueries(m_cmd,
|
||||
VK_QUERY_TYPE_PIPELINE_STATISTICS);
|
||||
|
||||
accessBuffer(DxvkCmdBuffer::ExecBuffer,
|
||||
*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);
|
||||
accessDrawBuffer(offset, 1, 0, sizeof(VkDispatchIndirectCommand));
|
||||
|
||||
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(
|
||||
DxvkCmdBuffer cmdBuffer,
|
||||
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(
|
||||
DxvkCmdBuffer cmdBuffer,
|
||||
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(
|
||||
DxvkBuffer& buffer,
|
||||
VkDeviceSize offset,
|
||||
|
@ -1878,6 +1878,12 @@ namespace dxvk {
|
||||
VkPipelineStageFlags2 srcStages,
|
||||
VkAccessFlags2 srcAccess);
|
||||
|
||||
void accessImage(
|
||||
DxvkCmdBuffer cmdBuffer,
|
||||
const DxvkImageView& imageView,
|
||||
VkPipelineStageFlags2 srcStages,
|
||||
VkAccessFlags2 srcAccess);
|
||||
|
||||
void accessImage(
|
||||
DxvkCmdBuffer cmdBuffer,
|
||||
DxvkImage& image,
|
||||
@ -1907,6 +1913,20 @@ namespace dxvk {
|
||||
VkPipelineStageFlags2 dstStages,
|
||||
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(
|
||||
DxvkCmdBuffer cmdBuffer,
|
||||
DxvkBufferView& bufferView,
|
||||
@ -1921,6 +1941,15 @@ namespace dxvk {
|
||||
VkPipelineStageFlags2 dstStages,
|
||||
VkAccessFlags2 dstAccess);
|
||||
|
||||
void accessDrawBuffer(
|
||||
VkDeviceSize offset,
|
||||
uint32_t count,
|
||||
uint32_t stride,
|
||||
uint32_t size);
|
||||
|
||||
void accessDrawCountBuffer(
|
||||
VkDeviceSize offset);
|
||||
|
||||
void flushPendingAccesses(
|
||||
DxvkBuffer& buffer,
|
||||
VkDeviceSize offset,
|
||||
|
Loading…
x
Reference in New Issue
Block a user