D3D12: Fixed validation issues.

This commit is contained in:
Branimir Karadžić 2018-06-19 17:52:51 -07:00
parent 694735f95c
commit f4e1f47e1c

View File

@ -435,10 +435,12 @@ namespace bgfx { namespace d3d12
static void initHeapProperties(ID3D12Device* _device)
{
#if BX_PLATFORM_WINDOWS
initHeapProperties(_device, s_heapProperties[HeapProperty::Default ].m_properties);
initHeapProperties(_device, s_heapProperties[HeapProperty::Texture ].m_properties);
initHeapProperties(_device, s_heapProperties[HeapProperty::Upload ].m_properties);
initHeapProperties(_device, s_heapProperties[HeapProperty::ReadBack].m_properties);
#endif // BX_PLATFORM_WINDOWS
}
ID3D12Resource* createCommittedResource(ID3D12Device* _device, HeapProperty::Enum _heapProperty, const D3D12_RESOURCE_DESC* _resourceDesc, const D3D12_CLEAR_VALUE* _clearValue, bool _memSet = false)
@ -742,11 +744,13 @@ namespace bgfx { namespace d3d12
if (SUCCEEDED(hr) )
{
uint32_t debugFlags = 0;
if (_init.debug)
{
#if BX_PLATFORM_WINDOWS
debug0->EnableDebugLayer();
#if BX_PLATFORM_WINDOWS
{
ID3D12Debug1* debug1;
hr = debug0->QueryInterface(IID_ID3D12Debug1, (void**)&debug1);
@ -760,15 +764,17 @@ namespace bgfx { namespace d3d12
DX_RELEASE(debug1, 1);
}
#elif BX_PLATFORM_XBOXONE
debug0->SetProcessDebugFlags(D3D12_PROCESS_DEBUG_FLAG_DEBUG_LAYER_ENABLED);
debugFlags |= D3D12_PROCESS_DEBUG_FLAG_DEBUG_LAYER_ENABLED;
#endif // BX_PLATFORM_WINDOWS
}
#if BX_PLATFORM_XBOXONE
if (_init.profile)
// https://github.com/Microsoft/Xbox-ATG-Samples/blob/76d236e3bd372aceec18b2ad0556a7879dbd9628/XDKSamples/IntroGraphics/SimpleTriangle12/DeviceResources.cpp#L67
debugFlags |= _init.profile ? D3D12XBOX_PROCESS_DEBUG_FLAG_INSTRUMENTED : 0;
if (0 != debugFlags)
{
// https://github.com/Microsoft/Xbox-ATG-Samples/blob/76d236e3bd372aceec18b2ad0556a7879dbd9628/XDKSamples/IntroGraphics/SimpleTriangle12/DeviceResources.cpp#L67
debug0->SetProcessDebugFlags(D3D12XBOX_PROCESS_DEBUG_FLAG_INSTRUMENTED);
debug0->SetProcessDebugFlags(D3D12XBOX_PROCESS_DEBUG_FLAGS(debugFlags) );
}
#endif // BX_PLATFORM_XBOXONE
@ -813,6 +819,10 @@ namespace bgfx { namespace d3d12
m_dxgi.update(m_device);
#if BX_PLATFORM_XBOXONE
m_device->SetDebugErrorFilterX(0x73EC9EAF, D3D12XBOX_DEBUG_FILTER_FLAG_DISABLE_BREAKS);
#endif // BX_PLATFORM_XBOXONE
if (BGFX_PCI_ID_NVIDIA != m_dxgi.m_adapterDesc.VendorId)
{
m_nvapi.shutdown();
@ -1998,10 +2008,16 @@ namespace bgfx { namespace d3d12
clearValue.DepthStencil.Depth = 1.0f;
clearValue.DepthStencil.Stencil = 0;
m_commandList = m_cmd.alloc();
m_backBufferDepthStencil = createCommittedResource(m_device, HeapProperty::Default, &resourceDesc, &clearValue);
m_device->CreateDepthStencilView(m_backBufferDepthStencil, NULL, getCPUHandleHeapStart(m_dsvDescriptorHeap));
m_commandList = m_cmd.alloc();
setResourceBarrier(m_commandList
, m_backBufferDepthStencil
, D3D12_RESOURCE_STATE_COMMON
, D3D12_RESOURCE_STATE_DEPTH_WRITE
);
for (uint32_t ii = 0; ii < BX_COUNTOF(m_frameBuffers); ++ii)
{
@ -4164,6 +4180,9 @@ namespace bgfx { namespace d3d12
if (drawIndirect)
{
#if BX_PLATFORM_XBOXONE
flags |= D3D12XBOX_RESOURCE_FLAG_ALLOW_INDIRECT_BUFFER;
#endif // BX_PLATFORM_XBOXONE
format = DXGI_FORMAT_R32G32B32A32_UINT;
stride = 16;
}