Exemplo n.º 1
0
		public static void UseLayers(ref VkInstanceCreateInfo Inf) {
			if (!EnableDebug)
				return;
			Inf.enabledLayerCount = LayerCount;
			Inf.ppEnabledLayerNames = LayerNames;
		}
Exemplo n.º 2
0
		public virtual IntPtr CreateVulkanInstance(string AppShortName = "VulkanApp") {
			byte* APP_SHORT_NAME = AppShortName.AllocString();

			VkApplicationInfo AppInfo = new VkApplicationInfo();
			AppInfo.sType = VkStructureType.VK_STRUCTURE_TYPE_APPLICATION_INFO;
			AppInfo.pNext = null;
			AppInfo.pApplicationName = APP_SHORT_NAME;
			AppInfo.applicationVersion = 1;
			AppInfo.pEngineName = APP_SHORT_NAME;
			AppInfo.engineVersion = 1;
			AppInfo.apiVersion = Vulkan.VK_API_VERSION_ANY;

			VkInstanceCreateInfo Inf = new VkInstanceCreateInfo();
			Inf.sType = VkStructureType.VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
			Inf.flags = 0;
			Inf.pNext = null;
			Inf.pApplicationInfo = &AppInfo;

			Inf.enabledLayerCount = 0;
			Inf.ppEnabledLayerNames = null;
			VkDebug.UseLayers(ref Inf);

			Inf.enabledExtensionCount = (uint)EnabledExtensions.Count;
			Inf.ppEnabledExtensionNames = null;

			byte*[] EnabledExtensionsArray = new byte*[Inf.enabledExtensionCount];
			for (int i = 0; i < EnabledExtensionsArray.Length; i++)
				EnabledExtensionsArray[i] = EnabledExtensions[i].AllocString();

			fixed (byte** EnabledExtensionsArrayPtr = EnabledExtensionsArray) {
				if (Inf.enabledExtensionCount != 0)
					Inf.ppEnabledExtensionNames = EnabledExtensionsArrayPtr;

				IntPtr VkInst = IntPtr.Zero;
				Vulkan.vkCreateInstance(&Inf, IntPtr.Zero, &VkInst).Throw();
				VkInstance = VkInst;
			}

			for (int i = 0; i < EnabledExtensionsArray.Length; i++)
				Utils.FreeString(EnabledExtensionsArray[i]);
			Utils.FreeString(APP_SHORT_NAME);

			VkDebug.Setup(VkInstance);
			return VkInstance;
		}