Autoformat and remove nagging.

This commit is contained in:
Ottermandias 2025-01-11 13:46:28 +01:00
parent 0758739666
commit e73b3e85bd
2 changed files with 44 additions and 43 deletions

View file

@ -14,8 +14,8 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
/// <remarks> This array must be sorted by CreationOrder ascending. </remarks>
private static readonly ImmutableArray<ForcedTextureConfig> ForcedTextureConfigs =
[
new(9, TextureFormat.R16G16B16A16_FLOAT, "Opaque Diffuse GBuffer"),
new(10, TextureFormat.R16G16B16A16_FLOAT, "Semitransparent Diffuse GBuffer"),
new ForcedTextureConfig(9, TextureFormat.R16G16B16A16_FLOAT, "Opaque Diffuse GBuffer"),
new ForcedTextureConfig(10, TextureFormat.R16G16B16A16_FLOAT, "Semitransparent Diffuse GBuffer"),
];
private static readonly IComparer<ForcedTextureConfig> ForcedTextureConfigComparer
@ -23,16 +23,17 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
private readonly Configuration _config;
private readonly ThreadLocal<TextureIndices> _textureIndices = new(() => new(-1, -1));
private readonly ThreadLocal<TextureIndices> _textureIndices = new(() => new TextureIndices(-1, -1));
private readonly ThreadLocal<Dictionary<nint, (int TextureIndex, uint TextureFormat)>?> _textures = new(() => null);
public TextureReportRecord[]? TextureReport { get; private set; }
[Signature(Sigs.RenderTargetManagerInitialize, DetourName = nameof(RenderTargetManagerInitializeDetour))]
private Hook<RenderTargetManagerInitializeFunc> _renderTargetManagerInitialize = null!;
private readonly Hook<RenderTargetManagerInitializeFunc> _renderTargetManagerInitialize = null!;
[Signature(Sigs.DeviceCreateTexture2D, DetourName = nameof(CreateTexture2DDetour))]
private Hook<CreateTexture2DFunc> _createTexture2D = null!;
private readonly Hook<CreateTexture2DFunc> _createTexture2D = null!;
public RenderTargetHdrEnabler(IGameInteropProvider interop, Configuration config)
{
@ -47,7 +48,7 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
public static ForcedTextureConfig? GetForcedTextureConfig(int creationOrder)
{
var i = ForcedTextureConfigs.BinarySearch(new(creationOrder, 0, string.Empty), ForcedTextureConfigComparer);
var i = ForcedTextureConfigs.BinarySearch(new ForcedTextureConfig(creationOrder, 0, string.Empty), ForcedTextureConfigComparer);
return i >= 0 ? ForcedTextureConfigs[i] : null;
}
@ -59,10 +60,6 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
private void Dispose(bool _)
{
_renderTargetManagerInitialize.Disable();
if (_createTexture2D.IsEnabled)
_createTexture2D.Disable();
_createTexture2D.Dispose();
_renderTargetManagerInitialize.Dispose();
}
@ -70,8 +67,8 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
private nint RenderTargetManagerInitializeDetour(RenderTargetManager* @this)
{
_createTexture2D.Enable();
_textureIndices.Value = new(0, 0);
_textures.Value = _config.DebugMode ? [] : null;
_textureIndices.Value = new TextureIndices(0, 0);
_textures.Value = _config.DebugMode ? [] : null;
try
{
return _renderTargetManagerInitialize.Original(@this);
@ -80,10 +77,11 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
{
if (_textures.Value != null)
{
TextureReport = CreateTextureReport(@this, _textures.Value);
TextureReport = CreateTextureReport(@this, _textures.Value);
_textures.Value = null;
}
_textureIndices.Value = new(-1, -1);
_textureIndices.Value = new TextureIndices(-1, -1);
_createTexture2D.Disable();
}
}
@ -92,9 +90,10 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
Device* @this, int* size, byte mipLevel, uint textureFormat, uint flags, uint unk)
{
var originalTextureFormat = textureFormat;
var indices = _textureIndices.IsValueCreated ? _textureIndices.Value : new(-1, -1);
if (indices.ConfigIndex >= 0 && indices.ConfigIndex < ForcedTextureConfigs.Length &&
ForcedTextureConfigs[indices.ConfigIndex].CreationOrder == indices.CreationOrder)
var indices = _textureIndices.IsValueCreated ? _textureIndices.Value : new TextureIndices(-1, -1);
if (indices.ConfigIndex >= 0
&& indices.ConfigIndex < ForcedTextureConfigs.Length
&& ForcedTextureConfigs[indices.ConfigIndex].CreationOrder == indices.CreationOrder)
{
var config = ForcedTextureConfigs[indices.ConfigIndex++];
textureFormat = (uint)config.ForcedTextureFormat;
@ -112,15 +111,17 @@ public unsafe class RenderTargetHdrEnabler : IService, IDisposable
return texture;
}
private static TextureReportRecord[] CreateTextureReport(RenderTargetManager* renderTargetManager, Dictionary<nint, (int TextureIndex, uint TextureFormat)> textures)
private static TextureReportRecord[] CreateTextureReport(RenderTargetManager* renderTargetManager,
Dictionary<nint, (int TextureIndex, uint TextureFormat)> textures)
{
var rtmTextures = new Span<nint>(renderTargetManager, sizeof(RenderTargetManager) / sizeof(nint));
var report = new List<TextureReportRecord>();
var report = new List<TextureReportRecord>();
for (var i = 0; i < rtmTextures.Length; ++i)
{
if (textures.TryGetValue(rtmTextures[i], out var texture))
report.Add(new(i * sizeof(nint), texture.TextureIndex, (TextureFormat)texture.TextureFormat));
report.Add(new TextureReportRecord(i * sizeof(nint), texture.TextureIndex, (TextureFormat)texture.TextureFormat));
}
return report.ToArray();
}

View file

@ -64,8 +64,6 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
private readonly ResourceHandleDestructor _resourceHandleDestructor;
private readonly CommunicatorService _communicator;
private readonly CharacterUtility _utility;
private readonly ModelRenderer _modelRenderer;
private readonly HumanSetupScalingHook _humanSetupScalingHook;
private readonly ModdedShaderPackageState _skinState;
@ -111,31 +109,31 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
CommunicatorService communicator, HookManager hooks, CharacterBaseVTables vTables, HumanSetupScalingHook humanSetupScalingHook)
{
_resourceHandleDestructor = resourceHandleDestructor;
_utility = utility;
_modelRenderer = modelRenderer;
_communicator = communicator;
_humanSetupScalingHook = humanSetupScalingHook;
var utility1 = utility;
var modelRenderer1 = modelRenderer;
_communicator = communicator;
_humanSetupScalingHook = humanSetupScalingHook;
_skinState = new ModdedShaderPackageState(
() => (ShaderPackageResourceHandle**)&_utility.Address->SkinShpkResource,
() => (ShaderPackageResourceHandle*)_utility.DefaultSkinShpkResource);
() => (ShaderPackageResourceHandle**)&utility1.Address->SkinShpkResource,
() => (ShaderPackageResourceHandle*)utility1.DefaultSkinShpkResource);
_characterStockingsState = new ModdedShaderPackageState(
() => (ShaderPackageResourceHandle**)&_utility.Address->CharacterStockingsShpkResource,
() => (ShaderPackageResourceHandle*)_utility.DefaultCharacterStockingsShpkResource);
() => (ShaderPackageResourceHandle**)&utility1.Address->CharacterStockingsShpkResource,
() => (ShaderPackageResourceHandle*)utility1.DefaultCharacterStockingsShpkResource);
_characterLegacyState = new ModdedShaderPackageState(
() => (ShaderPackageResourceHandle**)&_utility.Address->CharacterLegacyShpkResource,
() => (ShaderPackageResourceHandle*)_utility.DefaultCharacterLegacyShpkResource);
_irisState = new ModdedShaderPackageState(() => _modelRenderer.IrisShaderPackage, () => _modelRenderer.DefaultIrisShaderPackage);
_characterGlassState = new ModdedShaderPackageState(() => _modelRenderer.CharacterGlassShaderPackage,
() => _modelRenderer.DefaultCharacterGlassShaderPackage);
_characterTransparencyState = new ModdedShaderPackageState(() => _modelRenderer.CharacterTransparencyShaderPackage,
() => _modelRenderer.DefaultCharacterTransparencyShaderPackage);
_characterTattooState = new ModdedShaderPackageState(() => _modelRenderer.CharacterTattooShaderPackage,
() => _modelRenderer.DefaultCharacterTattooShaderPackage);
_characterOcclusionState = new ModdedShaderPackageState(() => _modelRenderer.CharacterOcclusionShaderPackage,
() => _modelRenderer.DefaultCharacterOcclusionShaderPackage);
() => (ShaderPackageResourceHandle**)&utility1.Address->CharacterLegacyShpkResource,
() => (ShaderPackageResourceHandle*)utility1.DefaultCharacterLegacyShpkResource);
_irisState = new ModdedShaderPackageState(() => modelRenderer1.IrisShaderPackage, () => modelRenderer1.DefaultIrisShaderPackage);
_characterGlassState = new ModdedShaderPackageState(() => modelRenderer1.CharacterGlassShaderPackage,
() => modelRenderer1.DefaultCharacterGlassShaderPackage);
_characterTransparencyState = new ModdedShaderPackageState(() => modelRenderer1.CharacterTransparencyShaderPackage,
() => modelRenderer1.DefaultCharacterTransparencyShaderPackage);
_characterTattooState = new ModdedShaderPackageState(() => modelRenderer1.CharacterTattooShaderPackage,
() => modelRenderer1.DefaultCharacterTattooShaderPackage);
_characterOcclusionState = new ModdedShaderPackageState(() => modelRenderer1.CharacterOcclusionShaderPackage,
() => modelRenderer1.DefaultCharacterOcclusionShaderPackage);
_hairMaskState =
new ModdedShaderPackageState(() => _modelRenderer.HairMaskShaderPackage, () => _modelRenderer.DefaultHairMaskShaderPackage);
new ModdedShaderPackageState(() => modelRenderer1.HairMaskShaderPackage, () => modelRenderer1.DefaultHairMaskShaderPackage);
_humanSetupScalingHook.SetupReplacements += SetupHssReplacements;
_humanOnRenderMaterialHook = hooks.CreateHook<CharacterBaseOnRenderMaterialDelegate>("Human.OnRenderMaterial", vTables.HumanVTable[64],
@ -463,6 +461,7 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
return mtrlResource;
}
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
private static int GetDataSetExpectedSize(uint dataFlags)
=> (dataFlags & 4) != 0
? ColorTable.Size + ((dataFlags & 8) != 0 ? ColorDyeTable.Size : 0)
@ -471,7 +470,8 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
private Texture* PrepareColorTableDetour(MaterialResourceHandle* thisPtr, byte stain0Id, byte stain1Id)
{
if (thisPtr->DataSetSize < GetDataSetExpectedSize(thisPtr->DataFlags))
Penumbra.Log.Warning($"Material at {thisPtr->FileName} has data set of size {thisPtr->DataSetSize} bytes, but should have at least {GetDataSetExpectedSize(thisPtr->DataFlags)} bytes. This may cause crashes due to access violations.");
Penumbra.Log.Warning(
$"Material at {thisPtr->FileName} has data set of size {thisPtr->DataSetSize} bytes, but should have at least {GetDataSetExpectedSize(thisPtr->DataFlags)} bytes. This may cause crashes due to access violations.");
// If we don't have any on-screen instances of modded characterlegacy.shpk, we don't need the slow path at all.
if (!Enabled || GetTotalMaterialCountForColorTable() == 0)