mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-10-11 11:35:29 +00:00
D3D11: Added multi-draw indirect via NVAPI.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user