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:
parent
a135e01f89
commit
0691a7fc46
@ -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,
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user