aboutsummaryrefslogtreecommitdiffstatsci
path: root/samples
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2021-12-07 18:41:24 +0100
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2021-12-07 18:41:24 +0100
commitc926e6d7de5c6861eafcbfb7fefc61ffdf95bfeb (patch)
tree1e291882dba10163458457035f619c945c1b1699 /samples
parente35fe3571a0576a7f60d67d59f4d797712fda393 (diff)
samples
Diffstat (limited to 'samples')
-rw-r--r--samples/common/Utils.cs34
-rw-r--r--samples/create_device/Program.cs28
2 files changed, 40 insertions, 22 deletions
diff --git a/samples/common/Utils.cs b/samples/common/Utils.cs
index 929f602..79843cc 100644
--- a/samples/common/Utils.cs
+++ b/samples/common/Utils.cs
@@ -5,6 +5,7 @@ using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using Vulkan;
+using static Vulkan.Vk;
namespace samples {
public static class Utils {
@@ -15,5 +16,38 @@ namespace samples {
if (result != VkResult.Success)
throw new InvalidOperationException ($"[{sourceFilePath}:{sourceLineNumber}->{caller}]{msg}: {result}");
}
+ public static bool TryGetPhysicalDevice (VkInstance inst, VkPhysicalDeviceType deviceType, out VkPhysicalDevice phy) {
+ CheckResult (vkEnumeratePhysicalDevices (inst, out uint phyCount, IntPtr.Zero));
+
+ VkPhysicalDevice[] phys = new VkPhysicalDevice[phyCount];
+
+ CheckResult (vkEnumeratePhysicalDevices (inst, out phyCount, phys.Pin()));
+
+ for (int i = 0; i < phys.Length; i++)
+ {
+ phy = phys[i];
+ vkGetPhysicalDeviceProperties (phy, out VkPhysicalDeviceProperties props);
+ if (props.deviceType == deviceType)
+ return true;
+ }
+ phy = default;
+ return false;
+ }
+ public static VkPhysicalDeviceToolPropertiesEXT[] GetToolProperties (VkPhysicalDevice phy) {
+ CheckResult (vkGetPhysicalDeviceToolPropertiesEXT (phy , out uint count, IntPtr.Zero));
+ int sizeStruct = Marshal.SizeOf<VkPhysicalDeviceToolPropertiesEXT> ();
+ IntPtr ptrTools = Marshal.AllocHGlobal (sizeStruct * (int)count);
+ CheckResult (vkGetPhysicalDeviceToolPropertiesEXT (phy , out count, ptrTools));
+
+ VkPhysicalDeviceToolPropertiesEXT[] result = new VkPhysicalDeviceToolPropertiesEXT[count];
+ IntPtr tmp = ptrTools;
+ for (int i = 0; i < count; i++) {
+ result[i] = Marshal.PtrToStructure<VkPhysicalDeviceToolPropertiesEXT> (tmp);
+ tmp += sizeStruct;
+ }
+
+ Marshal.FreeHGlobal (ptrTools);
+ return result;
+ }
}
}
diff --git a/samples/create_device/Program.cs b/samples/create_device/Program.cs
index d3ab3fb..ef7339d 100644
--- a/samples/create_device/Program.cs
+++ b/samples/create_device/Program.cs
@@ -1,35 +1,13 @@
using System;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Text;
using Vulkan;
using static Vulkan.Vk;
using static samples.Utils;
-using Version = Vulkan.Version;
using System.Linq;
namespace tests
{
class Program
{
-
- static bool TryGetPhysicalDevice (VkInstance inst, VkPhysicalDeviceType deviceType, out VkPhysicalDevice phy) {
- CheckResult (vkEnumeratePhysicalDevices (inst, out uint phyCount, IntPtr.Zero));
-
- VkPhysicalDevice[] phys = new VkPhysicalDevice[phyCount];
-
- CheckResult (vkEnumeratePhysicalDevices (inst, out phyCount, phys.Pin()));
-
- for (int i = 0; i < phys.Length; i++)
- {
- phy = phys[i];
- vkGetPhysicalDeviceProperties (phy, out VkPhysicalDeviceProperties props);
- if (props.deviceType == deviceType)
- return true;
- }
- phy = default;
- return false;
- }
static void Main(string[] args)
{
VkInstance inst;
@@ -47,6 +25,12 @@ namespace tests
if (!TryGetPhysicalDevice (inst, VkPhysicalDeviceType.Cpu, out phy))
throw new Exception ("no suitable physical device found");
+ foreach (VkPhysicalDeviceToolPropertiesEXT toolProp in GetToolProperties(phy)) {
+ Console.ForegroundColor = ConsoleColor.DarkYellow;
+ Console.WriteLine ($"Enabled Tool: {toolProp.name}({toolProp.version})");
+ Console.ResetColor ();
+ }
+
vkGetPhysicalDeviceQueueFamilyProperties (phy, out uint queueFamilyCount, IntPtr.Zero);
VkQueueFamilyProperties[] phys = new VkQueueFamilyProperties[queueFamilyCount];
vkGetPhysicalDeviceQueueFamilyProperties (phy, out queueFamilyCount, phys.Pin());