Fix compilation on Xbox with new D3D12MA lib used
This commit is contained in:
@@ -87,6 +87,37 @@ static D3D11_STENCIL_OP ToDX11(StencilOperation value)
|
||||
}
|
||||
}
|
||||
|
||||
static RendererType GetRendererType(GPUAdapterDX* adapter)
|
||||
{
|
||||
switch (adapter->MaxFeatureLevel)
|
||||
{
|
||||
case D3D_FEATURE_LEVEL_10_0:
|
||||
return RendererType::DirectX10;
|
||||
case D3D_FEATURE_LEVEL_10_1:
|
||||
return RendererType::DirectX10_1;
|
||||
case D3D_FEATURE_LEVEL_11_0:
|
||||
case D3D_FEATURE_LEVEL_11_1:
|
||||
return RendererType::DirectX11;
|
||||
default:
|
||||
return RendererType::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
static ShaderProfile GetShaderProfile(GPUAdapterDX* adapter)
|
||||
{
|
||||
switch (adapter->MaxFeatureLevel)
|
||||
{
|
||||
case D3D_FEATURE_LEVEL_10_0:
|
||||
case D3D_FEATURE_LEVEL_10_1:
|
||||
return ShaderProfile::DirectX_SM4;
|
||||
case D3D_FEATURE_LEVEL_11_0:
|
||||
case D3D_FEATURE_LEVEL_11_1:
|
||||
return ShaderProfile::DirectX_SM5;
|
||||
default:
|
||||
return ShaderProfile::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
static bool TryCreateDevice(IDXGIAdapter* adapter, D3D_FEATURE_LEVEL maxFeatureLevel, D3D_FEATURE_LEVEL* featureLevel)
|
||||
{
|
||||
ID3D11Device* device = nullptr;
|
||||
@@ -335,7 +366,7 @@ GPUDevice* GPUDeviceDX11::Create()
|
||||
}
|
||||
|
||||
GPUDeviceDX11::GPUDeviceDX11(IDXGIFactory* dxgiFactory, GPUAdapterDX* adapter)
|
||||
: GPUDeviceDX(getRendererType(adapter), getShaderProfile(adapter), adapter)
|
||||
: GPUDeviceDX(::GetRendererType(adapter), ::GetShaderProfile(adapter), adapter)
|
||||
, _factoryDXGI(dxgiFactory)
|
||||
{
|
||||
Platform::MemoryClear(RasterizerStates, sizeof(RasterizerStates));
|
||||
|
||||
@@ -602,6 +602,7 @@ GPUMemoryStats GPUDeviceDX12::GetMemoryStats()
|
||||
|
||||
bool GPUDeviceDX12::Init()
|
||||
{
|
||||
HRESULT hr;
|
||||
#if PLATFORM_XBOX_SCARLETT || PLATFORM_XBOX_ONE
|
||||
// Create DirectX device
|
||||
D3D12XBOX_CREATE_DEVICE_PARAMETERS params = {};
|
||||
@@ -690,18 +691,17 @@ bool GPUDeviceDX12::Init()
|
||||
#endif
|
||||
#else
|
||||
// Get DXGI adapter
|
||||
IDXGIAdapter1* adapter;
|
||||
IDXGIAdapter1* dxgiAdapter;
|
||||
ASSERT(_factoryDXGI);
|
||||
if (_factoryDXGI->EnumAdapters1(_adapter->Index, &adapter) == DXGI_ERROR_NOT_FOUND || adapter == nullptr)
|
||||
if (_factoryDXGI->EnumAdapters1(_adapter->Index, &dxgiAdapter) == DXGI_ERROR_NOT_FOUND || dxgiAdapter == nullptr)
|
||||
{
|
||||
LOG(Warning, "Cannot get the adapter.");
|
||||
return true;
|
||||
}
|
||||
UpdateOutputs(adapter);
|
||||
UpdateOutputs(dxgiAdapter);
|
||||
|
||||
// Create DirectX device
|
||||
VALIDATE_DIRECTX_CALL(D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&_device)));
|
||||
HRESULT hr;
|
||||
VALIDATE_DIRECTX_CALL(D3D12CreateDevice(dxgiAdapter, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&_device)));
|
||||
|
||||
#if PLATFORM_WINDOWS
|
||||
// Detect RenderDoc usage (UUID {A7AA6116-9C8D-4BBA-9083-B4D816B71B78})
|
||||
@@ -853,7 +853,7 @@ bool GPUDeviceDX12::Init()
|
||||
allocationCallbacks.pFree = &D3D12MA_Free;
|
||||
D3D12MA::ALLOCATOR_DESC allocatorDesc = {};
|
||||
allocatorDesc.pDevice = _device;
|
||||
allocatorDesc.pAdapter = adapter;
|
||||
allocatorDesc.pAdapter = dxgiAdapter;
|
||||
allocatorDesc.Flags = D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS;
|
||||
allocatorDesc.pAllocationCallbacks = &allocationCallbacks;
|
||||
hr = D3D12MA::CreateAllocator(&allocatorDesc, &Allocator);
|
||||
|
||||
@@ -46,53 +46,9 @@ public:
|
||||
Array<VideoOutputDX> Outputs;
|
||||
|
||||
protected:
|
||||
|
||||
void UpdateOutputs(IDXGIAdapter* adapter);
|
||||
|
||||
static RendererType getRendererType(GPUAdapterDX* adapter)
|
||||
{
|
||||
switch (adapter->MaxFeatureLevel)
|
||||
{
|
||||
case D3D_FEATURE_LEVEL_10_0:
|
||||
return RendererType::DirectX10;
|
||||
case D3D_FEATURE_LEVEL_10_1:
|
||||
return RendererType::DirectX10_1;
|
||||
case D3D_FEATURE_LEVEL_11_0:
|
||||
case D3D_FEATURE_LEVEL_11_1:
|
||||
return RendererType::DirectX11;
|
||||
#if GRAPHICS_API_DIRECTX12
|
||||
case D3D_FEATURE_LEVEL_12_0:
|
||||
case D3D_FEATURE_LEVEL_12_1:
|
||||
return RendererType::DirectX12;
|
||||
#endif
|
||||
default:
|
||||
return RendererType::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
static ShaderProfile getShaderProfile(GPUAdapterDX* adapter)
|
||||
{
|
||||
switch (adapter->MaxFeatureLevel)
|
||||
{
|
||||
case D3D_FEATURE_LEVEL_10_0:
|
||||
case D3D_FEATURE_LEVEL_10_1:
|
||||
return ShaderProfile::DirectX_SM4;
|
||||
case D3D_FEATURE_LEVEL_11_0:
|
||||
case D3D_FEATURE_LEVEL_11_1:
|
||||
return ShaderProfile::DirectX_SM5;
|
||||
#if GRAPHICS_API_DIRECTX12
|
||||
case D3D_FEATURE_LEVEL_12_0:
|
||||
case D3D_FEATURE_LEVEL_12_1:
|
||||
case D3D_FEATURE_LEVEL_12_2:
|
||||
return ShaderProfile::DirectX_SM5;
|
||||
#endif
|
||||
default:
|
||||
return ShaderProfile::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
// [GPUDevice]
|
||||
GPUAdapter* GetAdapter() const override
|
||||
{
|
||||
@@ -100,7 +56,6 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
// [GPUDevice]
|
||||
bool Init() override
|
||||
{
|
||||
@@ -137,7 +92,6 @@ protected:
|
||||
// Base
|
||||
return GPUDevice::Init();
|
||||
}
|
||||
|
||||
void Dispose() override
|
||||
{
|
||||
Outputs.Resize(0);
|
||||
|
||||
@@ -27,6 +27,10 @@ typedef IGraphicsUnknown IDXGIFactory4;
|
||||
typedef IGraphicsUnknown IDXGISwapChain3;
|
||||
#define D3D12_TEXTURE_DATA_PITCH_ALIGNMENT 256
|
||||
#define IID_PPV_ARGS(ppType) IID_GRAPHICS_PPV_ARGS(ppType)
|
||||
#define D3D12MA_OPTIONS16_SUPPORTED 0
|
||||
#define D3D12MA_TIGHT_ALIGNMENT_SUPPORTED 0
|
||||
#define D3D12MA_D3D12_HEADERS_ALREADY_INCLUDED
|
||||
#define __ID3D12Device1_INTERFACE_DEFINED__
|
||||
|
||||
#else
|
||||
|
||||
|
||||
Reference in New Issue
Block a user