using System;
using Silk.NET.Vulkan;

namespace Ryujinx.Ava.Ui.Vulkan
{
    internal class VulkanSemaphorePair : IDisposable
    {
        private readonly VulkanDevice _device;

        public unsafe VulkanSemaphorePair(VulkanDevice device)
        {
            _device = device;

            var semaphoreCreateInfo = new SemaphoreCreateInfo { SType = StructureType.SemaphoreCreateInfo };

            _device.Api.CreateSemaphore(_device.InternalHandle, semaphoreCreateInfo, null, out var semaphore).ThrowOnError();
            ImageAvailableSemaphore = semaphore;

            _device.Api.CreateSemaphore(_device.InternalHandle, semaphoreCreateInfo, null, out semaphore).ThrowOnError();
            RenderFinishedSemaphore = semaphore;
        }

        internal Semaphore ImageAvailableSemaphore { get; }
        internal Semaphore RenderFinishedSemaphore { get; }

        public unsafe void Dispose()
        {
            _device.Api.DestroySemaphore(_device.InternalHandle, ImageAvailableSemaphore, null);
            _device.Api.DestroySemaphore(_device.InternalHandle, RenderFinishedSemaphore, null);
        }
    }
}
