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,
|
VkDeviceSize countOffset,
|
||||||
uint32_t maxCount,
|
uint32_t maxCount,
|
||||||
uint32_t stride) {
|
uint32_t stride) {
|
||||||
if (this->commitGraphicsState<false, true>()) {
|
drawIndirectCountGeneric<false>(offset, countOffset, maxCount, stride);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -997,26 +981,10 @@ namespace dxvk {
|
|||||||
VkDeviceSize countOffset,
|
VkDeviceSize countOffset,
|
||||||
uint32_t maxCount,
|
uint32_t maxCount,
|
||||||
uint32_t stride) {
|
uint32_t stride) {
|
||||||
if (this->commitGraphicsState<true, true>()) {
|
drawIndirectCountGeneric<true>(offset, countOffset, maxCount, stride);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::drawIndirectXfb(
|
void DxvkContext::drawIndirectXfb(
|
||||||
VkDeviceSize counterOffset,
|
VkDeviceSize counterOffset,
|
||||||
uint32_t counterDivisor,
|
uint32_t counterDivisor,
|
||||||
@ -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(
|
void DxvkContext::resolveImage(
|
||||||
const Rc<DxvkImage>& dstImage,
|
const Rc<DxvkImage>& dstImage,
|
||||||
const Rc<DxvkImage>& srcImage,
|
const Rc<DxvkImage>& srcImage,
|
||||||
|
@ -1602,6 +1602,13 @@ namespace dxvk {
|
|||||||
uint32_t stride,
|
uint32_t stride,
|
||||||
bool unroll);
|
bool unroll);
|
||||||
|
|
||||||
|
template<bool Indexed>
|
||||||
|
void drawIndirectCountGeneric(
|
||||||
|
VkDeviceSize offset,
|
||||||
|
VkDeviceSize countOffset,
|
||||||
|
uint32_t maxCount,
|
||||||
|
uint32_t stride);
|
||||||
|
|
||||||
void resolveImageHw(
|
void resolveImageHw(
|
||||||
const Rc<DxvkImage>& dstImage,
|
const Rc<DxvkImage>& dstImage,
|
||||||
const Rc<DxvkImage>& srcImage,
|
const Rc<DxvkImage>& srcImage,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user