Cogs.Core
CapabilitiesD3D11.cpp
1#include "CapabilitiesD3D11.h"
2
3#include "Foundation/Logging/Logger.h"
4
5namespace {
6 struct {
7 unsigned int vendorId;
9 }
10 knownVendors[] = {
11 { 0x10DE, Cogs::Vendors::nVidia },
12 { 0x1002, Cogs::Vendors::AMD },
13 { 0x1022, Cogs::Vendors::AMD },
14 { 0x163C, Cogs::Vendors::Intel },
15 { 0x8086, Cogs::Vendors::Intel },
16 { 0x8087, Cogs::Vendors::Intel }
17 };
18
19 Cogs::Logging::Log logger = Cogs::Logging::getLogger("CapabilitiesD3D11");
20
21}
22
23
24void Cogs::CapabilitiesD3D11::initialize(ID3D11Device * device)
25{
26
27 IDXGIDevice * pDXGIDevice;
28 if (SUCCEEDED(device->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice)))
29 {
30 IDXGIAdapter * pDXGIAdapter;
31 if (SUCCEEDED(pDXGIDevice->GetAdapter(&pDXGIAdapter))) {
32 DXGI_ADAPTER_DESC adapterDesc;
33 if (SUCCEEDED(pDXGIAdapter->GetDesc(&adapterDesc))) {
34 LOG_INFO(logger, "Adapter: %S", adapterDesc.Description);
35 for (auto q : knownVendors) {
36 if (q.vendorId == adapterDesc.VendorId) {
37 vendor = q.vendor;
38 break;
39 }
40 }
41
42 std::wstring brand(adapterDesc.Description);
43 if (brand.find(L"Iris")) {
44 if (brand.find(L"Pro")) {
45 series = Series::IrisPro;
46 }
47 else {
48 series = Series::Iris;
49 }
50 }
51 else if (brand.find(L"Quadro")) {
52 series = Series::Quadro;
53 }
54 else {
55 LOG_WARNING(logger, "Failed to dechiper card series.");
56 }
57
58 capabilities.DedicatedVideoMemory = adapterDesc.DedicatedVideoMemory;
59 capabilities.DedicatedSystemMemory = adapterDesc.DedicatedSystemMemory;
60 capabilities.SharedSystemMemory = adapterDesc.SharedSystemMemory;
61 }
62 pDXGIAdapter->Release();
63 }
64 pDXGIDevice->Release();
65 }
66
67 capabilities.GeometryShaders = true;
68 capabilities.TessellationShaders = true;
69 capabilities.ComputeShaders = true;
70 capabilities.MaxTextureSlots = 32;
71 capabilities.MaxTexture2DSize = D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION;
72 capabilities.MaxTexture3DSize = D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
73 capabilities.MaxTextureCubeSize = D3D11_REQ_TEXTURECUBE_DIMENSION;
74 capabilities.MaxTextureArrayLayers = D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION;
75 capabilities.TextureCompressionS3TC = true;
76 capabilities.TextureCompressionRGTC = true;
77 capabilities.TextureCompressionBPTC = true;
78}
79
80void Cogs::CapabilitiesD3D11::initialize(ID3D11Device1 * device)
81{
82 initialize(static_cast<ID3D11Device*>(device));
83 capabilities.ConstantBufferRange = true;
84}
85
86void Cogs::CapabilitiesD3D11::initialize(ID3D11Device5* device)
87{
88 initialize(static_cast<ID3D11Device1*>(device));
89 capabilities.SyncObjects = true;
90}
Log implementation class.
Definition: LogManager.h:139
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Definition: LogManager.h:180
uint32_t MaxTexture3DSize
Using D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION as default.
Definition: ICapabilities.h:81
uint32_t MaxTexture2DSize
Using D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION as default.
Definition: ICapabilities.h:80
uint32_t MaxTextureCubeSize
Using D3D11_REQ_TEXTURECUBE_DIMENSION as default.
Definition: ICapabilities.h:82
uint32_t MaxTextureArrayLayers
Using D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION as default.
Definition: ICapabilities.h:83
@ Iris
Intel Iris.
Definition: ICapabilities.h:54
@ IrisPro
Intel Iris Pro.
Definition: ICapabilities.h:56
@ Quadro
nVidia Quadro professional graphics adapters.
Definition: ICapabilities.h:48
@ nVidia
nVidia Corporation.
Definition: ICapabilities.h:20