Example #1
0
        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}");
        }
Example #2
0
        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);
            }
        }
Example #3
0
    /// <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);
        }
    }
Example #5
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);
            }
        }