Esempio n. 1
0
        protected override void PlatformDispose()
        {
            _scFB.Dispose();
            vkDestroySurfaceKHR(_instance, _surface, null);
            if (_debugCallbackFunc != null)
            {
                _debugCallbackFunc = null;
                FixedUtf8String debugExtFnName = "vkDestroyDebugReportCallbackEXT";
                IntPtr          destroyFuncPtr = vkGetInstanceProcAddr(_instance, debugExtFnName);
                vkDestroyDebugReportCallbackEXT_d destroyDel
                    = Marshal.GetDelegateForFunctionPointer <vkDestroyDebugReportCallbackEXT_d>(destroyFuncPtr);
                VkResult debugDestroyResult = destroyDel(_instance, _debugCallbackHandle, null);
                CheckResult(debugDestroyResult);
            }

            vkDestroyDescriptorPool(_device, _descriptorPool, null);
            vkDestroyCommandPool(_device, _graphicsCommandPool, null);
            vkDestroyFence(_device, _imageAvailableFence, null);

            _memoryManager.Dispose();

            VkResult result = vkDeviceWaitIdle(_device);

            CheckResult(result);
            vkDestroyDevice(_device, null);
            vkDestroyInstance(_instance, null);
        }
Esempio n. 2
0
        private void EnableDebugCallback(VkDebugReportFlagBitsEXT flags = VkDebugReportFlagBitsEXT.VK_DEBUG_REPORT_ERROR_BIT_EXT | VkDebugReportFlagBitsEXT.VK_DEBUG_REPORT_WARNING_BIT_EXT | VkDebugReportFlagBitsEXT.VK_DEBUG_REPORT_DEBUG_BIT_EXT)
        {
            Debug.WriteLine("Enabling Vulkan Debug callbacks.");

            this.debugCallbackFunc = this.DebugCallback;
            IntPtr debugFunctionPtr = Marshal.GetFunctionPointerForDelegate(this.debugCallbackFunc);

            VkDebugReportCallbackCreateInfoEXT debugCallbackCI = new VkDebugReportCallbackCreateInfoEXT();

            debugCallbackCI.sType       = VkStructureType.VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
            debugCallbackCI.flags       = flags;
            debugCallbackCI.pfnCallback = debugFunctionPtr;

            var createFnPtr = VulkanNative.vkGetInstanceProcAddr(this.vkInstance, "vkCreateDebugReportCallbackEXT".ToPointer());

            if (createFnPtr == IntPtr.Zero)
            {
                return;
            }

            vkCreateDebugReportCallbackEXT_d createDelegate = Marshal.GetDelegateForFunctionPointer <vkCreateDebugReportCallbackEXT_d>(createFnPtr);
            VkResult result = createDelegate(this.vkInstance, &debugCallbackCI, IntPtr.Zero, out this.debugCallbackHandle);

            Helpers.CheckErrors(result);
        }
        private unsafe VkResult CreateDebugReportCallback(
            VkDebugReportFlagsEXT flags
            )
        {
            _debugCallbackFunction = DebugCallback;
            var debugFunctionPtr  = Marshal.GetFunctionPointerForDelegate(_debugCallbackFunction);
            var debugCallbackInfo = new VkDebugReportCallbackCreateInfoEXT
            {
                sType       = VkStructureType.DebugReportCallbackCreateInfoEXT,
                flags       = flags,
                pfnCallback = debugFunctionPtr
            };

            var createFunctionPtr = VulkanNative.vkGetInstanceProcAddr(
                _handle,
                new FixedUtf8String("vkCreateDebugReportCallbackEXT")
                );

            if (createFunctionPtr == IntPtr.Zero)
            {
                return(VkResult.ErrorValidationFailedEXT);
            }

            var createDelegate = Marshal.GetDelegateForFunctionPointer <vkCreateDebugReportCallbackEXT_d>(
                createFunctionPtr
                );

            return(createDelegate(
                       _handle,
                       &debugCallbackInfo,
                       IntPtr.Zero,
                       out _debugCallbackHandle
                       ));
        }
        public void EnableDebugCallback(VkDebugReportFlagsEXT flags = VkDebugReportFlagsEXT.WarningEXT | VkDebugReportFlagsEXT.ErrorEXT)
        {
            _debugCallbackFunc = DebugCallback;
            IntPtr debugFunctionPtr = Marshal.GetFunctionPointerForDelegate(_debugCallbackFunc);
            VkDebugReportCallbackCreateInfoEXT debugCallbackCI = VkDebugReportCallbackCreateInfoEXT.New();

            debugCallbackCI.flags       = flags;
            debugCallbackCI.pfnCallback = debugFunctionPtr;
            FixedUtf8String debugExtFnName = "vkCreateDebugReportCallbackEXT";
            IntPtr          createFnPtr    = vkGetInstanceProcAddr(_instance, debugExtFnName);
            vkCreateDebugReportCallbackEXT_d createDelegate = Marshal.GetDelegateForFunctionPointer <vkCreateDebugReportCallbackEXT_d>(createFnPtr);

            createDelegate(_instance, &debugCallbackCI, IntPtr.Zero, out _debugCallbackHandle);
        }
Esempio n. 5
0
 protected override void PlatformDispose()
 {
     _scInfo.Dispose();
     if (_debugCallbackFunc != null)
     {
         _debugCallbackFunc = null;
         FixedUtf8String debugExtFnName = "vkDestroyDebugReportCallbackEXT";
         IntPtr          destroyFuncPtr = vkGetInstanceProcAddr(_instance, debugExtFnName);
         vkDestroyDebugReportCallbackEXT_d destroyDel
             = Marshal.GetDelegateForFunctionPointer <vkDestroyDebugReportCallbackEXT_d>(destroyFuncPtr);
         destroyDel.Invoke(_instance, _debugCallbackHandle, null);
     }
     vkDestroyInstance(_instance, null);
 }
Esempio n. 6
0
        //IntPtr ptrCallback;
        private void InitDebugCallback(VkInstance instance)
        {
            var delDebugCallback = new PFN_vkDebugReportCallbackEXT(DebugCallback);
            //var info = new VkDebugReportCallbackCreateInfoEXT { sType = VkStructureType.DebugReportCallbackCreateInfoEXT };
            VkDebugReportCallbackCreateInfoEXT info;

            info.sType = VkStructureType.DebugReportCallbackCreateInfoEXT;
            info.flags = VkDebugReportFlagBitsEXT.DebugEXT | VkDebugReportFlagBitsEXT.ErrorEXT
                         | VkDebugReportFlagBitsEXT.PerformanceWarningEXT | VkDebugReportFlagBitsEXT.WarningEXT
                         | VkDebugReportFlagBitsEXT.InformationEXT;
            var ptrCallback = Marshal.GetFunctionPointerForDelegate(delDebugCallback);

            info.pfnCallback = ptrCallback;

            VkDebugReportCallbackEXT callback;

            vkAPI.CreateDebugReportCallbackEXT(instance, &info, null, &callback).Check();
            // or: instance.CreateDebugReportCallbackEXT(&info, null, &callback).Check();
            this.debugReportcallback = callback;
        }
Esempio n. 7
0
        public void EnableDebugCallback(VkDebugReportFlagsEXT flags = VkDebugReportFlagsEXT.WarningEXT | VkDebugReportFlagsEXT.ErrorEXT)
        {
            Debug.WriteLine("Enabling Vulkan Debug callbacks.");
            _debugCallbackFunc = DebugCallback;
            IntPtr debugFunctionPtr = Marshal.GetFunctionPointerForDelegate(_debugCallbackFunc);
            VkDebugReportCallbackCreateInfoEXT debugCallbackCI = VkDebugReportCallbackCreateInfoEXT.New();

            debugCallbackCI.flags       = flags;
            debugCallbackCI.pfnCallback = debugFunctionPtr;
            IntPtr createFnPtr;

            using (FixedUtf8String debugExtFnName = "vkCreateDebugReportCallbackEXT")
            {
                createFnPtr = vkGetInstanceProcAddr(_instance, debugExtFnName);
            }
            vkCreateDebugReportCallbackEXT_d createDelegate = Marshal.GetDelegateForFunctionPointer <vkCreateDebugReportCallbackEXT_d>(createFnPtr);
            VkResult result = createDelegate(_instance, &debugCallbackCI, IntPtr.Zero, out _debugCallbackHandle);

            CheckResult(result);
        }
 private unsafe void DestroyDebugReportCallback()
 {
     _debugCallbackFunction = null;
     if (_debugCallbackHandle != VkDebugReportCallbackEXT.Null)
     {
         var destroyFunctionPtr = VulkanNative.vkGetInstanceProcAddr(
             _handle,
             new FixedUtf8String("vkDestroyDebugReportCallbackEXT")
             );
         var destroyDelegate = Marshal.GetDelegateForFunctionPointer <vkDestroyDebugReportCallbackEXT_d>(
             destroyFunctionPtr
             );
         destroyDelegate(
             _handle,
             _debugCallbackHandle,
             null
             );
         _debugCallbackHandle = VkDebugReportCallbackEXT.Null;
     }
 }