Fix compilation on Xbox with new D3D12MA lib used

This commit is contained in:
2026-04-24 11:21:42 +02:00
parent c782f07b76
commit c0f52235c6
4 changed files with 42 additions and 53 deletions
@@ -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