コード例 #1
0
        public void EnableValidation(DebugUtilsCallback d, DebugUtilsMessageTypeFlag flags = DebugUtilsMessageTypeFlag.VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | DebugUtilsMessageTypeFlag.VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT | DebugUtilsMessageTypeFlag.VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT)
        {
            if (vkCreateDebugReportCallbackEXT == null)
            {
                throw new InvalidOperationException("vkCreateDebugReportCallbackEXT is not available, possibly you might be missing VK_EXT_debug_report extension. Try to enable it when creating the Instance.");
            }

            debugUtilsCreateInfo = new DebugUtilsMessengerCreateInfoEXT()
            {
                Flags           = 0,
                messageSeverity = DebugUtilsMessageSeverityFlag.VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | DebugUtilsMessageSeverityFlag.VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | DebugUtilsMessageSeverityFlag.VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT,
                messageType     = flags,
                sType           = StructureType.DEBUGUTILSMESSENGERCREATEINFOEXT,
                pfnUserCallback = Marshal.GetFunctionPointerForDelegate(d),
            };


            unsafe
            {
                fixed(DebugUtilsMessengerCreateInfoEXT *Debug = &debugUtilsCreateInfo)
                fixed(UInt64 * Callback = &aaaa)
                {
                    vkCreateDebugUtilsCallbackExt.Invoke(this.m, Debug, null, Callback);
                }
            }
        }
コード例 #2
0
        public unsafe DebugUtilsMessenger(Api api)
        {
            _api = api;

            // Note: Logging warnings/errors may still be useful even when "debug"
            // logging is disabled. Consider changing this.
            if (api.DebugLoggingEnabled == false)
            {
                return;
            }

            var createInfo = new DebugUtilsMessengerCreateInfoEXT();

            createInfo.SType           = StructureType.DebugUtilsMessengerCreateInfoExt;
            createInfo.MessageSeverity = DebugUtilsMessageSeverityFlagsEXT.DebugUtilsMessageSeverityVerboseBitExt |
                                         DebugUtilsMessageSeverityFlagsEXT.DebugUtilsMessageSeverityWarningBitExt |
                                         DebugUtilsMessageSeverityFlagsEXT.DebugUtilsMessageSeverityErrorBitExt |
                                         DebugUtilsMessageSeverityFlagsEXT.DebugUtilsMessageSeverityInfoBitExt;
            createInfo.MessageType = DebugUtilsMessageTypeFlagsEXT.DebugUtilsMessageTypeGeneralBitExt |
                                     DebugUtilsMessageTypeFlagsEXT.DebugUtilsMessageTypePerformanceBitExt |
                                     DebugUtilsMessageTypeFlagsEXT.DebugUtilsMessageTypeValidationBitExt;
            createInfo.PfnUserCallback = (DebugUtilsMessengerCallbackFunctionEXT)DebugCallback;

            fixed(DebugUtilsMessengerEXT *debugMessenger = &_debugMessenger)
            {
                if (_api.ExtDebugUtils.CreateDebugUtilsMessenger(api.Instance.VkInstance, &createInfo, null, debugMessenger) != Result.Success)
                {
                    throw new Exception($"{nameof(DebugUtilsMessenger)}: Failed to create debug messenger.");
                }
            }
        }
コード例 #3
0
 private unsafe void PopulateDebugMessengerCreateInfo(ref DebugUtilsMessengerCreateInfoEXT createInfo)
 {
     createInfo.SType           = StructureType.DebugUtilsMessengerCreateInfoExt;
     createInfo.MessageSeverity = DebugUtilsMessageSeverityFlagsEXT.DebugUtilsMessageSeverityVerboseBitExt
                                  | DebugUtilsMessageSeverityFlagsEXT.DebugUtilsMessageSeverityWarningBitExt
                                  | DebugUtilsMessageSeverityFlagsEXT.DebugUtilsMessageSeverityErrorBitExt;
     createInfo.MessageType = DebugUtilsMessageTypeFlagsEXT.DebugUtilsMessageTypeGeneralBitExt
                              | DebugUtilsMessageTypeFlagsEXT.DebugUtilsMessageTypePerformanceBitExt
                              | DebugUtilsMessageTypeFlagsEXT.DebugUtilsMessageTypeValidationBitExt;
     createInfo.PfnUserCallback = FuncPtr.Of <DebugUtilsMessengerCallbackFunctionEXT>(DebugCallback);
 }
コード例 #4
0
        private unsafe void SetupDebugMessenger()
        {
            if (!EnableValidationLayers || !_vk.TryGetInstanceExtension(_instance, out _debugUtils))
            {
                return;
            }

            var createInfo = new DebugUtilsMessengerCreateInfoEXT();

            PopulateDebugMessengerCreateInfo(ref createInfo);

            fixed(DebugUtilsMessengerEXT *debugMessenger = &_debugMessenger)
            {
                Result result = _debugUtils.CreateDebugUtilsMessenger(_instance, &createInfo, null, debugMessenger);

                if (result != Result.Success)
                {
                    throw new SystemException("Failed to setup Debug Messenger");
                }
            }
        }
コード例 #5
0
 public abstract Result CreateDebugUtilsMessenger([Count(Count = 0)] Instance instance, [Count(Count = 0), Flow(FlowDirection.In)] ref DebugUtilsMessengerCreateInfoEXT pCreateInfo, [Count(Count = 0), Flow(FlowDirection.In)] ref AllocationCallbacks pAllocator, [Count(Count = 0), Flow(FlowDirection.Out)] out DebugUtilsMessengerEXT pMessenger);
コード例 #6
0
        private unsafe void CreateInstance()
        {
            _vk = Vk.GetApi();

            if (EnableValidationLayers && !CheckValidationLayerSupport())
            {
                throw new NotSupportedException("Validation layers requested but not available!");
            }

            var appInfo = new ApplicationInfo
            {
                SType              = StructureType.ApplicationInfo,
                PApplicationName   = (byte *)Marshal.StringToHGlobalAnsi("Hello Triangle"),
                ApplicationVersion = Vk.MakeVersion(1, 0),
                PEngineName        = (byte *)Marshal.StringToHGlobalAnsi("No Engine"),
                EngineVersion      = Vk.MakeVersion(1, 0),
                ApiVersion         = Vk.Version11
            };

            var    extensions    = (byte **)_window.VkSurface.GetRequiredExtensions(out var extCount);
            byte **newExtensions = stackalloc byte *[(int)(extCount + _instanceExtensions.Length)];

            for (int i = 0; i < extCount; i++)
            {
                newExtensions[i] = extensions[i];
            }

            for (var i = 0; i < _instanceExtensions.Length; i++)
            {
                newExtensions[extCount + i] = (byte *)SilkMarshal.MarshalStringToPtr(_instanceExtensions[i]);
            }

            extCount += (uint)_instanceExtensions.Length;

            var createInfo = new InstanceCreateInfo
            {
                SType                   = StructureType.InstanceCreateInfo,
                PApplicationInfo        = &appInfo,
                EnabledExtensionCount   = extCount,
                PpEnabledExtensionNames = newExtensions
            };

            // debug info is here to make sure it doesnt get destroyed before vk.CreateInstance
            var debugCreateInfo = new DebugUtilsMessengerCreateInfoEXT();

            if (EnableValidationLayers)
            {
                createInfo.EnabledLayerCount   = (uint)_validationLayers.Length;
                createInfo.PpEnabledLayerNames = (byte **)SilkMarshal.MarshalStringArrayToPtr(_validationLayers);
                createInfo.PNext = &debugCreateInfo;
            }
            else
            {
                createInfo.EnabledLayerCount = 0;
                createInfo.PNext             = null;
            }

            fixed(Instance *instance = &_instance)
            {
                Result result = _vk.CreateInstance(&createInfo, null, instance);

                if (result != Result.Success)
                {
                    throw new Exception("Failed to create instance!");
                }
            }

            _vk.CurrentInstance = _instance;

            if (!_vk.TryGetInstanceExtension(_instance, out _vkSurface))
            {
                throw new NotSupportedException("KHR_surface extensions not found");
            }
        }