private void CreateDevice() { using (SharpDX.DXGI.Factory4 factory = new Factory4()) { _dev = new SharpDX.Direct3D12.Device(factory.Adapters[0], FeatureLevel.Level_11_0); } int[] levels_ = { (int)FeatureLevel.Level_12_1, (int)FeatureLevel.Level_12_0, (int)FeatureLevel.Level_11_1, (int)FeatureLevel.Level_11_0 }; GCHandle pinnedArray = GCHandle.Alloc(levels_, GCHandleType.Pinned); IntPtr pointer = pinnedArray.AddrOfPinnedObject(); SharpDX.Direct3D.FeatureLevel level = FeatureLevel.Level_11_0; SharpDX.Direct3D12.FeatureDataFeatureLevels levels = new FeatureDataFeatureLevels(); levels.FeatureLevelCount = levels_.Length; levels.FeatureLevelsRequestedPointer = pointer; if (_dev.CheckFeatureSupport(SharpDX.Direct3D12.Feature.FeatureLevels, ref levels)) { level = levels.MaxSupportedFeatureLevel; } pinnedArray.Free(); System.Console.WriteLine($" Feature Level: {(((int)level) >> 12) & 0xF}_{(((int)level) >> 8) & 0xF}"); }
public unsafe Result CheckMaxSupportedFeatureLevel(FeatureLevel[] featureLevels, out FeatureLevel maxSupportedFeatureLevel) { fixed(FeatureLevel *levelsPtr = &featureLevels[0]) { var featureData = new FeatureDataFeatureLevels { NumFeatureLevels = featureLevels.Length, PFeatureLevelsRequested = new IntPtr(levelsPtr) }; var result = CheckFeatureSupport(Feature.FeatureLevels, new IntPtr(&featureData), Interop.SizeOf <FeatureDataFeatureLevels>()); maxSupportedFeatureLevel = featureData.MaxSupportedFeatureLevel; return(result); } }
/// <summary> /// Query for the feature levels supported by the device /// </summary> /// <param name="requestedFeatureLevels">An array of feature levels to query support for. The highest feature level in this array that is supported by the device is returned.</param> /// <returns>The highest feature level of the provided feature levels that is supported by this device.</returns> public unsafe FeatureLevel CheckFeatureLevelsSupport(params FeatureLevel[] requestedFeatureLevels) { fixed(FeatureLevel *featureLevels = requestedFeatureLevels) { var query = new FeatureQueryFeatureLevels() { RequestedFeatureLevelCount = requestedFeatureLevels.Length, RequestedFeatureLevels = new(featureLevels), }; var data = new FeatureDataFeatureLevels(); CheckFeatureSupport(Feature.FeatureLevels, sizeof(FeatureQueryFeatureLevels), new(&query), sizeof(FeatureDataFeatureLevels), new(&data)).CheckError(); return(data.MaxSupportedFeatureLevel); } }
public FeatureLevel CheckMaxSupportedFeatureLevel(FeatureLevel[] featureLevels) { fixed(FeatureLevel *levelsPtr = featureLevels) { var featureData = new FeatureDataFeatureLevels { NumFeatureLevels = featureLevels.Length, FeatureLevelsRequested = new IntPtr(levelsPtr), MaxSupportedFeatureLevel = FeatureLevel.Level_11_0 }; if (CheckFeatureSupport(Feature.FeatureLevels, &featureData, sizeof(FeatureDataFeatureLevels)).Success) { return(featureData.MaxSupportedFeatureLevel); } return(FeatureLevel.Level_11_0); } }
public unsafe FeatureLevel CheckMaxSupportedFeatureLevel(FeatureLevel[] featureLevels) { fixed(FeatureLevel *levelsPtr = &featureLevels[0]) { var featureData = new FeatureDataFeatureLevels { NumFeatureLevels = featureLevels.Length, FeatureLevelsRequestedPointer = new IntPtr(levelsPtr), MaxSupportedFeatureLevel = FeatureLevel.Level_11_0 }; if (CheckFeatureSupport(Feature.FeatureLevels, new IntPtr(&featureData), Unsafe.SizeOf <FeatureDataFeatureLevels>()).Success) { return(featureData.MaxSupportedFeatureLevel); } return(FeatureLevel.Level_11_0); } }