@@ -112,9 +112,38 @@ std::tuple<Microsoft::WRL::ComPtr<IDMLDevice>, Microsoft::WRL::ComPtr<ID3D12Comm
112112 ComPtr<IDMLDevice> dmlDevice;
113113 THROW_IF_FAILED (DMLCreateDevice (d3d12Device.Get (), DML_CREATE_DEVICE_FLAG_NONE, IID_PPV_ARGS (&dmlDevice)));
114114
115+ D3D_FEATURE_LEVEL featureLevelsRequested[] =
116+ {
117+ D3D_FEATURE_LEVEL_1_0_GENERIC,
118+ D3D_FEATURE_LEVEL_1_0_CORE,
119+ D3D_FEATURE_LEVEL_11_0,
120+ D3D_FEATURE_LEVEL_11_1,
121+ D3D_FEATURE_LEVEL_12_0,
122+ D3D_FEATURE_LEVEL_12_1
123+ };
124+
125+ D3D12_FEATURE_DATA_FEATURE_LEVELS featureLevelSupport =
126+ {
127+ .NumFeatureLevels = _countof (featureLevelsRequested),
128+ .pFeatureLevelsRequested = featureLevelsRequested
129+ };
130+
131+ THROW_IF_FAILED (d3d12Device->CheckFeatureSupport (
132+ D3D12_FEATURE_FEATURE_LEVELS,
133+ &featureLevelSupport,
134+ sizeof (featureLevelSupport)
135+ ));
136+
137+ // The feature level returned by SelectAdapter is the MINIMUM feature level required for the adapter.
138+ // However, some adapters may support higher feature levels. For compatibility reasons, this sample
139+ // uses a direct queue for graphics-capable adapters that support feature levels > CORE.
140+ auto queueType = (featureLevelSupport.MaxSupportedFeatureLevel <= D3D_FEATURE_LEVEL_1_0_CORE) ?
141+ D3D12_COMMAND_LIST_TYPE_COMPUTE :
142+ D3D12_COMMAND_LIST_TYPE_DIRECT;
143+
115144 D3D12_COMMAND_QUEUE_DESC queueDesc =
116145 {
117- .Type = D3D12_COMMAND_LIST_TYPE_COMPUTE ,
146+ .Type = queueType ,
118147 .Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL,
119148 .Flags = D3D12_COMMAND_QUEUE_FLAG_NONE,
120149 .NodeMask = 0
0 commit comments