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

[dxvk] De-duplicate drawIndirectCount implementations

No functional change, just some code cleanup.
This commit is contained in:
Philip Rebohle 2025-02-19 19:30:25 +01:00 committed by Philip Rebohle
parent a135e01f89
commit 0691a7fc46
2 changed files with 49 additions and 36 deletions

View File

@ -948,23 +948,7 @@ namespace dxvk {
VkDeviceSize countOffset,
uint32_t maxCount,
uint32_t stride) {
if (this->commitGraphicsState<false, true>()) {
auto argDescriptor = m_state.id.argBuffer.getDescriptor();
auto cntDescriptor = m_state.id.cntBuffer.getDescriptor();
m_cmd->cmdDrawIndirectCount(
argDescriptor.buffer.buffer,
argDescriptor.buffer.offset + offset,
cntDescriptor.buffer.buffer,
cntDescriptor.buffer.offset + countOffset,
maxCount, stride);
if (unlikely(m_state.id.argBuffer.buffer()->hasGfxStores()))
accessDrawBuffer(offset, maxCount, stride, sizeof(VkDrawIndirectCommand));
if (unlikely(m_state.id.cntBuffer.buffer()->hasGfxStores()))
accessDrawCountBuffer(countOffset);
}
drawIndirectCountGeneric<false>(offset, countOffset, maxCount, stride);
}
@ -997,23 +981,7 @@ namespace dxvk {
VkDeviceSize countOffset,
uint32_t maxCount,
uint32_t stride) {
if (this->commitGraphicsState<true, true>()) {
auto argDescriptor = m_state.id.argBuffer.getDescriptor();
auto cntDescriptor = m_state.id.cntBuffer.getDescriptor();
m_cmd->cmdDrawIndexedIndirectCount(
argDescriptor.buffer.buffer,
argDescriptor.buffer.offset + offset,
cntDescriptor.buffer.buffer,
cntDescriptor.buffer.offset + countOffset,
maxCount, stride);
if (unlikely(m_state.id.argBuffer.buffer()->hasGfxStores()))
accessDrawBuffer(offset, maxCount, stride, sizeof(VkDrawIndexedIndirectCommand));
if (unlikely(m_state.id.cntBuffer.buffer()->hasGfxStores()))
accessDrawCountBuffer(countOffset);
}
drawIndirectCountGeneric<true>(offset, countOffset, maxCount, stride);
}
@ -1767,6 +1735,44 @@ namespace dxvk {
}
template<bool Indexed>
void DxvkContext::drawIndirectCountGeneric(
VkDeviceSize offset,
VkDeviceSize countOffset,
uint32_t maxCount,
uint32_t stride) {
if (this->commitGraphicsState<Indexed, true>()) {
auto argDescriptor = m_state.id.argBuffer.getDescriptor();
auto cntDescriptor = m_state.id.cntBuffer.getDescriptor();
if (Indexed) {
m_cmd->cmdDrawIndexedIndirectCount(
argDescriptor.buffer.buffer,
argDescriptor.buffer.offset + offset,
cntDescriptor.buffer.buffer,
cntDescriptor.buffer.offset + countOffset,
maxCount, stride);
} else {
m_cmd->cmdDrawIndirectCount(
argDescriptor.buffer.buffer,
argDescriptor.buffer.offset + offset,
cntDescriptor.buffer.buffer,
cntDescriptor.buffer.offset + countOffset,
maxCount, stride);
}
if (unlikely(m_state.id.argBuffer.buffer()->hasGfxStores())) {
accessDrawBuffer(offset, maxCount, stride, Indexed
? sizeof(VkDrawIndexedIndirectCommand)
: sizeof(VkDrawIndirectCommand));
}
if (unlikely(m_state.id.cntBuffer.buffer()->hasGfxStores()))
accessDrawCountBuffer(countOffset);
}
}
void DxvkContext::resolveImage(
const Rc<DxvkImage>& dstImage,
const Rc<DxvkImage>& srcImage,

View File

@ -1602,6 +1602,13 @@ namespace dxvk {
uint32_t stride,
bool unroll);
template<bool Indexed>
void drawIndirectCountGeneric(
VkDeviceSize offset,
VkDeviceSize countOffset,
uint32_t maxCount,
uint32_t stride);
void resolveImageHw(
const Rc<DxvkImage>& dstImage,
const Rc<DxvkImage>& srcImage,