misc: chore: Use collection expressions in Vulkan project

This commit is contained in:
Evan Husted
2025-01-26 15:32:25 -06:00
parent 9cb3b40ffc
commit ed2590a8ac
32 changed files with 212 additions and 240 deletions

View File

@@ -50,10 +50,9 @@ namespace Ryujinx.Graphics.Vulkan.Effects
_sampler = _renderer.CreateSampler(SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear));
_scalingProgram = _renderer.CreateProgramWithMinimalLayout(new[]
{
new ShaderSource(scalingShader, ShaderStage.Compute, TargetLanguage.Spirv),
}, scalingResourceLayout);
_scalingProgram = _renderer.CreateProgramWithMinimalLayout([
new ShaderSource(scalingShader, ShaderStage.Compute, TargetLanguage.Spirv)
], scalingResourceLayout);
}
public void Run(
@@ -70,8 +69,8 @@ namespace Ryujinx.Graphics.Vulkan.Effects
_pipeline.SetProgram(_scalingProgram);
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _sampler);
ReadOnlySpan<float> dimensionsBuffer = stackalloc float[]
{
ReadOnlySpan<float> dimensionsBuffer =
[
source.X1,
source.X2,
source.Y1,
@@ -79,8 +78,8 @@ namespace Ryujinx.Graphics.Vulkan.Effects
destination.X1,
destination.X2,
destination.Y1,
destination.Y2,
};
destination.Y2
];
int rangeSize = dimensionsBuffer.Length * sizeof(float);
using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize);
@@ -90,7 +89,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects
int dispatchX = (width + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim;
int dispatchY = (height + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim;
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) });
_pipeline.SetUniformBuffers([new BufferAssignment(2, buffer.Range)]);
_pipeline.SetImage(0, destinationTexture);
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
_pipeline.ComputeBarrier();

View File

@@ -70,15 +70,13 @@ namespace Ryujinx.Graphics.Vulkan.Effects
_sampler = _renderer.CreateSampler(SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear));
_scalingProgram = _renderer.CreateProgramWithMinimalLayout(new[]
{
new ShaderSource(scalingShader, ShaderStage.Compute, TargetLanguage.Spirv),
}, scalingResourceLayout);
_scalingProgram = _renderer.CreateProgramWithMinimalLayout([
new ShaderSource(scalingShader, ShaderStage.Compute, TargetLanguage.Spirv)
], scalingResourceLayout);
_sharpeningProgram = _renderer.CreateProgramWithMinimalLayout(new[]
{
new ShaderSource(sharpeningShader, ShaderStage.Compute, TargetLanguage.Spirv),
}, sharpeningResourceLayout);
_sharpeningProgram = _renderer.CreateProgramWithMinimalLayout([
new ShaderSource(sharpeningShader, ShaderStage.Compute, TargetLanguage.Spirv)
], sharpeningResourceLayout);
}
public void Run(
@@ -127,8 +125,8 @@ namespace Ryujinx.Graphics.Vulkan.Effects
float scaleX = srcWidth / view.Width;
float scaleY = srcHeight / view.Height;
ReadOnlySpan<float> dimensionsBuffer = stackalloc float[]
{
ReadOnlySpan<float> dimensionsBuffer =
[
source.X1,
source.X2,
source.Y1,
@@ -138,14 +136,14 @@ namespace Ryujinx.Graphics.Vulkan.Effects
destination.Y1,
destination.Y2,
scaleX,
scaleY,
};
scaleY
];
int rangeSize = dimensionsBuffer.Length * sizeof(float);
using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize);
buffer.Holder.SetDataUnchecked(buffer.Offset, dimensionsBuffer);
ReadOnlySpan<float> sharpeningBufferData = stackalloc float[] { 1.5f - (Level * 0.01f * 1.5f) };
ReadOnlySpan<float> sharpeningBufferData = [1.5f - (Level * 0.01f * 1.5f)];
using ScopedTemporaryBuffer sharpeningBuffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, sizeof(float));
sharpeningBuffer.Holder.SetDataUnchecked(sharpeningBuffer.Offset, sharpeningBufferData);
@@ -153,7 +151,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects
int dispatchX = (width + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim;
int dispatchY = (height + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim;
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) });
_pipeline.SetUniformBuffers([new BufferAssignment(2, buffer.Range)]);
_pipeline.SetImage(ShaderStage.Compute, 0, _intermediaryTexture.GetView(FormatTable.ConvertRgba8SrgbToUnorm(view.Info.Format)));
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
_pipeline.ComputeBarrier();
@@ -161,7 +159,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects
// Sharpening pass
_pipeline.SetProgram(_sharpeningProgram);
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, _intermediaryTexture, _sampler);
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(4, sharpeningBuffer.Range) });
_pipeline.SetUniformBuffers([new BufferAssignment(4, sharpeningBuffer.Range)]);
_pipeline.SetImage(0, destinationTexture);
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
_pipeline.ComputeBarrier();

View File

@@ -46,10 +46,9 @@ namespace Ryujinx.Graphics.Vulkan.Effects
_samplerLinear = _renderer.CreateSampler(SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear));
_shaderProgram = _renderer.CreateProgramWithMinimalLayout(new[]
{
new ShaderSource(shader, ShaderStage.Compute, TargetLanguage.Spirv),
}, resourceLayout);
_shaderProgram = _renderer.CreateProgramWithMinimalLayout([
new ShaderSource(shader, ShaderStage.Compute, TargetLanguage.Spirv)
], resourceLayout);
}
public TextureView Run(TextureView view, CommandBufferScoped cbs, int width, int height)
@@ -64,13 +63,13 @@ namespace Ryujinx.Graphics.Vulkan.Effects
_pipeline.SetProgram(_shaderProgram);
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _samplerLinear);
ReadOnlySpan<float> resolutionBuffer = stackalloc float[] { view.Width, view.Height };
ReadOnlySpan<float> resolutionBuffer = [view.Width, view.Height];
int rangeSize = resolutionBuffer.Length * sizeof(float);
using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize);
buffer.Holder.SetDataUnchecked(buffer.Offset, resolutionBuffer);
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) });
_pipeline.SetUniformBuffers([new BufferAssignment(2, buffer.Range)]);
int dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize);
int dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize);

View File

@@ -117,20 +117,17 @@ namespace Ryujinx.Graphics.Vulkan.Effects
(4, SpecConstType.Float32),
(5, SpecConstType.Float32));
_edgeProgram = _renderer.CreateProgramWithMinimalLayout(new[]
{
new ShaderSource(edgeShader, ShaderStage.Compute, TargetLanguage.Spirv),
}, edgeResourceLayout, new[] { specInfo });
_edgeProgram = _renderer.CreateProgramWithMinimalLayout([
new ShaderSource(edgeShader, ShaderStage.Compute, TargetLanguage.Spirv)
], edgeResourceLayout, [specInfo]);
_blendProgram = _renderer.CreateProgramWithMinimalLayout(new[]
{
new ShaderSource(blendShader, ShaderStage.Compute, TargetLanguage.Spirv),
}, blendResourceLayout, new[] { specInfo });
_blendProgram = _renderer.CreateProgramWithMinimalLayout([
new ShaderSource(blendShader, ShaderStage.Compute, TargetLanguage.Spirv)
], blendResourceLayout, [specInfo]);
_neighbourProgram = _renderer.CreateProgramWithMinimalLayout(new[]
{
new ShaderSource(neighbourShader, ShaderStage.Compute, TargetLanguage.Spirv),
}, neighbourResourceLayout, new[] { specInfo });
_neighbourProgram = _renderer.CreateProgramWithMinimalLayout([
new ShaderSource(neighbourShader, ShaderStage.Compute, TargetLanguage.Spirv)
], neighbourResourceLayout, [specInfo]);
}
public void DeletePipelines()
@@ -214,12 +211,12 @@ namespace Ryujinx.Graphics.Vulkan.Effects
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _samplerLinear);
_pipeline.Specialize(_specConstants);
ReadOnlySpan<float> resolutionBuffer = stackalloc float[] { view.Width, view.Height };
ReadOnlySpan<float> resolutionBuffer = [view.Width, view.Height];
int rangeSize = resolutionBuffer.Length * sizeof(float);
using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize);
buffer.Holder.SetDataUnchecked(buffer.Offset, resolutionBuffer);
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) });
_pipeline.SetUniformBuffers([new BufferAssignment(2, buffer.Range)]);
_pipeline.SetImage(ShaderStage.Compute, 0, _edgeOutputTexture.GetView(FormatTable.ConvertRgba8SrgbToUnorm(view.Info.Format)));
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
_pipeline.ComputeBarrier();