forked from amkovkov/GranuSightSoftware2
fix: GSS2.Test Vulakn render image buffer rotation
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
using Avalonia;
|
||||
@@ -52,6 +53,7 @@ class VkImage
|
||||
}
|
||||
class VkRenderer
|
||||
{
|
||||
[DllImport("libc")] private static extern int dup(int fd);
|
||||
readonly VulkanContext context = new VulkanContext("GSS2.Test", "CameraView");
|
||||
|
||||
public IPlatformHandle ExportSemaphore(bool renderFinished)
|
||||
@@ -62,9 +64,16 @@ class VkRenderer
|
||||
|
||||
unsafe public VkImage ImportOrUpdate(int fd, int width, int height, int stride)
|
||||
{
|
||||
var fdDup = dup(fd);
|
||||
try
|
||||
{
|
||||
var (importImage, importMemoryReqirements, importMemory) = ImportImage(fd, width, height, stride);
|
||||
FenceCreateInfo fenceInfo = new FenceCreateInfo
|
||||
{
|
||||
SType = StructureType.FenceCreateInfo
|
||||
};
|
||||
context.Api.CreateFence(context.Device, &fenceInfo, null, out var fence).ThrowOnError();
|
||||
|
||||
var (importImage, importMemoryReqirements, importMemory) = ImportImage(fdDup, width, height, stride);
|
||||
var (exportImage, exportMemoryReqirements, exportMemory) = CreateExportImage(width, height);
|
||||
|
||||
var commandPoolCreateInfo = new CommandPoolCreateInfo
|
||||
@@ -125,13 +134,13 @@ class VkRenderer
|
||||
Console.WriteLine("KhrExternalMemoryFd import success");
|
||||
else
|
||||
throw new Exception("KhrExternalMemoryFd import error");
|
||||
var MemoryGetFdInfoKHR = new MemoryGetFdInfoKHR
|
||||
var memoryGetFdInfoKHR = new MemoryGetFdInfoKHR
|
||||
{
|
||||
SType = StructureType.MemoryGetFDInfoKhr,
|
||||
Memory = exportMemory,
|
||||
HandleType = ExternalMemoryHandleTypeFlags.OpaqueFDBit
|
||||
};
|
||||
khrExternalMemoryFd.GetMemoryF(context.Device, &MemoryGetFdInfoKHR, out var vulkanFd).ThrowOnError();
|
||||
khrExternalMemoryFd.GetMemoryF(context.Device, &memoryGetFdInfoKHR, out var vulkanFd).ThrowOnError();
|
||||
Console.WriteLine($"Image export success {vulkanFd}");
|
||||
|
||||
var renderFinished = context.RenderFinishedSemaphore;
|
||||
@@ -144,7 +153,9 @@ class VkRenderer
|
||||
SignalSemaphoreCount = 1
|
||||
};
|
||||
|
||||
context.Api.QueueSubmit(context.Queue, 1, &submitInfo, default).ThrowOnError();
|
||||
context.Api.QueueSubmit(context.Queue, 1, &submitInfo, fence).ThrowOnError();
|
||||
context.Api.WaitForFences(context.Device, 1, &fence, true, ulong.MaxValue).ThrowOnError();
|
||||
context.Api.ResetFences(context.Device, 1, &fence).ThrowOnError();
|
||||
|
||||
return new VkImage()
|
||||
{
|
||||
@@ -194,7 +205,7 @@ class VkRenderer
|
||||
Tiling = ImageTiling.DrmFormatModifierExt,
|
||||
Usage = ImageUsageFlags.TransferSrcBit | ImageUsageFlags.SampledBit,
|
||||
SharingMode = SharingMode.Exclusive,
|
||||
InitialLayout = ImageLayout.Undefined,
|
||||
InitialLayout = ImageLayout.Undefined
|
||||
};
|
||||
context.Api.CreateImage(context.Device, &imageCreateInfo, null, out var image).ThrowOnError();
|
||||
context.Api.GetImageMemoryRequirements(context.Device, image, out var memoryReqirements);
|
||||
|
||||
Reference in New Issue
Block a user