Fix errors in 88cef7e8: misc: chore: Use explicit types & fix object creation

This commit is contained in:
KeatonTheBot
2026-08-12 15:45:13 -05:00
parent 8ccf83d9a3
commit 5422aa35b9
15 changed files with 44 additions and 42 deletions
+2 -2
View File
@@ -560,7 +560,7 @@ namespace LibKenjinx
_surfacePtr = Interop.GetSurfacePtr(); _surfacePtr = Interop.GetSurfacePtr();
_window = Interop.GetWindowsHandle(); _window = Interop.GetWindowsHandle();
Vk? api = VulkanLoader?.GetApi() ?? Vk.GetApi(); Vk api = VulkanLoader?.GetApi() ?? Vk.GetApi();
if (api.TryGetInstanceExtension(new Instance(instance), out KhrAndroidSurface surfaceExtension)) if (api.TryGetInstanceExtension(new Instance(instance), out KhrAndroidSurface surfaceExtension))
{ {
AndroidSurfaceCreateInfoKHR createInfo = new() AndroidSurfaceCreateInfoKHR createInfo = new()
@@ -569,7 +569,7 @@ namespace LibKenjinx
Window = (nint*)_surfacePtr, Window = (nint*)_surfacePtr,
}; };
Result result = surfaceExtension.CreateAndroidSurface(new Instance(instance), in createInfo, null, out SurfaceKHR* surface); Result result = surfaceExtension.CreateAndroidSurface(new Instance(instance), in createInfo, null, out SurfaceKHR surface);
// If a rotation was applied before the surface was created → apply it now // If a rotation was applied before the surface was created → apply it now
if (_window != 0 && _pendingRotationDegrees != -1) if (_window != 0 && _pendingRotationDegrees != -1)
+8 -7
View File
@@ -1,12 +1,12 @@
// State class for the library // State class for the library
using Gommon; using Gommon;
using LibHac;
using LibHac.Account; using LibHac.Account;
using LibHac.Common; using LibHac.Common;
using LibHac.Common.Keys; using LibHac.Common.Keys;
using LibHac.Fs; using LibHac.Fs;
using LibHac.Fs.Fsa; using LibHac.Fs.Fsa;
using LibHac.FsSystem; using LibHac.FsSystem;
using LibHac.Ns;
using LibHac.Tools.Fs; using LibHac.Tools.Fs;
using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem;
using LibHac.Tools.FsSystem.NcaUtils; using LibHac.Tools.FsSystem.NcaUtils;
@@ -42,6 +42,7 @@ using System.Text;
using System.Text.Json; using System.Text.Json;
using ApplicationId = LibHac.Ncm.ApplicationId; using ApplicationId = LibHac.Ncm.ApplicationId;
using Path = System.IO.Path; using Path = System.IO.Path;
using Result = LibHac.Result;
using VSyncMode = Ryujinx.Common.Configuration.VSyncMode; using VSyncMode = Ryujinx.Common.Configuration.VSyncMode;
namespace LibKenjinx namespace LibKenjinx
@@ -109,7 +110,7 @@ namespace LibKenjinx
{ {
return new GameStats(); return new GameStats();
} }
Switch? context = SwitchDevice.EmulationContext; Switch context = SwitchDevice.EmulationContext;
return new GameStats return new GameStats
{ {
@@ -362,7 +363,7 @@ namespace LibKenjinx
if (string.IsNullOrWhiteSpace(titleName)) if (string.IsNullOrWhiteSpace(titleName))
{ {
foreach (ref readonly var controlTitle in controlData.Title) foreach (ref readonly ApplicationControlProperty.ApplicationTitle controlTitle in controlData.Title)
{ {
if (!controlTitle.NameString.IsEmpty()) if (!controlTitle.NameString.IsEmpty())
{ {
@@ -375,7 +376,7 @@ namespace LibKenjinx
if (string.IsNullOrWhiteSpace(publisher)) if (string.IsNullOrWhiteSpace(publisher))
{ {
foreach (ref readonly var controlTitle in controlData.Title) foreach (ref readonly ApplicationControlProperty.ApplicationTitle controlTitle in controlData.Title)
{ {
if (!controlTitle.PublisherString.IsEmpty()) if (!controlTitle.PublisherString.IsEmpty())
{ {
@@ -1203,14 +1204,14 @@ namespace LibKenjinx
int idx = (int)Language.AmericanEnglish; int idx = (int)Language.AmericanEnglish;
if (control.Title.Length > idx) if (control.Title.Length > idx)
{ {
string? s = control.Title[idx].NameString.ToString(); string s = control.Title[idx].NameString.ToString();
if (!string.IsNullOrWhiteSpace(s)) return s; if (!string.IsNullOrWhiteSpace(s)) return s;
} }
// Fallback: first non-empty localization // Fallback: first non-empty localization
foreach (ref readonly var t in control.Title) foreach (ref readonly ApplicationControlProperty.ApplicationTitle t in control.Title)
{ {
var s = t.NameString.ToString(); string s = t.NameString.ToString();
if (!string.IsNullOrWhiteSpace(s)) return s; if (!string.IsNullOrWhiteSpace(s)) return s;
} }
} }
+1 -1
View File
@@ -126,7 +126,7 @@ namespace Ryujinx.Graphics.Vulkan
Range = (uint)size, Range = (uint)size,
}; };
_gd.Api.CreateBufferView(_device, in bufferViewCreateInfo, null, out BufferView* bufferView).ThrowOnError(); _gd.Api.CreateBufferView(_device, in bufferViewCreateInfo, null, out BufferView bufferView).ThrowOnError();
return new Auto<DisposableBufferView>(new DisposableBufferView(_gd.Api, _device, bufferView), this, _waitable, _buffer); return new Auto<DisposableBufferView>(new DisposableBufferView(_gd.Api, _device, bufferView), this, _waitable, _buffer);
} }
+6 -6
View File
@@ -118,13 +118,13 @@ namespace Ryujinx.Graphics.Vulkan
PNext = &externalMemoryBuffer, PNext = &externalMemoryBuffer,
}; };
gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer* buffer).ThrowOnError(); gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer buffer).ThrowOnError();
(Auto<MemoryAllocation> allocation, ulong offset) = gd.HostMemoryAllocator.GetExistingAllocation(pointer, (ulong)size); (Auto<MemoryAllocation> allocation, ulong offset) = gd.HostMemoryAllocator.GetExistingAllocation(pointer, (ulong)size);
gd.Api.BindBufferMemory(_device, buffer, allocation.GetUnsafe().Memory, allocation.GetUnsafe().Offset + offset); gd.Api.BindBufferMemory(_device, buffer, allocation.GetUnsafe().Memory, allocation.GetUnsafe().Offset + offset);
BufferHolder holder = new BufferHolder(gd, _device, buffer, allocation, size, BufferAllocationType.HostMapped, BufferAllocationType.HostMapped, (int)offset); BufferHolder holder = new(gd, _device, buffer, allocation, size, BufferAllocationType.HostMapped, BufferAllocationType.HostMapped, (int)offset);
BufferCount++; BufferCount++;
@@ -158,7 +158,7 @@ namespace Ryujinx.Graphics.Vulkan
Flags = BufferCreateFlags.SparseBindingBit | BufferCreateFlags.SparseAliasedBit Flags = BufferCreateFlags.SparseBindingBit | BufferCreateFlags.SparseAliasedBit
}; };
gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer* buffer).ThrowOnError(); gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer buffer).ThrowOnError();
SparseMemoryBind[] memoryBinds = new SparseMemoryBind[storageBuffers.Length]; SparseMemoryBind[] memoryBinds = new SparseMemoryBind[storageBuffers.Length];
Auto<MemoryAllocation>[] storageAllocations = new Auto<MemoryAllocation>[storageBuffers.Length]; Auto<MemoryAllocation>[] storageAllocations = new Auto<MemoryAllocation>[storageBuffers.Length];
@@ -224,7 +224,7 @@ namespace Ryujinx.Graphics.Vulkan
gd.Api.QueueBindSparse(gd.Queue, 1, in bindSparseInfo, default).ThrowOnError(); gd.Api.QueueBindSparse(gd.Queue, 1, in bindSparseInfo, default).ThrowOnError();
} }
BufferHolder holder = new BufferHolder(gd, _device, buffer, (int)size, storageAllocations); BufferHolder holder = new(gd, _device, buffer, (int)size, storageAllocations);
BufferCount++; BufferCount++;
@@ -303,7 +303,7 @@ namespace Ryujinx.Graphics.Vulkan
SharingMode = SharingMode.Exclusive, SharingMode = SharingMode.Exclusive,
}; };
gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer* buffer).ThrowOnError(); gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer buffer).ThrowOnError();
gd.Api.GetBufferMemoryRequirements(_device, buffer, out MemoryRequirements requirements); gd.Api.GetBufferMemoryRequirements(_device, buffer, out MemoryRequirements requirements);
@@ -339,7 +339,7 @@ namespace Ryujinx.Graphics.Vulkan
SharingMode = SharingMode.Exclusive, SharingMode = SharingMode.Exclusive,
}; };
gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer* buffer).ThrowOnError(); gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer buffer).ThrowOnError();
gd.Api.GetBufferMemoryRequirements(_device, buffer, out MemoryRequirements requirements); gd.Api.GetBufferMemoryRequirements(_device, buffer, out MemoryRequirements requirements);
if (sparseCompatible) if (sparseCompatible)
@@ -414,7 +414,7 @@ namespace Ryujinx.Graphics.Vulkan
Layers = Layers, Layers = Layers,
}; };
api.CreateFramebuffer(_device, in framebufferCreateInfo, null, out Framebuffer* framebuffer).ThrowOnError(); api.CreateFramebuffer(_device, in framebufferCreateInfo, null, out Framebuffer framebuffer).ThrowOnError();
return new Auto<DisposableFramebuffer>(new DisposableFramebuffer(api, _device, framebuffer), null, _attachments[..AttachmentsCount]); return new Auto<DisposableFramebuffer>(new DisposableFramebuffer(api, _device, framebuffer), null, _attachments[..AttachmentsCount]);
} }
@@ -123,7 +123,7 @@ namespace Ryujinx.Graphics.Vulkan
PNext = &priorityInfo, PNext = &priorityInfo,
}; };
Result result = _api.AllocateMemory(_device, in memoryAllocateInfo, null, out DeviceMemory* deviceMemory); Result result = _api.AllocateMemory(_device, in memoryAllocateInfo, null, out DeviceMemory deviceMemory);
if (result < Result.Success) if (result < Result.Success)
{ {
@@ -131,7 +131,7 @@ namespace Ryujinx.Graphics.Vulkan
return false; return false;
} }
MemoryAllocation allocation = new MemoryAllocation(this, deviceMemory, pageAlignedPointer, 0, pageAlignedSize); MemoryAllocation allocation = new(this, deviceMemory, pageAlignedPointer, 0, pageAlignedSize);
Auto<MemoryAllocation> allocAuto = new(allocation); Auto<MemoryAllocation> allocAuto = new(allocation);
HostMemoryAllocation hostAlloc = new(allocAuto, pageAlignedPointer, pageAlignedSize); HostMemoryAllocation hostAlloc = new(allocAuto, pageAlignedPointer, pageAlignedSize);
@@ -220,7 +220,7 @@ namespace Ryujinx.Graphics.Vulkan
MemoryTypeIndex = (uint)MemoryTypeIndex, MemoryTypeIndex = (uint)MemoryTypeIndex,
}; };
_api.AllocateMemory(_device, in memoryAllocateInfo, null, out DeviceMemory* deviceMemory).ThrowOnError(); _api.AllocateMemory(_device, in memoryAllocateInfo, null, out DeviceMemory deviceMemory).ThrowOnError();
nint hostPointer = nint.Zero; nint hostPointer = nint.Zero;
@@ -231,7 +231,7 @@ namespace Ryujinx.Graphics.Vulkan
hostPointer = (nint)pointer; hostPointer = (nint)pointer;
} }
Block newBlock = new Block(deviceMemory, hostPointer, blockAlignedSize); Block newBlock = new(deviceMemory, hostPointer, blockAlignedSize);
InsertBlock(newBlock); InsertBlock(newBlock);
+4 -4
View File
@@ -233,8 +233,8 @@ namespace Ryujinx.Graphics.Vulkan
return; return;
} }
ClearValue clearValue = new ClearValue(null, new ClearDepthStencilValue(depthValue, (uint)stencilValue)); ClearValue clearValue = new(null, new ClearDepthStencilValue(depthValue, (uint)stencilValue));
int flags = depthMask ? ImageAspectFlags.DepthBit : 0; ImageAspectFlags flags = depthMask ? ImageAspectFlags.DepthBit : 0;
if (stencilMask) if (stencilMask)
{ {
@@ -257,7 +257,7 @@ namespace Ryujinx.Graphics.Vulkan
BeginRenderPass(); BeginRenderPass();
ClearAttachment attachment = new ClearAttachment(flags, 0, clearValue); ClearAttachment attachment = new(flags, 0, clearValue);
ClearRect clearRect = FramebufferParams.GetClearRect(ClearScissor, layer, layerCount); ClearRect clearRect = FramebufferParams.GetClearRect(ClearScissor, layer, layerCount);
Gd.Api.CmdClearAttachments(CommandBuffer, 1, &attachment, 1, &clearRect); Gd.Api.CmdClearAttachments(CommandBuffer, 1, &attachment, 1, &clearRect);
@@ -1722,7 +1722,7 @@ namespace Ryujinx.Graphics.Vulkan
{ {
FramebufferParams.InsertLoadOpBarriers(Gd, Cbs); FramebufferParams.InsertLoadOpBarriers(Gd, Cbs);
Rect2D renderArea = new Rect2D(null, new Extent2D(FramebufferParams.Width, FramebufferParams.Height)); Rect2D renderArea = new(null, new Extent2D(FramebufferParams.Width, FramebufferParams.Height));
ClearValue clearValue = new(); ClearValue clearValue = new();
RenderPassBeginInfo renderPassBeginInfo = new() RenderPassBeginInfo renderPassBeginInfo = new()
@@ -126,7 +126,7 @@ namespace Ryujinx.Graphics.Vulkan
DependencyCount = 1, DependencyCount = 1,
}; };
gd.Api.CreateRenderPass(device, in renderPassCreateInfo, null, out RenderPass* renderPass).ThrowOnError(); gd.Api.CreateRenderPass(device, in renderPassCreateInfo, null, out RenderPass renderPass).ThrowOnError();
return new DisposableRenderPass(gd.Api, device, renderPass); return new DisposableRenderPass(gd.Api, device, renderPass);
} }
@@ -125,7 +125,7 @@ namespace Ryujinx.Graphics.Vulkan
DependencyCount = 1, DependencyCount = 1,
}; };
gd.Api.CreateRenderPass(device, in renderPassCreateInfo, null, out RenderPass* renderPass).ThrowOnError(); gd.Api.CreateRenderPass(device, in renderPassCreateInfo, null, out RenderPass renderPass).ThrowOnError();
_renderPass = new Auto<DisposableRenderPass>(new DisposableRenderPass(gd.Api, device, renderPass)); _renderPass = new Auto<DisposableRenderPass>(new DisposableRenderPass(gd.Api, device, renderPass));
} }
+1 -1
View File
@@ -68,7 +68,7 @@ namespace Ryujinx.Graphics.Vulkan
samplerCreateInfo.BorderColor = BorderColor.FloatCustomExt; samplerCreateInfo.BorderColor = BorderColor.FloatCustomExt;
} }
gd.Api.CreateSampler(device, in samplerCreateInfo, null, out Sampler* sampler).ThrowOnError(); gd.Api.CreateSampler(device, in samplerCreateInfo, null, out Sampler sampler).ThrowOnError();
_sampler = new Auto<DisposableSampler>(new DisposableSampler(gd.Api, device, sampler)); _sampler = new Auto<DisposableSampler>(new DisposableSampler(gd.Api, device, sampler));
} }
+5 -5
View File
@@ -59,8 +59,8 @@ namespace Ryujinx.Graphics.Vulkan
dstAspectFlags = dstInfo.Format.ConvertAspectFlags(); dstAspectFlags = dstInfo.Format.ConvertAspectFlags();
} }
var srcOffsets = new ImageBlit.SrcOffsetsBuffer(); ImageBlit.SrcOffsetsBuffer srcOffsets = new();
var dstOffsets = new ImageBlit.DstOffsetsBuffer(); ImageBlit.DstOffsetsBuffer dstOffsets = new();
Filter filter = linearFilter && !dstInfo.Format.IsDepthOrStencil() ? Filter.Linear : Filter.Nearest; Filter filter = linearFilter && !dstInfo.Format.IsDepthOrStencil() ? Filter.Linear : Filter.Nearest;
@@ -453,7 +453,7 @@ namespace Ryujinx.Graphics.Vulkan
DependencyCount = 1, DependencyCount = 1,
}; };
gd.Api.CreateRenderPass2(device, in renderPassCreateInfo, null, out RenderPass* renderPass).ThrowOnError(); gd.Api.CreateRenderPass2(device, in renderPassCreateInfo, null, out RenderPass renderPass).ThrowOnError();
using Auto<DisposableRenderPass> rp = new(new DisposableRenderPass(gd.Api, device, renderPass)); using Auto<DisposableRenderPass> rp = new(new DisposableRenderPass(gd.Api, device, renderPass));
@@ -476,10 +476,10 @@ namespace Ryujinx.Graphics.Vulkan
Layers = (uint)src.Layers, Layers = (uint)src.Layers,
}; };
gd.Api.CreateFramebuffer(device, in framebufferCreateInfo, null, out Framebuffer* framebuffer).ThrowOnError(); gd.Api.CreateFramebuffer(device, in framebufferCreateInfo, null, out Framebuffer framebuffer).ThrowOnError();
using Auto<DisposableFramebuffer> fb = new(new DisposableFramebuffer(gd.Api, device, framebuffer), null, srcView, dstView); using Auto<DisposableFramebuffer> fb = new(new DisposableFramebuffer(gd.Api, device, framebuffer), null, srcView, dstView);
Rect2D renderArea = new Rect2D(null, new Extent2D((uint)src.Info.Width, (uint)src.Info.Height)); Rect2D renderArea = new(null, new Extent2D((uint)src.Info.Width, (uint)src.Info.Height));
ClearValue clearValue = new(); ClearValue clearValue = new();
RenderPassBeginInfo renderPassBeginInfo = new() RenderPassBeginInfo renderPassBeginInfo = new()
+1 -1
View File
@@ -120,7 +120,7 @@ namespace Ryujinx.Graphics.Vulkan
PNext = &imageViewUsage, PNext = &imageViewUsage,
}; };
gd.Api.CreateImageView(device, in imageCreateInfo, null, out ImageView* imageView).ThrowOnError(); gd.Api.CreateImageView(device, in imageCreateInfo, null, out ImageView imageView).ThrowOnError();
return new Auto<DisposableImageView>(new DisposableImageView(gd.Api, device, imageView), null, storage.GetImage()); return new Auto<DisposableImageView>(new DisposableImageView(gd.Api, device, imageView), null, storage.GetImage());
} }
@@ -1,6 +1,7 @@
using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL;
using Silk.NET.Core;
using Silk.NET.Vulkan; using Silk.NET.Vulkan;
using Silk.NET.Vulkan.Extensions.EXT; using Silk.NET.Vulkan.Extensions.EXT;
using Silk.NET.Vulkan.Extensions.KHR; using Silk.NET.Vulkan.Extensions.KHR;
@@ -249,7 +250,7 @@ namespace Ryujinx.Graphics.Vulkan
{ {
const QueueFlags RequiredFlags = QueueFlags.GraphicsBit | QueueFlags.ComputeBit; const QueueFlags RequiredFlags = QueueFlags.GraphicsBit | QueueFlags.ComputeBit;
KhrSurface khrSurface = new KhrSurface(api.Context); KhrSurface khrSurface = new(api.Context);
for (uint index = 0; index < physicalDevice.QueueFamilyProperties.Length; index++) for (uint index = 0; index < physicalDevice.QueueFamilyProperties.Length; index++)
{ {
@@ -566,7 +567,7 @@ namespace Ryujinx.Graphics.Vulkan
pExtendedFeatures = &featuresVertexInputDynamicState; pExtendedFeatures = &featuresVertexInputDynamicState;
} }
var featuresExtendedDynamicState = new PhysicalDeviceExtendedDynamicStateFeaturesEXT PhysicalDeviceExtendedDynamicStateFeaturesEXT featuresExtendedDynamicState = new()
{ {
SType = StructureType.PhysicalDeviceExtendedDynamicStateFeaturesExt, SType = StructureType.PhysicalDeviceExtendedDynamicStateFeaturesExt,
PNext = pExtendedFeatures, PNext = pExtendedFeatures,
@@ -704,7 +705,7 @@ namespace Ryujinx.Graphics.Vulkan
PEnabledFeatures = &features, PEnabledFeatures = &features,
}; };
api.CreateDevice(physicalDevice.PhysicalDevice, in deviceCreateInfo, null, out Device* device).ThrowOnError(); api.CreateDevice(physicalDevice.PhysicalDevice, in deviceCreateInfo, null, out Device device).ThrowOnError();
for (int i = 0; i < enabledExtensions.Length; i++) for (int i = 0; i < enabledExtensions.Length; i++)
{ {
+5 -5
View File
@@ -236,7 +236,7 @@ namespace Ryujinx.Graphics.Vulkan
CurrentTransform = capabilities.CurrentTransform; CurrentTransform = capabilities.CurrentTransform;
var usage = ImageUsageFlags.ColorAttachmentBit | ImageUsageFlags.TransferDstBit; ImageUsageFlags usage = ImageUsageFlags.ColorAttachmentBit | ImageUsageFlags.TransferDstBit;
if (!PlatformInfo.IsBionic) if (!PlatformInfo.IsBionic)
{ {
usage |= ImageUsageFlags.StorageBit; // Only desktop allows storage for swapchain usage |= ImageUsageFlags.StorageBit; // Only desktop allows storage for swapchain
@@ -328,7 +328,7 @@ namespace Ryujinx.Graphics.Vulkan
ComponentSwizzle.B, ComponentSwizzle.B,
ComponentSwizzle.A); ComponentSwizzle.A);
var aspectFlags = ImageAspectFlags.ColorBit; ImageAspectFlags aspectFlags = ImageAspectFlags.ColorBit;
ImageSubresourceRange subresourceRange = new(aspectFlags, 0, 1, 0, 1); ImageSubresourceRange subresourceRange = new(aspectFlags, 0, 1, 0, 1);
@@ -342,7 +342,7 @@ namespace Ryujinx.Graphics.Vulkan
SubresourceRange = subresourceRange, SubresourceRange = subresourceRange,
}; };
_gd.Api.CreateImageView(_device, in imageCreateInfo, null, out ImageView* imageView).ThrowOnError(); _gd.Api.CreateImageView(_device, in imageCreateInfo, null, out ImageView imageView).ThrowOnError();
return new TextureView(_gd, _device, new DisposableImageView(_gd.Api, _device, imageView), info, format); return new TextureView(_gd, _device, new DisposableImageView(_gd.Api, _device, imageView), info, format);
} }
@@ -561,7 +561,7 @@ namespace Ryujinx.Graphics.Vulkan
{ {
_gd.FlushAllCommands(); _gd.FlushAllCommands();
Semaphore[] emptySems = Array.Empty<Semaphore>(); Semaphore[] emptySems = Array.Empty<Semaphore>();
var waitStagesCO = new[] { PipelineStageFlags.ColorAttachmentOutputBit }; PipelineStageFlags[] waitStagesCO = new[] { PipelineStageFlags.ColorAttachmentOutputBit };
_gd.CommandBufferPool.Return( _gd.CommandBufferPool.Return(
cbs, cbs,
emptySems, emptySems,
@@ -643,7 +643,7 @@ namespace Ryujinx.Graphics.Vulkan
} }
Semaphore[] waitSems = new[] { _imageAvailableSemaphores[semaphoreIndex] }; Semaphore[] waitSems = new[] { _imageAvailableSemaphores[semaphoreIndex] };
var waitStages = new[] { PipelineStageFlags.ColorAttachmentOutputBit }; // Important on Android PipelineStageFlags[] waitStages = new[] { PipelineStageFlags.ColorAttachmentOutputBit }; // Important on Android
Semaphore[] signalSems = new[] { _renderFinishedSemaphores[semaphoreIndex] }; Semaphore[] signalSems = new[] { _renderFinishedSemaphores[semaphoreIndex] };
_gd.CommandBufferPool.Return(cbs, waitSems, waitStages, signalSems); _gd.CommandBufferPool.Return(cbs, waitSems, waitStages, signalSems);