D3D11: Added multi-draw indirect via NVAPI.

This commit is contained in:
Branimir Karadžić
2018-01-15 21:57:21 -08:00
parent ba8b9a76fe
commit d835c09d7b
3 changed files with 51 additions and 7 deletions

View File

@@ -674,6 +674,9 @@ namespace bgfx { namespace d3d11
void amdAgsMultiDrawInstancedIndirect(uint32_t _numDrawIndirect, ID3D11Buffer* _ptr, uint32_t _offset, uint32_t _stride);
void amdAgsMultiDrawIndexedInstancedIndirect(uint32_t _numDrawIndirect, ID3D11Buffer* _ptr, uint32_t _offset, uint32_t _stride);
void nvapiMultiDrawInstancedIndirect(uint32_t _numDrawIndirect, ID3D11Buffer* _ptr, uint32_t _offset, uint32_t _stride);
void nvapiMultiDrawIndexedInstancedIndirect(uint32_t _numDrawIndirect, ID3D11Buffer* _ptr, uint32_t _offset, uint32_t _stride);
static MultiDrawIndirectFn multiDrawInstancedIndirect;
static MultiDrawIndirectFn multiDrawIndexedInstancedIndirect;
@@ -1242,6 +1245,11 @@ BX_PRAGMA_DIAGNOSTIC_POP();
;
g_caps.deviceId = (uint16_t)m_adapterDesc.DeviceId;
if (BGFX_PCI_ID_NVIDIA != m_adapterDesc.VendorId)
{
m_nvapi.shutdown();
}
if (NULL == g_platformData.backBuffer)
{
#if !BX_PLATFORM_WINDOWS
@@ -1836,6 +1844,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_ags = NULL;
}
}
else if (m_nvapi.isInitialized()
&& NULL != m_nvapi.nvApiD3D11MultiDrawInstancedIndirect
&& NULL != m_nvapi.nvApiD3D11MultiDrawIndexedInstancedIndirect)
{
multiDrawInstancedIndirect = nvapiMultiDrawInstancedIndirect;
multiDrawIndexedInstancedIndirect = nvapiMultiDrawIndexedInstancedIndirect;
}
}
//
@@ -3993,6 +4008,16 @@ BX_PRAGMA_DIAGNOSTIC_POP();
agsDriverExtensions_MultiDrawIndexedInstancedIndirect(s_renderD3D11->m_ags, _numDrawIndirect, _ptr, _offset, _stride);
}
void nvapiMultiDrawInstancedIndirect(uint32_t _numDrawIndirect, ID3D11Buffer* _ptr, uint32_t _offset, uint32_t _stride)
{
s_renderD3D11->m_nvapi.nvApiD3D11MultiDrawInstancedIndirect(s_renderD3D11->m_deviceCtx, _numDrawIndirect, _ptr, _offset, _stride);
}
void nvapiMultiDrawIndexedInstancedIndirect(uint32_t _numDrawIndirect, ID3D11Buffer* _ptr, uint32_t _offset, uint32_t _stride)
{
s_renderD3D11->m_nvapi.nvApiD3D11MultiDrawIndexedInstancedIndirect(s_renderD3D11->m_deviceCtx, _numDrawIndirect, _ptr, _offset, _stride);
}
int WINAPI d3d11Annotation_BeginEvent(DWORD _color, LPCWSTR _name)
{
BX_UNUSED(_color);
@@ -6609,7 +6634,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
: draw.m_numIndirect
;
multiDrawIndexedInstancedIndirect(numDrawIndirect
multiDrawIndexedInstancedIndirect(
numDrawIndirect
, ptr
, draw.m_startIndirect * BGFX_CONFIG_DRAW_INDIRECT_STRIDE
, BGFX_CONFIG_DRAW_INDIRECT_STRIDE
@@ -6622,7 +6648,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
: draw.m_numIndirect
;
multiDrawInstancedIndirect(numDrawIndirect
multiDrawInstancedIndirect(
numDrawIndirect
, ptr
, draw.m_startIndirect * BGFX_CONFIG_DRAW_INDIRECT_STRIDE
, BGFX_CONFIG_DRAW_INDIRECT_STRIDE