@@ -4,7 +4,9 @@ use crate::{
4
4
} ;
5
5
use std:: { mem, ptr, sync:: Arc , thread} ;
6
6
use winapi:: {
7
- shared:: { dxgi, dxgi1_2, minwindef:: DWORD , windef, winerror} ,
7
+ shared:: {
8
+ dxgi, dxgi1_2, dxgiformat:: DXGI_FORMAT_B8G8R8A8_UNORM , minwindef:: DWORD , windef, winerror,
9
+ } ,
8
10
um:: { d3d12 as d3d12_ty, d3d12sdklayers, winuser} ,
9
11
} ;
10
12
@@ -243,6 +245,27 @@ impl super::Adapter {
243
245
shader_model_support. HighestShaderModel >= d3d12_ty:: D3D_SHADER_MODEL_5_1 ,
244
246
) ;
245
247
248
+ let bgra8unorm_storage_supported = {
249
+ let mut bgra8unorm_info: d3d12_ty:: D3D12_FEATURE_DATA_FORMAT_SUPPORT =
250
+ unsafe { mem:: zeroed ( ) } ;
251
+ bgra8unorm_info. Format = DXGI_FORMAT_B8G8R8A8_UNORM ;
252
+ let hr = unsafe {
253
+ device. CheckFeatureSupport (
254
+ d3d12_ty:: D3D12_FEATURE_FORMAT_SUPPORT ,
255
+ & mut bgra8unorm_info as * mut _ as * mut _ ,
256
+ mem:: size_of :: < d3d12_ty:: D3D12_FEATURE_DATA_FORMAT_SUPPORT > ( ) as _ ,
257
+ )
258
+ } ;
259
+ hr == 0
260
+ && ( bgra8unorm_info. Support1
261
+ & d3d12_ty:: D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW
262
+ != 0 )
263
+ } ;
264
+ features. set (
265
+ wgt:: Features :: BGRA8UNORM_STORAGE ,
266
+ bgra8unorm_storage_supported,
267
+ ) ;
268
+
246
269
// TODO: Determine if IPresentationManager is supported
247
270
let presentation_timer = auxil:: dxgi:: time:: PresentationTimer :: new_dxgi ( ) ;
248
271
0 commit comments