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

[dxvk] Use vkCmdBindIndexBuffer2 if supported

This commit is contained in:
Philip Rebohle 2023-08-23 14:54:42 +02:00
parent a4f2a49a02
commit 64828e2c6c
3 changed files with 27 additions and 4 deletions

View File

@ -467,6 +467,16 @@ namespace dxvk {
}
void cmdBindIndexBuffer2(
VkBuffer buffer,
VkDeviceSize offset,
VkDeviceSize size,
VkIndexType indexType) {
m_vkd->vkCmdBindIndexBuffer2KHR(m_cmd.execBuffer,
buffer, offset, size, indexType);
}
void cmdBindPipeline(
VkPipelineBindPoint pipelineBindPoint,
VkPipeline pipeline) {

View File

@ -61,6 +61,10 @@ namespace dxvk {
// requested rasterizer sample count changes
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);
}
@ -5589,10 +5593,18 @@ namespace dxvk {
m_flags.clr(DxvkContextFlag::GpDirtyIndexBuffer);
auto bufferInfo = m_state.vi.indexBuffer.getDescriptor();
m_cmd->cmdBindIndexBuffer(
bufferInfo.buffer.buffer,
bufferInfo.buffer.offset,
m_state.vi.indexType);
if (m_features.test(DxvkContextFeature::IndexBufferRobustness)) {
m_cmd->cmdBindIndexBuffer2(
bufferInfo.buffer.buffer,
bufferInfo.buffer.offset,
bufferInfo.buffer.range,
m_state.vi.indexType);
} else {
m_cmd->cmdBindIndexBuffer(
bufferInfo.buffer.buffer,
bufferInfo.buffer.offset,
m_state.vi.indexType);
}
if (m_vbTracked.set(MaxNumVertexBindings))
m_cmd->trackResource<DxvkAccess::Read>(m_state.vi.indexBuffer.buffer());

View File

@ -65,6 +65,7 @@ namespace dxvk {
enum class DxvkContextFeature : uint32_t {
TrackGraphicsPipeline,
VariableMultisampleRate,
IndexBufferRobustness,
FeatureCount
};