Skip to content

Commit 464fed8

Browse files
committed
2 parents 5b98101 + c2a87d2 commit 464fed8

File tree

2 files changed

+105
-4
lines changed

2 files changed

+105
-4
lines changed

UWPSamples/System/SystemInfoUWP/SystemInfo.cpp

Lines changed: 104 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ void Sample::Update(DX::StepTimer const&)
115115
}
116116

117117
if (m_keyboardButtons.IsKeyPressed(Keyboard::Right)
118+
|| m_keyboardButtons.IsKeyPressed(Keyboard::Enter)
119+
|| m_keyboardButtons.IsKeyPressed(Keyboard::Space)
118120
|| m_gamePadButtons.a == GamePad::ButtonStateTracker::PRESSED
119121
|| m_gamePadButtons.dpadRight == GamePad::ButtonStateTracker::PRESSED)
120122
{
@@ -124,6 +126,7 @@ void Sample::Update(DX::StepTimer const&)
124126
}
125127

126128
if (m_keyboardButtons.IsKeyPressed(Keyboard::Left)
129+
|| m_keyboardButtons.IsKeyPressed(Keyboard::Back)
127130
|| m_gamePadButtons.b == GamePad::ButtonStateTracker::PRESSED
128131
|| m_gamePadButtons.dpadLeft == GamePad::ButtonStateTracker::PRESSED)
129132
{
@@ -395,7 +398,7 @@ void Sample::Render()
395398
GetGamingDeviceModelInformation(&info);
396399

397400
wchar_t buff[128] = {};
398-
swprintf_s(buff, L"%08X", info.vendorId);
401+
swprintf_s(buff, L"%08X", static_cast<unsigned int>(info.vendorId));
399402

400403
switch (info.vendorId)
401404
{
@@ -405,7 +408,7 @@ void Sample::Render()
405408
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"VendorId", left, y, m_scale);
406409
y += DrawStringRight(m_batch.get(), m_smallFont.get(), buff, right, y, m_scale);
407410

408-
swprintf_s(buff, L"%08X", info.deviceId);
411+
swprintf_s(buff, L"%08X", static_cast<unsigned int>(info.deviceId));
409412

410413
if (info.vendorId == GAMING_DEVICE_VENDOR_ID_MICROSOFT)
411414
{
@@ -445,6 +448,7 @@ void Sample::Render()
445448
bool isuniversal5 = ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5, 0);
446449
bool isuniversal6 = ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 6, 0);
447450
bool isuniversal7 = ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 7, 0);
451+
bool isuniversal8 = ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8, 0);
448452
bool isphone = ApiInformation::IsApiContractPresent("Windows.Phone.PhoneContract", 1, 0);
449453
bool isstore2 = ApiInformation::IsApiContractPresent("Windows.Services.Store.StoreContract", 2, 0);
450454
bool isstore3 = ApiInformation::IsApiContractPresent("Windows.Services.Store.StoreContract", 3, 0);
@@ -468,6 +472,7 @@ void Sample::Render()
468472
if (isuniversal5) { wcscat_s(contracts, L", 5.0"); }
469473
if (isuniversal6) { wcscat_s(contracts, L", 6.0"); }
470474
if (isuniversal7) { wcscat_s(contracts, L", 7.0"); }
475+
if (isuniversal8) { wcscat_s(contracts, L", 8.0"); }
471476

472477
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"UniversalApiContract", left, y, m_scale);
473478
y += DrawStringRight(m_batch.get(), m_smallFont.get(), contracts, right, y, m_scale);
@@ -663,7 +668,8 @@ void Sample::Render()
663668
y += DrawStringCenter(m_batch.get(), m_smallFont.get(), L"DXGI_OUTPUT_DESC", mid, y, ATG::Colors::OffWhite, m_scale);
664669

665670
ComPtr<IDXGIOutput> output;
666-
if (SUCCEEDED(m_deviceResources->GetSwapChain()->GetContainingOutput(output.GetAddressOf())))
671+
HRESULT hr = m_deviceResources->GetSwapChain()->GetContainingOutput(output.GetAddressOf());
672+
if (SUCCEEDED(hr))
667673
{
668674
DXGI_OUTPUT_DESC outputDesc = {};
669675
DX::ThrowIfFailed(output->GetDesc(&outputDesc));
@@ -743,6 +749,14 @@ void Sample::Render()
743749
y += DrawStringRight(m_batch.get(), m_smallFont.get(), buff, right, y, m_scale);
744750
}
745751
}
752+
else
753+
{
754+
wchar_t buff[128] = {};
755+
swprintf_s(buff, L"GetContainingOutput failed with %08X", static_cast<unsigned int>(hr));
756+
y += DrawStringCenter(m_batch.get(), m_smallFont.get(), buff, mid, y, ATG::Colors::Orange, m_scale);
757+
}
758+
759+
y += m_smallFont->GetLineSpacing() * m_scale;
746760

747761
ComPtr<IDXGIDevice3> dxgiDevice;
748762
if (SUCCEEDED(m_deviceResources->GetD3DDevice()->QueryInterface(IID_PPV_ARGS(dxgiDevice.GetAddressOf()))))
@@ -756,7 +770,18 @@ void Sample::Render()
756770
BOOL allowTearing = FALSE;
757771
if (SUCCEEDED(dxgiFactory->CheckFeatureSupport(DXGI_FEATURE_PRESENT_ALLOW_TEARING, &allowTearing, sizeof(BOOL))))
758772
{
759-
y += DrawStringCenter(m_batch.get(), m_smallFont.get(), L"DXGI 1.5", mid, y, ATG::Colors::OffWhite, m_scale);
773+
const wchar_t* dxgiver = L"DXGI 1.5";
774+
#if defined(NTDDI_WIN10_RS4) && (NTDDI_VERSION >= NTDDI_WIN10_RS4)
775+
{
776+
ComPtr<IDXGIFactory6> dxgiFactory6;
777+
if (SUCCEEDED(dxgiFactory.As(&dxgiFactory6)))
778+
{
779+
dxgiver = L"DXGI 1.6";
780+
}
781+
}
782+
#endif
783+
784+
y += DrawStringCenter(m_batch.get(), m_smallFont.get(), dxgiver, mid, y, ATG::Colors::OffWhite, m_scale);
760785

761786
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"Allow Tearing", left, y, m_scale);
762787
y += DrawStringRight(m_batch.get(), m_smallFont.get(), allowTearing ? L"true" : L"false", right, y, m_scale);
@@ -1134,6 +1159,10 @@ void Sample::Render()
11341159
case D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED: crossTier = L"Tier 1 (emulated)"; break;
11351160
case D3D12_CROSS_NODE_SHARING_TIER_1: crossTier = L"Tier 1"; break;
11361161
case D3D12_CROSS_NODE_SHARING_TIER_2: crossTier = L"Tier 2"; break;
1162+
1163+
#if defined(NTDDI_WIN10_RS4) && (NTDDI_VERSION >= NTDDI_WIN10_RS4)
1164+
case D3D12_CROSS_NODE_SHARING_TIER_3: crossTier = L"Tier 3"; break;
1165+
#endif
11371166
}
11381167

11391168
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"CrossNodeSharingTier", left, y, m_scale);
@@ -1281,11 +1310,15 @@ void Sample::Render()
12811310
}
12821311
else
12831312
{
1313+
bool found = false;
1314+
12841315
// Optional Direct3D 12 features for Windows 10 April 2018 Update
12851316
#if defined(NTDDI_WIN10_RS4) && (NTDDI_VERSION >= NTDDI_WIN10_RS4)
12861317
D3D12_FEATURE_DATA_D3D12_OPTIONS4 d3d12opts4 = {};
12871318
if (SUCCEEDED(device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS4, &d3d12opts4, sizeof(d3d12opts4))))
12881319
{
1320+
found = true;
1321+
12891322
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"MSAA64KBAlignedTextureSupported", left, y, m_scale);
12901323
y += DrawStringRight(m_batch.get(), m_smallFont.get(), d3d12opts4.MSAA64KBAlignedTextureSupported ? L"true" : L"false", right, y, m_scale);
12911324

@@ -1306,6 +1339,8 @@ void Sample::Render()
13061339
D3D12_FEATURE_DATA_SERIALIZATION d3d12serial = {};
13071340
if (SUCCEEDED(device->CheckFeatureSupport(D3D12_FEATURE_SERIALIZATION, &d3d12serial, sizeof(d3d12serial))))
13081341
{
1342+
found = true;
1343+
13091344
const wchar_t* serialTier = L"Unknown";
13101345
switch (d3d12serial.HeapSerializationTier)
13111346
{
@@ -1325,6 +1360,8 @@ void Sample::Render()
13251360
D3D12_FEATURE_DATA_CROSS_NODE d3d12xnode = {};
13261361
if (SUCCEEDED(device->CheckFeatureSupport(D3D12_FEATURE_CROSS_NODE, &d3d12xnode, sizeof(d3d12xnode))))
13271362
{
1363+
found = true;
1364+
13281365
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"Cross node AtomicShaderInstructions", left, y, m_scale);
13291366
y += DrawStringRight(m_batch.get(), m_smallFont.get(), d3d12xnode.AtomicShaderInstructions ? L"true" : L"false", right, y, m_scale);
13301367

@@ -1348,6 +1385,8 @@ void Sample::Render()
13481385
D3D12_FEATURE_DATA_D3D12_OPTIONS5 d3d12opts5 = {};
13491386
if (SUCCEEDED(device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS5, &d3d12opts5, sizeof(d3d12opts5))))
13501387
{
1388+
found = true;
1389+
13511390
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"SRVOnlyTiledResourceTier3", left, y, m_scale);
13521391
y += DrawStringRight(m_batch.get(), m_smallFont.get(), d3d12opts5.SRVOnlyTiledResourceTier3 ? L"true" : L"false", right, y, m_scale);
13531392

@@ -1373,6 +1412,67 @@ void Sample::Render()
13731412
y += DrawStringRight(m_batch.get(), m_smallFont.get(), rtTier, right, y, m_scale);
13741413
}
13751414
#endif
1415+
1416+
if (!found)
1417+
{
1418+
y += DrawStringCenter(m_batch.get(), m_smallFont.get(), L"Requires Windows 10 April 2018 Update or later", mid, y, ATG::Colors::Orange, m_scale);
1419+
}
1420+
}
1421+
}
1422+
break;
1423+
1424+
case InfoPage::DIRECT3D12_OPT3:
1425+
{
1426+
y += DrawStringCenter(m_batch.get(), m_largeFont.get(), L"Direct3D 12 Optional Features (continued)", mid, y, ATG::Colors::LightGrey, m_scale);
1427+
1428+
auto device = m_deviceResources->GetD3DDevice12();
1429+
1430+
if (!device)
1431+
{
1432+
y += DrawStringCenter(m_batch.get(), m_smallFont.get(), L"Not supported", mid, y, ATG::Colors::Orange, m_scale);
1433+
}
1434+
else
1435+
{
1436+
bool found = false;
1437+
1438+
// Optional Direct3D 12 features for Windows 10 May 2019 Update
1439+
#if defined(NTDDI_WIN10_19H1) && (NTDDI_VERSION >= NTDDI_WIN10_19H1)
1440+
D3D12_FEATURE_DATA_D3D12_OPTIONS6 d3d12opts6 = {};
1441+
if (SUCCEEDED(device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS6, &d3d12opts6, sizeof(d3d12opts6))))
1442+
{
1443+
found = true;
1444+
1445+
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"AdditionalShadingRatesSupported", left, y, m_scale);
1446+
y += DrawStringRight(m_batch.get(), m_smallFont.get(), d3d12opts6.AdditionalShadingRatesSupported ? L"true" : L"false", right, y, m_scale);
1447+
1448+
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"PerPrimitiveShadingRateSupportedWithViewportIndexing", left, y, m_scale);
1449+
y += DrawStringRight(m_batch.get(), m_smallFont.get(), d3d12opts6.PerPrimitiveShadingRateSupportedWithViewportIndexing ? L"true" : L"false", right, y, m_scale);
1450+
1451+
const wchar_t* vrsTier = L"Unknown";
1452+
switch (d3d12opts6.VariableShadingRateTier)
1453+
{
1454+
case D3D12_VARIABLE_SHADING_RATE_TIER_NOT_SUPPORTED: vrsTier = L"Not Supported"; break;
1455+
case D3D12_VARIABLE_SHADING_RATE_TIER_1: vrsTier = L"Tier 1"; break;
1456+
case D3D12_VARIABLE_SHADING_RATE_TIER_2: vrsTier = L"Tier 2"; break;
1457+
}
1458+
1459+
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"VariableShadingRateTier", left, y, m_scale);
1460+
y += DrawStringRight(m_batch.get(), m_smallFont.get(), vrsTier, right, y, m_scale);
1461+
1462+
wchar_t buff[128] = {};
1463+
swprintf_s(buff, L"%u", d3d12opts6.ShadingRateImageTileSize);
1464+
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"ShadingRateImageTileSize", left, y, m_scale);
1465+
y += DrawStringRight(m_batch.get(), m_smallFont.get(), buff, right, y, m_scale);
1466+
1467+
DrawStringLeft(m_batch.get(), m_smallFont.get(), L"BackgroundProcessingSupported", left, y, m_scale);
1468+
y += DrawStringRight(m_batch.get(), m_smallFont.get(), d3d12opts6.BackgroundProcessingSupported ? L"true" : L"false", right, y, m_scale);
1469+
}
1470+
#endif
1471+
1472+
if (!found)
1473+
{
1474+
y += DrawStringCenter(m_batch.get(), m_smallFont.get(), L"Requires Windows 10 May 2019 Update or later", mid, y, ATG::Colors::Orange, m_scale);
1475+
}
13761476
}
13771477
}
13781478
break;

UWPSamples/System/SystemInfoUWP/SystemInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class Sample final : public DX::IDeviceNotify
9191
DIRECT3D12,
9292
DIRECT3D12_OPT1,
9393
DIRECT3D12_OPT2,
94+
DIRECT3D12_OPT3,
9495
MAX,
9596
};
9697

0 commit comments

Comments
 (0)