aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs91
1 files changed, 47 insertions, 44 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
index b09a0667..087d90fb 100644
--- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
+++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
@@ -2,8 +2,11 @@
using Ryujinx.Graphics.Shader;
using Silk.NET.Vulkan;
using System;
-using System.Numerics;
using System.Runtime.CompilerServices;
+using Buffer = Silk.NET.Vulkan.Buffer;
+using CompareOp = Ryujinx.Graphics.GAL.CompareOp;
+using Format = Ryujinx.Graphics.GAL.Format;
+using SamplerCreateInfo = Ryujinx.Graphics.GAL.SamplerCreateInfo;
namespace Ryujinx.Graphics.Vulkan
{
@@ -14,25 +17,25 @@ namespace Ryujinx.Graphics.Vulkan
private ShaderCollection _program;
- private Auto<DisposableBuffer>[] _uniformBufferRefs;
- private Auto<DisposableBuffer>[] _storageBufferRefs;
- private Auto<DisposableImageView>[] _textureRefs;
- private Auto<DisposableSampler>[] _samplerRefs;
- private Auto<DisposableImageView>[] _imageRefs;
- private TextureBuffer[] _bufferTextureRefs;
- private TextureBuffer[] _bufferImageRefs;
- private GAL.Format[] _bufferImageFormats;
-
- private DescriptorBufferInfo[] _uniformBuffers;
- private DescriptorBufferInfo[] _storageBuffers;
- private DescriptorImageInfo[] _textures;
- private DescriptorImageInfo[] _images;
- private BufferView[] _bufferTextures;
- private BufferView[] _bufferImages;
-
- private bool[] _uniformSet;
- private bool[] _storageSet;
- private Silk.NET.Vulkan.Buffer _cachedSupportBuffer;
+ private readonly Auto<DisposableBuffer>[] _uniformBufferRefs;
+ private readonly Auto<DisposableBuffer>[] _storageBufferRefs;
+ private readonly Auto<DisposableImageView>[] _textureRefs;
+ private readonly Auto<DisposableSampler>[] _samplerRefs;
+ private readonly Auto<DisposableImageView>[] _imageRefs;
+ private readonly TextureBuffer[] _bufferTextureRefs;
+ private readonly TextureBuffer[] _bufferImageRefs;
+ private readonly Format[] _bufferImageFormats;
+
+ private readonly DescriptorBufferInfo[] _uniformBuffers;
+ private readonly DescriptorBufferInfo[] _storageBuffers;
+ private readonly DescriptorImageInfo[] _textures;
+ private readonly DescriptorImageInfo[] _images;
+ private readonly BufferView[] _bufferTextures;
+ private readonly BufferView[] _bufferImages;
+
+ private readonly bool[] _uniformSet;
+ private readonly bool[] _storageSet;
+ private Buffer _cachedSupportBuffer;
[Flags]
private enum DirtyFlags
@@ -42,7 +45,7 @@ namespace Ryujinx.Graphics.Vulkan
Storage = 1 << 1,
Texture = 1 << 2,
Image = 1 << 3,
- All = Uniform | Storage | Texture | Image
+ All = Uniform | Storage | Texture | Image,
}
private DirtyFlags _dirty;
@@ -66,7 +69,7 @@ namespace Ryujinx.Graphics.Vulkan
_imageRefs = new Auto<DisposableImageView>[Constants.MaxImageBindings * 2];
_bufferTextureRefs = new TextureBuffer[Constants.MaxTextureBindings * 2];
_bufferImageRefs = new TextureBuffer[Constants.MaxImageBindings * 2];
- _bufferImageFormats = new GAL.Format[Constants.MaxImageBindings * 2];
+ _bufferImageFormats = new Format[Constants.MaxImageBindings * 2];
_uniformBuffers = new DescriptorBufferInfo[Constants.MaxUniformBufferBindings];
_storageBuffers = new DescriptorBufferInfo[Constants.MaxStorageBufferBindings];
@@ -75,9 +78,9 @@ namespace Ryujinx.Graphics.Vulkan
_bufferTextures = new BufferView[Constants.MaxTexturesPerStage];
_bufferImages = new BufferView[Constants.MaxImagesPerStage];
- var initialImageInfo = new DescriptorImageInfo()
+ var initialImageInfo = new DescriptorImageInfo
{
- ImageLayout = ImageLayout.General
+ ImageLayout = ImageLayout.General,
};
_textures.AsSpan().Fill(initialImageInfo);
@@ -106,7 +109,7 @@ namespace Ryujinx.Graphics.Vulkan
1,
1,
4,
- GAL.Format.R8G8B8A8Unorm,
+ Format.R8G8B8A8Unorm,
DepthStencilMode.Depth,
Target.Texture2D,
SwizzleComponent.Red,
@@ -114,7 +117,7 @@ namespace Ryujinx.Graphics.Vulkan
SwizzleComponent.Blue,
SwizzleComponent.Alpha), 1f);
- _dummySampler = (SamplerHolder)gd.CreateSampler(new GAL.SamplerCreateInfo(
+ _dummySampler = (SamplerHolder)gd.CreateSampler(new SamplerCreateInfo(
MinFilter.Nearest,
MagFilter.Nearest,
false,
@@ -122,7 +125,7 @@ namespace Ryujinx.Graphics.Vulkan
AddressMode.Repeat,
AddressMode.Repeat,
CompareMode.None,
- GAL.CompareOp.Always,
+ CompareOp.Always,
new ColorF(0, 0, 0, 0),
0,
0,
@@ -142,7 +145,7 @@ namespace Ryujinx.Graphics.Vulkan
_dirty = DirtyFlags.All;
}
- public void SetImage(int binding, ITexture image, GAL.Format imageFormat)
+ public void SetImage(int binding, ITexture image, Format imageFormat)
{
if (image is TextureBuffer imageBuffer)
{
@@ -181,10 +184,10 @@ namespace Ryujinx.Graphics.Vulkan
Auto<DisposableBuffer> vkBuffer = _gd.BufferManager.GetBuffer(commandBuffer, buffer.Handle, false, isSSBO: true);
ref Auto<DisposableBuffer> currentVkBuffer = ref _storageBufferRefs[index];
- DescriptorBufferInfo info = new DescriptorBufferInfo()
+ DescriptorBufferInfo info = new()
{
Offset = (ulong)buffer.Offset,
- Range = (ulong)buffer.Size
+ Range = (ulong)buffer.Size,
};
ref DescriptorBufferInfo currentInfo = ref _storageBuffers[index];
@@ -209,10 +212,10 @@ namespace Ryujinx.Graphics.Vulkan
ref Auto<DisposableBuffer> currentVkBuffer = ref _storageBufferRefs[index];
- DescriptorBufferInfo info = new DescriptorBufferInfo()
+ DescriptorBufferInfo info = new()
{
Offset = 0,
- Range = Vk.WholeSize
+ Range = Vk.WholeSize,
};
ref DescriptorBufferInfo currentInfo = ref _storageBuffers[index];
@@ -289,10 +292,10 @@ namespace Ryujinx.Graphics.Vulkan
Auto<DisposableBuffer> vkBuffer = _gd.BufferManager.GetBuffer(commandBuffer, buffer.Handle, false);
ref Auto<DisposableBuffer> currentVkBuffer = ref _uniformBufferRefs[index];
- DescriptorBufferInfo info = new DescriptorBufferInfo()
+ DescriptorBufferInfo info = new()
{
Offset = (ulong)buffer.Offset,
- Range = (ulong)buffer.Size
+ Range = (ulong)buffer.Size,
};
ref DescriptorBufferInfo currentInfo = ref _uniformBuffers[index];
@@ -400,11 +403,11 @@ namespace Ryujinx.Graphics.Vulkan
_uniformSet[0] = true;
}
- uniformBuffer[0] = new DescriptorBufferInfo()
+ uniformBuffer[0] = new DescriptorBufferInfo
{
Offset = 0,
Range = (ulong)SupportBuffer.RequiredSize,
- Buffer = _cachedSupportBuffer
+ Buffer = _cachedSupportBuffer,
};
dsc.UpdateBuffers(0, 0, uniformBuffer, DescriptorType.UniformBuffer);
@@ -474,7 +477,7 @@ namespace Ryujinx.Graphics.Vulkan
}
}
- dsc.UpdateImages(0, binding, textures.Slice(0, count), DescriptorType.CombinedImageSampler);
+ dsc.UpdateImages(0, binding, textures[..count], DescriptorType.CombinedImageSampler);
}
else
{
@@ -485,7 +488,7 @@ namespace Ryujinx.Graphics.Vulkan
bufferTextures[i] = _bufferTextureRefs[binding + i]?.GetBufferView(cbs) ?? default;
}
- dsc.UpdateBufferImages(0, binding, bufferTextures.Slice(0, count), DescriptorType.UniformTexelBuffer);
+ dsc.UpdateBufferImages(0, binding, bufferTextures[..count], DescriptorType.UniformTexelBuffer);
}
}
else if (setIndex == PipelineBase.ImageSetIndex)
@@ -499,7 +502,7 @@ namespace Ryujinx.Graphics.Vulkan
images[i].ImageView = _imageRefs[binding + i]?.Get(cbs).Value ?? default;
}
- dsc.UpdateImages(0, binding, images.Slice(0, count), DescriptorType.StorageImage);
+ dsc.UpdateImages(0, binding, images[..count], DescriptorType.StorageImage);
}
else
{
@@ -510,7 +513,7 @@ namespace Ryujinx.Graphics.Vulkan
bufferImages[i] = _bufferImageRefs[binding + i]?.GetBufferView(cbs, _bufferImageFormats[binding + i]) ?? default;
}
- dsc.UpdateBufferImages(0, binding, bufferImages.Slice(0, count), DescriptorType.StorageTexelBuffer);
+ dsc.UpdateBufferImages(0, binding, bufferImages[..count], DescriptorType.StorageTexelBuffer);
}
}
}
@@ -540,7 +543,7 @@ namespace Ryujinx.Graphics.Vulkan
DstBinding = (uint)baseBinding,
DescriptorType = type,
DescriptorCount = (uint)bufferInfo.Length,
- PBufferInfo = pBufferInfo
+ PBufferInfo = pBufferInfo,
};
_gd.PushDescriptorApi.CmdPushDescriptorSet(cbs.CommandBuffer, pbp, _program.PipelineLayout, 0, 1, &writeDescriptorSet);
@@ -554,11 +557,11 @@ namespace Ryujinx.Graphics.Vulkan
{
Span<DescriptorBufferInfo> uniformBuffer = stackalloc DescriptorBufferInfo[1];
- uniformBuffer[0] = new DescriptorBufferInfo()
+ uniformBuffer[0] = new DescriptorBufferInfo
{
Offset = 0,
Range = (ulong)SupportBuffer.RequiredSize,
- Buffer = _gd.BufferManager.GetBuffer(cbs.CommandBuffer, _pipeline.SupportBufferUpdater.Handle, false).Get(cbs, 0, SupportBuffer.RequiredSize).Value
+ Buffer = _gd.BufferManager.GetBuffer(cbs.CommandBuffer, _pipeline.SupportBufferUpdater.Handle, false).Get(cbs, 0, SupportBuffer.RequiredSize).Value,
};
_uniformSet[0] = true;
@@ -620,7 +623,7 @@ namespace Ryujinx.Graphics.Vulkan
Array.Clear(_storageSet);
}
- private void SwapBuffer(Auto<DisposableBuffer>[] list, Auto<DisposableBuffer> from, Auto<DisposableBuffer> to)
+ private static void SwapBuffer(Auto<DisposableBuffer>[] list, Auto<DisposableBuffer> from, Auto<DisposableBuffer> to)
{
for (int i = 0; i < list.Length; i++)
{