Browse Source

Implemented VulkanDevice.Dispose. (#15936)

pull/15952/head
jp2masa 2 years ago
committed by GitHub
parent
commit
5d2ba6d01b
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs
  2. 14
      src/Avalonia.Vulkan/Interop/VulkanDevice.cs
  3. 3
      src/Avalonia.Vulkan/UnmanagedInterop/VulkanInstanceApi.cs

2
src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs

@ -87,7 +87,7 @@ internal unsafe partial class VulkanDevice
api.GetDeviceQueue(createdDevice, dev.QueueFamilyIndex, 0, out var createdQueue);
return new VulkanDevice(api.Instance, createdDevice, dev.PhysicalDevice, createdQueue,
return new VulkanDevice(api, createdDevice, dev.PhysicalDevice, createdQueue,
dev.QueueFamilyIndex, enabledExtensions);
}

14
src/Avalonia.Vulkan/Interop/VulkanDevice.cs

@ -9,7 +9,8 @@ namespace Avalonia.Vulkan.Interop;
internal partial class VulkanDevice : IVulkanDevice
{
private readonly VkDevice _handle;
private readonly VulkanInstanceApi _instanceApi;
private VkDevice _handle;
private readonly VkPhysicalDevice _physicalDeviceHandle;
private readonly VkQueue _mainQueue;
private readonly uint _graphicsQueueIndex;
@ -17,14 +18,15 @@ internal partial class VulkanDevice : IVulkanDevice
private Thread? _lockedByThread;
private int _lockCount;
private VulkanDevice(IVulkanInstance instance, VkDevice handle, VkPhysicalDevice physicalDeviceHandle,
private VulkanDevice(VulkanInstanceApi instanceApi, VkDevice handle, VkPhysicalDevice physicalDeviceHandle,
VkQueue mainQueue, uint graphicsQueueIndex, string[] enabledExtensions)
{
_instanceApi = instanceApi;
_handle = handle;
_physicalDeviceHandle = physicalDeviceHandle;
_mainQueue = mainQueue;
_graphicsQueueIndex = graphicsQueueIndex;
Instance = instance;
Instance = _instanceApi.Instance;
EnabledExtensions = enabledExtensions;
}
@ -59,7 +61,11 @@ internal partial class VulkanDevice : IVulkanDevice
public IVulkanInstance Instance { get; }
public void Dispose()
{
// TODO
if (_handle.Handle != IntPtr.Zero)
{
_instanceApi.DestroyDevice(_handle, IntPtr.Zero);
_handle = default;
}
}
public object? TryGetFeature(Type featureType) => null;

3
src/Avalonia.Vulkan/UnmanagedInterop/VulkanInstanceApi.cs

@ -46,6 +46,9 @@ internal unsafe partial class VulkanInstanceApi
public partial VkResult CreateDevice(VkPhysicalDevice physicalDevice, ref VkDeviceCreateInfo pCreateInfo,
IntPtr pAllocator, out VkDevice pDevice);
[GetProcAddress("vkDestroyDevice")]
public partial VkResult DestroyDevice(VkDevice device, IntPtr pAllocator);
[GetProcAddress("vkGetDeviceQueue")]
public partial void GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex,
out VkQueue pQueue);

Loading…
Cancel
Save