From 04d94de392b6e5ca4f82acc233df7b3f97abca36 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Bruyère Date: Fri, 5 Apr 2019 14:13:20 +0200 Subject: Activable pattern wip --- vke/src/Device.cs | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'vke/src/Device.cs') diff --git a/vke/src/Device.cs b/vke/src/Device.cs index 85b2f48..869f639 100644 --- a/vke/src/Device.cs +++ b/vke/src/Device.cs @@ -45,13 +45,13 @@ namespace VKE { unsafe public void Activate (VkPhysicalDeviceFeatures enabledFeatures, params string[] extensions) { - NativeList qInfos = new NativeList (); - NativeList priorities = null; + List qInfos = new List (); + List> prioritiesLists = new List> (); foreach (IGrouping qfams in queues.GroupBy (q => q.qFamIndex)) { int qTot = qfams.Count (); uint qIndex = 0; - priorities = new NativeList (); + Listpriorities = new List (); bool qCountReached = false;//true when queue count of that family is reached foreach (Queue q in qfams) { @@ -62,18 +62,18 @@ namespace VKE { qIndex = 0; qCountReached = true; } - } + } qInfos.Add (new VkDeviceQueueCreateInfo { sType = VkStructureType.DeviceQueueCreateInfo, queueCount = qCountReached ? phy.QueueFamilies[qfams.Key].queueCount : qIndex, queueFamilyIndex = qfams.Key, - pQueuePriorities = (float*)priorities.Data.ToPointer () + pQueuePriorities = priorities.Pin () }); - } - float tmp = priorities[0]; + prioritiesLists.Add (priorities);//add for unpined + } - NativeList deviceExtensions = new NativeList (); + List deviceExtensions = new List (); for (int i = 0; i < extensions.Length; i++) { deviceExtensions.Add (new FixedUtf8String(extensions[i])); } @@ -81,20 +81,22 @@ namespace VKE { VkPhysicalDeviceFeatures features = enabledFeatures; VkDeviceCreateInfo deviceCreateInfo = VkDeviceCreateInfo.New (); - deviceCreateInfo.queueCreateInfoCount = qInfos.Count; - deviceCreateInfo.pQueueCreateInfos = (VkDeviceQueueCreateInfo*)qInfos.Data.ToPointer(); + deviceCreateInfo.queueCreateInfoCount = (uint)qInfos.Count; + deviceCreateInfo.pQueueCreateInfos = qInfos.Pin(); deviceCreateInfo.pEnabledFeatures = &features; if (deviceExtensions.Count > 0) { - deviceCreateInfo.enabledExtensionCount = deviceExtensions.Count; - deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions.Data; + deviceCreateInfo.enabledExtensionCount = (uint)deviceExtensions.Count; + deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions.Pin(); } Utils.CheckResult (vkCreateDevice (phy.Handle, ref deviceCreateInfo, IntPtr.Zero, out dev)); - qInfos.Dispose (); - priorities.Dispose (); - deviceExtensions.Dispose (); + qInfos.Unpin (); + foreach (List fa in prioritiesLists) + fa.Unpin (); + + deviceExtensions.Unpin (); foreach (Queue q in queues) q.updateHandle (); -- cgit v1.3.1-4-g156e