aboutsummaryrefslogtreecommitdiffstatsci
path: root/samples/create_device
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2022-11-01 21:13:46 +0100
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2022-11-01 21:13:46 +0100
commitb65719d05fc71b2b631334fbc06da58963769063 (patch)
tree07e35f6e033b2328b9ce511f1dd12e5e22275294 /samples/create_device
parentfb18b96960692f760419324e18bd4eee61e31d3e (diff)
PNext<T>, structs with stype passed by refv0.5.0
Diffstat (limited to 'samples/create_device')
-rw-r--r--samples/create_device/Program.cs41
1 files changed, 35 insertions, 6 deletions
diff --git a/samples/create_device/Program.cs b/samples/create_device/Program.cs
index 3daca81..b2c0f5a 100644
--- a/samples/create_device/Program.cs
+++ b/samples/create_device/Program.cs
@@ -3,34 +3,54 @@ using Vulkan;
using static Vulkan.Vk;
using static Vulkan.Utils;
using System.Linq;
+using System.Runtime.InteropServices;
namespace tests
-{
+{
class Program
{
static void Main(string[] args)
{
VkInstance inst;
- using (VkApplicationInfo ai = new VkApplicationInfo ()) {
- using (VkInstanceCreateInfo ci = new VkInstanceCreateInfo {pApplicationInfo = ai}){
- CheckResult (vkCreateInstance (ci, IntPtr.Zero, out inst));
+ using (VkApplicationInfo ai = new VkApplicationInfo (
+ new Vulkan.Version(1,2,0),
+ new Vulkan.Version(1,2,0),
+ new Vulkan.Version(1,3,0)
+ )) {
+
+ using (PinnedObjects po = new PinnedObjects()) {
+ IntPtr[] instanceExts = {Ext.I.VK_KHR_get_physical_device_properties2.Pin(po)};
+ IntPtr[] layers = {"VK_LAYER_KHRONOS_validation".Pin(po)};
+ using (VkInstanceCreateInfo ci = new VkInstanceCreateInfo {
+ pApplicationInfo = ai,
+ enabledExtensionCount = 1,
+ enabledLayerCount = 1,
+ ppEnabledExtensionNames = instanceExts.Pin(po),
+ ppEnabledLayerNames = layers.Pin(po)}){
+ CheckResult (vkCreateInstance (ci, IntPtr.Zero, out inst));
+ }
}
}
Vk.LoadInstanceFunctionPointers (inst);
+ CheckResult (vkEnumerateInstanceVersion(out uint apiVersion));
+
+ Console.WriteLine ($"Vulkan api version: {(Vulkan.Version)apiVersion})");
+
+
if (!TryGetPhysicalDevice (inst, VkPhysicalDeviceType.DiscreteGpu, out VkPhysicalDevice phy))
if (!TryGetPhysicalDevice (inst, VkPhysicalDeviceType.IntegratedGpu, out phy))
if (!TryGetPhysicalDevice (inst, VkPhysicalDeviceType.Cpu, out phy))
throw new Exception ("no suitable physical device found");
- foreach (VkPhysicalDeviceToolPropertiesEXT toolProp in GetToolProperties(phy)) {
+ foreach (VkPhysicalDeviceToolProperties 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[] qFamProps = new VkQueueFamilyProperties[queueFamilyCount];
vkGetPhysicalDeviceQueueFamilyProperties (phy, out queueFamilyCount, qFamProps.Pin());
@@ -42,6 +62,14 @@ namespace tests
uint qFamIndex = (uint)qFamProps.Select((qFam, index) => (qFam, index))
.First (qfp=>qfp.qFam.queueFlags.HasFlag (VkQueueFlags.Graphics)).index;
+
+ VkPhysicalDeviceProperties2 phyProps2 = VkPhysicalDeviceProperties2.New;
+ using (var vk11 = new PNext<VkPhysicalDeviceVulkan11Properties>()) {
+ phyProps2.pNext = vk11;
+ vkGetPhysicalDeviceProperties2(phy, ref phyProps2);
+ Console.WriteLine($"SupportedStages: {vk11.Val.subgroupSupportedStages}" );
+ }
+
VkDevice dev = default;
float[] priorities = {0};
using (VkDeviceQueueCreateInfo qInfo = new VkDeviceQueueCreateInfo (qFamIndex,1,priorities)) {
@@ -51,6 +79,7 @@ namespace tests
CheckResult (vkCreateDevice (phy, deviceCreateInfo, IntPtr.Zero, out dev));
}
}
+
vkGetDeviceQueue (dev, qFamIndex, 0, out VkQueue gQ);
vkDestroyDevice (dev, IntPtr.Zero);