diff --git a/Source/Engine/GraphicsDevice/DirectX/DX11/GPUDeviceDX11.cpp b/Source/Engine/GraphicsDevice/DirectX/DX11/GPUDeviceDX11.cpp index 78750042c..47a31e109 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX11/GPUDeviceDX11.cpp +++ b/Source/Engine/GraphicsDevice/DirectX/DX11/GPUDeviceDX11.cpp @@ -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)); diff --git a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUDeviceDX12.cpp b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUDeviceDX12.cpp index 3d525b276..5b201c6e9 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUDeviceDX12.cpp +++ b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUDeviceDX12.cpp @@ -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); diff --git a/Source/Engine/GraphicsDevice/DirectX/GPUDeviceDX.h b/Source/Engine/GraphicsDevice/DirectX/GPUDeviceDX.h index 3cbdcc2bd..fcd7d4196 100644 --- a/Source/Engine/GraphicsDevice/DirectX/GPUDeviceDX.h +++ b/Source/Engine/GraphicsDevice/DirectX/GPUDeviceDX.h @@ -46,53 +46,9 @@ public: Array 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); diff --git a/Source/Engine/GraphicsDevice/DirectX/IncludeDirectXHeaders.h b/Source/Engine/GraphicsDevice/DirectX/IncludeDirectXHeaders.h index d2da068f8..27f3d2b38 100644 --- a/Source/Engine/GraphicsDevice/DirectX/IncludeDirectXHeaders.h +++ b/Source/Engine/GraphicsDevice/DirectX/IncludeDirectXHeaders.h @@ -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