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

[d3d11] Implemented index buffer binding

This commit is contained in:
Philip Rebohle 2017-12-08 01:51:49 +01:00
parent 9e1cf8396b
commit 56826cbf82

View File

@ -588,7 +588,41 @@ namespace dxvk {
ID3D11Buffer* pIndexBuffer,
DXGI_FORMAT Format,
UINT Offset) {
Logger::err("D3D11DeviceContext::IASetIndexBuffer: Not implemented");
D3D11IndexBufferBinding binding;
binding.buffer = static_cast<D3D11Buffer*>(pIndexBuffer);
binding.offset = Offset;
binding.format = Format;
m_state.ia.indexBuffer = binding;
DxvkBufferBinding dxvkBinding;
if (binding.buffer != nullptr) {
Rc<DxvkBuffer> dxvkBuffer = binding.buffer->GetDXVKBuffer();
dxvkBinding = DxvkBufferBinding(
dxvkBuffer, binding.offset,
dxvkBuffer->info().size - binding.offset);
}
// As in Vulkan, the index format can be either a 32-bit
// unsigned integer or a 16-bit unsigned integer, no other
// formats are allowed.
VkIndexType indexType = VK_INDEX_TYPE_UINT32;
switch (binding.format) {
case DXGI_FORMAT_R16_UINT: indexType = VK_INDEX_TYPE_UINT16; break;
case DXGI_FORMAT_R32_UINT: indexType = VK_INDEX_TYPE_UINT32; break;
default:
Logger::err(str::format(
"D3D11DeviceContext::IASetIndexBuffer: Invalid index format: ",
binding.format));
}
m_context->bindIndexBuffer(
dxvkBinding, indexType);
}