Example #1
0
 public static extern Result CreateWindowSurface(Interop.Instance instance, WindowHandle window, Interop.AllocationCallbacks *pAllocator, out ulong surface);
Example #2
0
        public void ShouldCreate()
        {
            var mockLookup   = new MockLookup();
            var commandCache = new CommandCache(mockLookup);

            int callCount = 0;

            string[] layers     = new[] { "Layer" };
            string[] extensions = new[] { "Extension" };

            var applicationInfo = new ApplicationInfo
            {
                ApiVersion         = new Version(1, 1, 0),
                ApplicationName    = "App Name",
                ApplicationVersion = new Version(1, 2, 3),
                EngineName         = "Engine Name",
                EngineVersion      = new Version(1, 2, 3)
            };

            var handle = new UIntPtr(12345678);

            Result CreateInstance(Interop.InstanceCreateInfo *createInfo, Interop.AllocationCallbacks *allocator, Interop.Instance *instance)
            {
                callCount++;

                Assert.AreNotEqual(IntPtr.Zero, new IntPtr(createInfo));

                Assert.AreEqual((uint)extensions.Length, createInfo->EnabledExtensionCount);
                Assert.AreEqual(extensions[0], GetNullTerminatedString(createInfo->EnabledExtensionNames[0]));
                Assert.AreEqual((uint)layers.Length, createInfo->EnabledLayerCount);
                Assert.AreEqual(layers[0], GetNullTerminatedString(createInfo->EnabledLayerNames[0]));
                Assert.AreEqual(InstanceCreateFlags.None, createInfo->Flags);
                Assert.AreEqual(IntPtr.Zero, new IntPtr(createInfo->Next));
                Assert.AreEqual(StructureType.InstanceCreateInfo, createInfo->SType);

                Assert.AreEqual(applicationInfo.ApplicationName, GetNullTerminatedString(createInfo->ApplicationInfo->ApplicationName));
                Assert.AreEqual(applicationInfo.ApplicationVersion, createInfo->ApplicationInfo->ApplicationVersion);
                Assert.AreEqual(applicationInfo.EngineName, GetNullTerminatedString(createInfo->ApplicationInfo->EngineName));
                Assert.AreEqual(applicationInfo.EngineVersion, createInfo->ApplicationInfo->EngineVersion);
                Assert.AreEqual(applicationInfo.ApiVersion, createInfo->ApplicationInfo->ApiVersion);

                Assert.AreEqual(IntPtr.Zero, new IntPtr(allocator));

                Assert.AreNotEqual(IntPtr.Zero, new IntPtr(instance));

                *instance = new Interop.Instance(handle);

                return(Result.Success);
            }

            IntPtr GetProc(Interop.Instance instance, byte *name) => mockLookup.GetProcedureAddress(GetNullTerminatedString(name));

            mockLookup.AddProcedure("vkCreateInstance", new Interop.VkInstanceCreateDelegate(CreateInstance));
            mockLookup.AddProcedure("vkGetInstanceProcAddr", new Interop.VkInstanceGetProcedureAddressDelegate(GetProc));

            commandCache.Initialise();

            var result = Instance.Create(commandCache, layers, extensions, applicationInfo: applicationInfo);

            Assert.AreEqual(1, callCount);
            Assert.AreEqual(handle.ToUInt64(), result.RawHandle.ToUInt64());
        }