* dotnet format style --severity info Some changes were manually reverted. * dotnet format analyzers --serverity info Some changes have been minimally adapted. * Restore a few unused methods and variables * Silence dotnet format IDE0060 warnings * Silence dotnet format IDE0052 warnings * Address dotnet format CA1816 warnings * Address or silence dotnet format CA1069 warnings * Address or silence dotnet format CA2211 warnings * Address remaining dotnet format analyzer warnings * Address review comments * Address most dotnet format whitespace warnings * Apply dotnet format whitespace formatting A few of them have been manually reverted and the corresponding warning was silenced * Format if-blocks correctly * Run dotnet format whitespace after rebase * Run dotnet format style after rebase * Another rebase, another dotnet format run * Run dotnet format style after rebase * Run dotnet format after rebase and remove unused usings - analyzers - style - whitespace * Disable 'prefer switch expression' rule * Add comments to disabled warnings * Remove a few unused parameters * Replace MmeShadowScratch with Array256<uint> * Simplify properties and array initialization, Use const when possible, Remove trailing commas * Start working on disabled warnings * Fix and silence a few dotnet-format warnings again * Run dotnet format after rebase * Address IDE0251 warnings * Silence IDE0060 in .editorconfig * Revert "Simplify properties and array initialization, Use const when possible, Remove trailing commas" This reverts commit 9462e4136c0a2100dc28b20cf9542e06790aa67e. * dotnet format whitespace after rebase * First pass of dotnet format * Add unsafe dotnet format changes * Fix typos * Add trailing commas * Disable formatting for FormatTable * Address review feedback
85 lines
2.9 KiB
C#
85 lines
2.9 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Ryujinx.Graphics.Gpu.Shader
|
|
{
|
|
/// <summary>
|
|
/// List of cached shader programs that differs only by specialization state.
|
|
/// </summary>
|
|
class ShaderSpecializationList : IEnumerable<CachedShaderProgram>
|
|
{
|
|
private readonly List<CachedShaderProgram> _entries = new();
|
|
|
|
/// <summary>
|
|
/// Adds a program to the list.
|
|
/// </summary>
|
|
/// <param name="program">Program to be added</param>
|
|
public void Add(CachedShaderProgram program)
|
|
{
|
|
_entries.Add(program);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tries to find an existing 3D program on the cache.
|
|
/// </summary>
|
|
/// <param name="channel">GPU channel</param>
|
|
/// <param name="poolState">Texture pool state</param>
|
|
/// <param name="graphicsState">Graphics state</param>
|
|
/// <param name="program">Cached program, if found</param>
|
|
/// <returns>True if a compatible program is found, false otherwise</returns>
|
|
public bool TryFindForGraphics(
|
|
GpuChannel channel,
|
|
ref GpuChannelPoolState poolState,
|
|
ref GpuChannelGraphicsState graphicsState,
|
|
out CachedShaderProgram program)
|
|
{
|
|
foreach (var entry in _entries)
|
|
{
|
|
bool usesDrawParameters = entry.Shaders[1]?.Info.UsesDrawParameters ?? false;
|
|
|
|
if (entry.SpecializationState.MatchesGraphics(channel, ref poolState, ref graphicsState, usesDrawParameters, true))
|
|
{
|
|
program = entry;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
program = default;
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tries to find an existing compute program on the cache.
|
|
/// </summary>
|
|
/// <param name="channel">GPU channel</param>
|
|
/// <param name="poolState">Texture pool state</param>
|
|
/// <param name="computeState">Compute state</param>
|
|
/// <param name="program">Cached program, if found</param>
|
|
/// <returns>True if a compatible program is found, false otherwise</returns>
|
|
public bool TryFindForCompute(GpuChannel channel, GpuChannelPoolState poolState, GpuChannelComputeState computeState, out CachedShaderProgram program)
|
|
{
|
|
foreach (var entry in _entries)
|
|
{
|
|
if (entry.SpecializationState.MatchesCompute(channel, ref poolState, computeState, true))
|
|
{
|
|
program = entry;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
program = default;
|
|
return false;
|
|
}
|
|
|
|
public IEnumerator<CachedShaderProgram> GetEnumerator()
|
|
{
|
|
return _entries.GetEnumerator();
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
return GetEnumerator();
|
|
}
|
|
}
|
|
}
|