mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-28 02:19:26 +01:00
[dxvk] Always use vkCmdBindIndexBuffer2 for index buffer robustness
This commit is contained in:
parent
a5de2e458a
commit
8ca0592017
@ -47,10 +47,6 @@ namespace dxvk {
|
||||
if (m_device->features().core.features.variableMultisampleRate)
|
||||
m_features.set(DxvkContextFeature::VariableMultisampleRate);
|
||||
|
||||
// Maintenance5 introduced a bounded BindIndexBuffer function
|
||||
if (m_device->features().khrMaintenance5.maintenance5)
|
||||
m_features.set(DxvkContextFeature::IndexBufferRobustness);
|
||||
|
||||
// Check whether we can batch direct draws
|
||||
if (m_device->features().extMultiDraw.multiDraw
|
||||
&& m_device->properties().extMultiDraw.maxMultiDrawCount >= DirectMultiDrawBatchSize)
|
||||
@ -6801,20 +6797,13 @@ namespace dxvk {
|
||||
m_flags.clr(DxvkContextFlag::GpDirtyIndexBuffer);
|
||||
auto bufferInfo = m_state.vi.indexBuffer.getDescriptor();
|
||||
|
||||
if (m_features.test(DxvkContextFeature::IndexBufferRobustness)) {
|
||||
VkDeviceSize align = m_state.vi.indexType == VK_INDEX_TYPE_UINT16 ? 2 : 4;
|
||||
VkDeviceSize range = bufferInfo.buffer.range & ~(align - 1);
|
||||
VkDeviceSize align = m_state.vi.indexType == VK_INDEX_TYPE_UINT16 ? 2 : 4;
|
||||
VkDeviceSize range = bufferInfo.buffer.range & ~(align - 1);
|
||||
|
||||
m_cmd->cmdBindIndexBuffer2(
|
||||
bufferInfo.buffer.buffer,
|
||||
bufferInfo.buffer.offset,
|
||||
range, m_state.vi.indexType);
|
||||
} else {
|
||||
m_cmd->cmdBindIndexBuffer(
|
||||
bufferInfo.buffer.buffer,
|
||||
bufferInfo.buffer.offset,
|
||||
m_state.vi.indexType);
|
||||
}
|
||||
m_cmd->cmdBindIndexBuffer2(
|
||||
bufferInfo.buffer.buffer,
|
||||
bufferInfo.buffer.offset,
|
||||
range, m_state.vi.indexType);
|
||||
|
||||
if (unlikely(m_state.vi.indexBuffer.buffer()->hasGfxStores())) {
|
||||
accessBuffer(DxvkCmdBuffer::ExecBuffer, m_state.vi.indexBuffer,
|
||||
|
@ -74,7 +74,6 @@ namespace dxvk {
|
||||
enum class DxvkContextFeature : uint32_t {
|
||||
TrackGraphicsPipeline,
|
||||
VariableMultisampleRate,
|
||||
IndexBufferRobustness,
|
||||
DebugUtils,
|
||||
DirectMultiDraw,
|
||||
FeatureCount
|
||||
|
@ -1822,17 +1822,13 @@ namespace dxvk {
|
||||
|
||||
void DxvkMemoryAllocator::determineBufferUsageFlagsPerMemoryType() {
|
||||
VkBufferUsageFlags flags = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
|
||||
| VK_BUFFER_USAGE_INDEX_BUFFER_BIT
|
||||
| VK_BUFFER_USAGE_VERTEX_BUFFER_BIT
|
||||
| VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
|
||||
| VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
|
||||
| VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
|
||||
| VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;
|
||||
|
||||
// Also lock index buffer usage to maintenance5 support since we
|
||||
// cannot explicitly specify a buffer range otherwise.
|
||||
if (m_device->features().khrMaintenance5.maintenance5)
|
||||
flags |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
|
||||
|
||||
if (m_device->features().extTransformFeedback.transformFeedback) {
|
||||
flags |= VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT
|
||||
| VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT;
|
||||
|
Loading…
x
Reference in New Issue
Block a user