internal DeviceFeatures(Device device) { mapFeaturesPerFormat = new FeaturesPerFormat[256]; // Check global features level = device.FeatureLevel; hasComputeShaders = device.CheckFeatureSupport(Feature.ComputeShaders); hasDoublePrecision = device.CheckFeatureSupport(Feature.ShaderDoubles); device.CheckThreadingSupport(out hasMultiThreadingConcurrentResources, out hasDriverCommandLists); // Check features for each DXGI.Format foreach (var format in Enum.GetValues(typeof(Format))) { var dxgiFormat = (Format)format; var maximumMSAA = MSAALevel.None; var computeShaderFormatSupport = ComputeShaderFormatSupport.None; var formatSupport = FormatSupport.None; if (!ObsoleteFormatToExcludes.Contains(dxgiFormat)) { maximumMSAA = GetMaximumMSAASampleCount(device, dxgiFormat); if (hasComputeShaders) { computeShaderFormatSupport = device.CheckComputeShaderFormatSupport(dxgiFormat); } formatSupport = device.CheckFormatSupport(dxgiFormat); } mapFeaturesPerFormat[(int)dxgiFormat] = new FeaturesPerFormat(dxgiFormat, maximumMSAA, computeShaderFormatSupport, formatSupport); } }