public static GRVkExtensions Create(GRVkGetProcedureAddressDelegate getProc, IntPtr vkInstance, IntPtr vkPhysicalDevice, string[] instanceExtensions, string[] deviceExtensions) { var extensions = new GRVkExtensions(); extensions.Initialize(getProc, vkInstance, vkPhysicalDevice, instanceExtensions, deviceExtensions); return(extensions); }
public void Initialize(GRVkGetProcedureAddressDelegate getProc, IntPtr vkInstance, IntPtr vkPhysicalDevice, string[] instanceExtensions, string[] deviceExtensions) { var proxy = DelegateProxies.Create(getProc, DelegateProxies.GRVkGetProcDelegateProxy, out var gch, out var ctx); try { var ie = instanceExtensions; var de = deviceExtensions; SkiaApi.gr_vk_extensions_init(Handle, proxy, (void *)ctx, vkInstance, vkPhysicalDevice, (uint)(ie?.Length ?? 0), ie, (uint)(de?.Length ?? 0), de); } finally { gch.Free(); } }
public static void Initialize(this GRVkExtensions extensions, GRSharpVkGetProcedureAddressDelegate getProc, Instance instance, PhysicalDevice physicalDevice, string[] instanceExtensions, string[] deviceExtensions) { GRVkGetProcedureAddressDelegate proc = (name, inst, _) => { if (inst != IntPtr.Zero && instance?.RawHandle.ToUInt64() != (ulong)inst.ToInt64()) { throw new InvalidOperationException("Incorrect object for VkInstance."); } return(getProc?.Invoke(name, inst != IntPtr.Zero ? instance : null, null) ?? IntPtr.Zero); }; extensions.Initialize(proc, (IntPtr)instance?.RawHandle.ToUInt64(), (IntPtr)physicalDevice?.RawHandle.ToUInt64(), instanceExtensions, deviceExtensions); }
private void Initialize() { GRVkGetProcedureAddressDelegate getProc = GetVulkanProcAddress; _grVkBackend = new GRVkBackendContext() { VkInstance = _surface.Device.Handle, VkPhysicalDevice = _vulkanPlatformInterface.PhysicalDevice.Handle, VkDevice = _surface.Device.Handle, VkQueue = _surface.Device.Queue.Handle, GraphicsQueueIndex = _vulkanPlatformInterface.PhysicalDevice.QueueFamilyIndex, GetProcedureAddress = getProc }; GrContext = GRContext.CreateVulkan(_grVkBackend); var gpu = AvaloniaLocator.Current.GetService <VulkanSkiaGpu>(); if (gpu.MaxResourceBytes.HasValue) { GrContext.SetResourceCacheLimit(gpu.MaxResourceBytes.Value); } }
public void Initialize(GRVkGetProcedureAddressDelegate getProc, IntPtr vkInstance, IntPtr vkPhysicalDevice) => Initialize(getProc, vkInstance, vkPhysicalDevice, null, null);