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

View file

@ -64,8 +64,6 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
private readonly ResourceHandleDestructor _resourceHandleDestructor; private readonly ResourceHandleDestructor _resourceHandleDestructor;
private readonly CommunicatorService _communicator; private readonly CommunicatorService _communicator;
private readonly CharacterUtility _utility;
private readonly ModelRenderer _modelRenderer;
private readonly HumanSetupScalingHook _humanSetupScalingHook; private readonly HumanSetupScalingHook _humanSetupScalingHook;
private readonly ModdedShaderPackageState _skinState; private readonly ModdedShaderPackageState _skinState;
@ -111,31 +109,31 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
CommunicatorService communicator, HookManager hooks, CharacterBaseVTables vTables, HumanSetupScalingHook humanSetupScalingHook) CommunicatorService communicator, HookManager hooks, CharacterBaseVTables vTables, HumanSetupScalingHook humanSetupScalingHook)
{ {
_resourceHandleDestructor = resourceHandleDestructor; _resourceHandleDestructor = resourceHandleDestructor;
_utility = utility; var utility1 = utility;
_modelRenderer = modelRenderer; var modelRenderer1 = modelRenderer;
_communicator = communicator; _communicator = communicator;
_humanSetupScalingHook = humanSetupScalingHook; _humanSetupScalingHook = humanSetupScalingHook;
_skinState = new ModdedShaderPackageState( _skinState = new ModdedShaderPackageState(
() => (ShaderPackageResourceHandle**)&_utility.Address->SkinShpkResource, () => (ShaderPackageResourceHandle**)&utility1.Address->SkinShpkResource,
() => (ShaderPackageResourceHandle*)_utility.DefaultSkinShpkResource); () => (ShaderPackageResourceHandle*)utility1.DefaultSkinShpkResource);
_characterStockingsState = new ModdedShaderPackageState( _characterStockingsState = new ModdedShaderPackageState(
() => (ShaderPackageResourceHandle**)&_utility.Address->CharacterStockingsShpkResource, () => (ShaderPackageResourceHandle**)&utility1.Address->CharacterStockingsShpkResource,
() => (ShaderPackageResourceHandle*)_utility.DefaultCharacterStockingsShpkResource); () => (ShaderPackageResourceHandle*)utility1.DefaultCharacterStockingsShpkResource);
_characterLegacyState = new ModdedShaderPackageState( _characterLegacyState = new ModdedShaderPackageState(
() => (ShaderPackageResourceHandle**)&_utility.Address->CharacterLegacyShpkResource, () => (ShaderPackageResourceHandle**)&utility1.Address->CharacterLegacyShpkResource,
() => (ShaderPackageResourceHandle*)_utility.DefaultCharacterLegacyShpkResource); () => (ShaderPackageResourceHandle*)utility1.DefaultCharacterLegacyShpkResource);
_irisState = new ModdedShaderPackageState(() => _modelRenderer.IrisShaderPackage, () => _modelRenderer.DefaultIrisShaderPackage); _irisState = new ModdedShaderPackageState(() => modelRenderer1.IrisShaderPackage, () => modelRenderer1.DefaultIrisShaderPackage);
_characterGlassState = new ModdedShaderPackageState(() => _modelRenderer.CharacterGlassShaderPackage, _characterGlassState = new ModdedShaderPackageState(() => modelRenderer1.CharacterGlassShaderPackage,
() => _modelRenderer.DefaultCharacterGlassShaderPackage); () => modelRenderer1.DefaultCharacterGlassShaderPackage);
_characterTransparencyState = new ModdedShaderPackageState(() => _modelRenderer.CharacterTransparencyShaderPackage, _characterTransparencyState = new ModdedShaderPackageState(() => modelRenderer1.CharacterTransparencyShaderPackage,
() => _modelRenderer.DefaultCharacterTransparencyShaderPackage); () => modelRenderer1.DefaultCharacterTransparencyShaderPackage);
_characterTattooState = new ModdedShaderPackageState(() => _modelRenderer.CharacterTattooShaderPackage, _characterTattooState = new ModdedShaderPackageState(() => modelRenderer1.CharacterTattooShaderPackage,
() => _modelRenderer.DefaultCharacterTattooShaderPackage); () => modelRenderer1.DefaultCharacterTattooShaderPackage);
_characterOcclusionState = new ModdedShaderPackageState(() => _modelRenderer.CharacterOcclusionShaderPackage, _characterOcclusionState = new ModdedShaderPackageState(() => modelRenderer1.CharacterOcclusionShaderPackage,
() => _modelRenderer.DefaultCharacterOcclusionShaderPackage); () => modelRenderer1.DefaultCharacterOcclusionShaderPackage);
_hairMaskState = _hairMaskState =
new ModdedShaderPackageState(() => _modelRenderer.HairMaskShaderPackage, () => _modelRenderer.DefaultHairMaskShaderPackage); new ModdedShaderPackageState(() => modelRenderer1.HairMaskShaderPackage, () => modelRenderer1.DefaultHairMaskShaderPackage);
_humanSetupScalingHook.SetupReplacements += SetupHssReplacements; _humanSetupScalingHook.SetupReplacements += SetupHssReplacements;
_humanOnRenderMaterialHook = hooks.CreateHook<CharacterBaseOnRenderMaterialDelegate>("Human.OnRenderMaterial", vTables.HumanVTable[64], _humanOnRenderMaterialHook = hooks.CreateHook<CharacterBaseOnRenderMaterialDelegate>("Human.OnRenderMaterial", vTables.HumanVTable[64],
@ -463,6 +461,7 @@ public sealed unsafe class ShaderReplacementFixer : IDisposable, IRequiredServic
return mtrlResource; return mtrlResource;
} }
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
private static int GetDataSetExpectedSize(uint dataFlags) private static int GetDataSetExpectedSize(uint dataFlags)
=> (dataFlags & 4) != 0 => (dataFlags & 4) != 0
? ColorTable.Size + ((dataFlags & 8) != 0 ? ColorDyeTable.Size : 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) private Texture* PrepareColorTableDetour(MaterialResourceHandle* thisPtr, byte stain0Id, byte stain1Id)
{ {
if (thisPtr->DataSetSize < GetDataSetExpectedSize(thisPtr->DataFlags)) 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 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) if (!Enabled || GetTotalMaterialCountForColorTable() == 0)