Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.71 KB | None | 0 0
  1. VkDebugReportCallbackEXT _debugReport;
  2.  
  3. static PFN_vkDebugReportCallbackEXT _callback;
  4.  
  5. public unsafe VkWindow() : base(640,480, GraphicsMode.Default, "Test", GameWindowFlags.Default)
  6.         {
  7. #if DEBUG
  8.             _enableValidationLayers = true;
  9. #else
  10.             _enableValidationLayers = false;
  11. #endif
  12.             _currentDevice = VK.NullHandle;
  13.  
  14.             requiredProperties = new List<string>()
  15.             {
  16.                 "VK_KHR_SWAPCHAIN_EXTENSION_NAME"
  17.             };
  18.  
  19.             validationLayers = new VulkanList<IntPtr>()
  20.             {
  21.                 new VulkanString("VK_LAYER_LUNARG_standard_validation")
  22.             };
  23.  
  24.             _callback = DebugCallback;
  25.         }
  26.  
  27.         unsafe uint DebugCallback(uint flags,
  28.             VkDebugReportObjectTypeEXT objectType,
  29.             ulong @object,
  30.             UIntPtr location,
  31.             int messageCode,
  32.             byte* pLayerPrefix,
  33.             byte* pMessage,
  34.             void* pUserData)
  35.         {
  36.             Console.WriteLine($"Validation Layer: {GetString(pMessage)}");
  37.  
  38.             return 0;
  39.         }
  40.  
  41.         unsafe void SetupDebug()
  42.         {
  43.             if (_enableValidationLayers)
  44.             {
  45.                 VkDebugReportCallbackCreateInfoEXT createInfo = new VkDebugReportCallbackCreateInfoEXT()
  46.                 {
  47.                     sType = VkStructureType.DebugReportCallbackCreateInfoEXT,
  48.                     pUserData = (void*)null,
  49.                     flags = VkDebugReportFlagsEXT.DebugEXT | VkDebugReportFlagsEXT.ErrorEXT | VkDebugReportFlagsEXT.WarningEXT,
  50.                     pfnCallback = Marshal.GetFunctionPointerForDelegate(_callback)
  51.                 };
  52.  
  53.                 Check(VK.CreateDebugReportCallbackEXT(_currentInstance, &createInfo, null, out _debugReport));
  54.             }
  55.         }
  56.  
  57.         unsafe bool CheckValidationLayerSupport()
  58.         {
  59.             uint valLayerCount = 0;
  60.  
  61.             Check(VK.EnumerateInstanceLayerProperties(&valLayerCount, IntPtr.Zero));
  62.  
  63.             if(valLayerCount == 0)
  64.             {
  65.  
  66.             }
  67.  
  68.             VkLayerProperties[] layers = new VkLayerProperties[valLayerCount];
  69.  
  70.             fixed (VkLayerProperties* props = layers) {
  71.                 Check(VK.EnumerateInstanceLayerProperties(&valLayerCount, props));
  72.             }
  73.  
  74.             foreach(var layer in validationLayers)
  75.             {
  76.                 bool layerFound = false;
  77.  
  78.                 string valLayerString = GetString(layer);
  79.                foreach(var foundLayer in layers)
  80.                 {
  81.  
  82.                     string layerString = GetString(foundLayer.layerName);
  83.  
  84.                     if (valLayerString == layerString)
  85.                     {
  86.                         layerFound = true;
  87.  
  88.                         break;
  89.                     }
  90.                 }
  91.  
  92.                 if (!layerFound)
  93.                     return false;
  94.             }
  95.  
  96.             return true;
  97.         }
  98.  
  99.          public unsafe void CreateInstance()
  100.         {
  101.             bool enableDebug = false;
  102.             if(_enableValidationLayers && CheckValidationLayerSupport())
  103.             {
  104.                 enableDebug = true;
  105.             }
  106.  
  107.             var appinfo = new VkApplicationInfo()
  108.             {
  109.                 sType = VkStructureType.ApplicationInfo,
  110.                 pApplicationName = (VulkanString)Title,
  111.                 applicationVersion = new VulkanVersion(1, 0, 0),
  112.                 pEngineName = (VulkanString)Title
  113.             };
  114.  
  115.             VulkanList<IntPtr> InstanceExtensions = new VulkanList<IntPtr>
  116.             {
  117.                 VulkanStrings.VK_KHR_SURFACE_EXTENSION_NAME
  118.             };
  119.  
  120.             var extensions = GetRequiredExtensions(enableDebug);
  121.  
  122.             foreach (IntPtr RequiredExtension in extensions)
  123.             {
  124.                 InstanceExtensions.Add(RequiredExtension);
  125.             }
  126.  
  127.             VkInstanceCreateInfo createInfo = new VkInstanceCreateInfo()
  128.             {
  129.                 sType = VkStructureType.InstanceCreateInfo,
  130.                 pApplicationInfo = &appinfo,
  131.                 enabledExtensionCount = InstanceExtensions.Count,
  132.                 ppEnabledExtensionNames = (byte**)InstanceExtensions.Data,
  133.            };
  134.  
  135.             if (enableDebug)
  136.             {
  137.                 createInfo.ppEnabledLayerNames = (byte**)validationLayers.Data;
  138.                 createInfo.enabledLayerCount =(uint)validationLayers.Count;
  139.             }
  140.             else
  141.             {
  142.                 createInfo.enabledLayerCount = 0;
  143.             }
  144.  
  145.             if (!Check(VK.CreateInstance(&createInfo, null, out _currentInstance)))
  146.             {
  147.  
  148.             }
  149.  
  150.             if (enableDebug)
  151.             {
  152.                 SetupDebug();
  153.             }
  154.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement