aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Graphics/CdmaProcessor.cs64
-rw-r--r--Ryujinx.Graphics/ChClassId.cs4
-rw-r--r--Ryujinx.Graphics/ChCommandEntry.cs8
-rw-r--r--Ryujinx.Graphics/DmaPusher.cs142
-rw-r--r--Ryujinx.Graphics/Gal/EmbeddedResource.cs10
-rw-r--r--Ryujinx.Graphics/Gal/GalColorF.cs16
-rw-r--r--Ryujinx.Graphics/Gal/GalFrontFace.cs4
-rw-r--r--Ryujinx.Graphics/Gal/GalImage.cs76
-rw-r--r--Ryujinx.Graphics/Gal/GalImageFormat.cs28
-rw-r--r--Ryujinx.Graphics/Gal/GalPipelineState.cs12
-rw-r--r--Ryujinx.Graphics/Gal/GalSurfaceFormat.cs88
-rw-r--r--Ryujinx.Graphics/Gal/GalTextureFormat.cs22
-rw-r--r--Ryujinx.Graphics/Gal/GalTextureSampler.cs36
-rw-r--r--Ryujinx.Graphics/Gal/GalTextureType.cs4
-rw-r--r--Ryujinx.Graphics/Gal/GalVertexAttrib.cs28
-rw-r--r--Ryujinx.Graphics/Gal/IGalConstBuffer.cs8
-rw-r--r--Ryujinx.Graphics/Gal/IGalMemory.cs4
-rw-r--r--Ryujinx.Graphics/Gal/IGalPipeline.cs6
-rw-r--r--Ryujinx.Graphics/Gal/IGalRasterizer.cs34
-rw-r--r--Ryujinx.Graphics/Gal/IGalRenderTarget.cs48
-rw-r--r--Ryujinx.Graphics/Gal/IGalRenderer.cs2
-rw-r--r--Ryujinx.Graphics/Gal/IGalShader.cs12
-rw-r--r--Ryujinx.Graphics/Gal/IGalTexture.cs10
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/DeleteValueCallback.cs2
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/ImageHandler.cs6
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLCachedResource.cs191
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLConstBuffer.cs74
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs70
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLLimit.cs12
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs207
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLRenderTarget.cs549
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLRenderer.cs58
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs298
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs86
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs381
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglCachedResource.cs191
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglConstBuffer.cs74
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglEnumConverter.cs (renamed from Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs)192
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglExtension.cs70
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglLimit.cs12
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglPipeline.cs (renamed from Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs)490
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglRasterizer.cs207
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglRenderTarget.cs549
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglRenderer.cs58
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglShader.cs298
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglShaderProgram.cs86
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs (renamed from Ryujinx.Graphics/Gal/OpenGL/OGLStreamBuffer.cs)24
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglTexture.cs381
-rw-r--r--Ryujinx.Graphics/Gal/Shader/GlslDecl.cs265
-rw-r--r--Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs1234
-rw-r--r--Ryujinx.Graphics/Gal/Shader/GlslProgram.cs12
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecodeAlu.cs1208
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecodeFlow.cs32
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecodeFunc.cs2
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecodeHelper.cs58
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecodeMem.cs696
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs352
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecodeOpCode.cs224
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecodeSpecial.cs18
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderDecoder.cs170
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderHeader.cs102
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrAsg.cs6
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrBlock.cs8
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrCmnt.cs4
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrCond.cs8
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrMetaIpa.cs4
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTex.cs10
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTexq.cs6
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrOp.cs20
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrOperAbuf.cs6
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrOperCbuf.cs8
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrOperGpr.cs20
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrOperImm.cs4
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrOperImmf.cs4
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderIrOperPred.cs4
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderOpCodeTable.cs62
-rw-r--r--Ryujinx.Graphics/Gal/Shader/ShaderOper.cs6
-rw-r--r--Ryujinx.Graphics/Gal/ShaderDeclInfo.cs34
-rw-r--r--Ryujinx.Graphics/Gal/ShaderDumper.cs76
-rw-r--r--Ryujinx.Graphics/Gal/ShaderException.cs2
-rw-r--r--Ryujinx.Graphics/GpuMethodCall.cs16
-rw-r--r--Ryujinx.Graphics/GpuResourceManager.cs116
-rw-r--r--Ryujinx.Graphics/Graphics3d/INvGpuEngine.cs2
-rw-r--r--Ryujinx.Graphics/Graphics3d/MacroInterpreter.cs230
-rw-r--r--Ryujinx.Graphics/Graphics3d/NvGpuEngine2d.cs289
-rw-r--r--Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs979
-rw-r--r--Ryujinx.Graphics/Graphics3d/NvGpuEngine3dReg.cs4
-rw-r--r--Ryujinx.Graphics/Graphics3d/NvGpuEngineM2mf.cs185
-rw-r--r--Ryujinx.Graphics/Graphics3d/NvGpuEngineP2mf.cs141
-rw-r--r--Ryujinx.Graphics/Graphics3d/NvGpuFifo.cs120
-rw-r--r--Ryujinx.Graphics/Graphics3d/NvGpuMethod.cs2
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/ASTCDecoder.cs1385
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/ASTCPixel.cs138
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/AstcDecoder.cs1385
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/AstcPixel.cs138
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/BitArrayStream.cs90
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/BlockLinearSwizzle.cs180
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/ISwizzle.cs8
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/ImageUtils.cs409
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/IntegerEncoded.cs204
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/LinearSwizzle.cs34
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/TextureFactory.cs190
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs46
-rw-r--r--Ryujinx.Graphics/Graphics3d/Texture/TextureSwizzle.cs2
-rw-r--r--Ryujinx.Graphics/Memory/NvGpuVmm.cs308
-rw-r--r--Ryujinx.Graphics/Memory/NvGpuVmmCache.cs10
-rw-r--r--Ryujinx.Graphics/NvGpu.cs16
-rw-r--r--Ryujinx.Graphics/QuadHelper.cs52
-rw-r--r--Ryujinx.Graphics/Texture/TextureInstructionSuffix.cs16
-rw-r--r--Ryujinx.Graphics/VDec/BitStreamWriter.cs56
-rw-r--r--Ryujinx.Graphics/VDec/DecoderHelper.cs10
-rw-r--r--Ryujinx.Graphics/VDec/FFmpeg.cs106
-rw-r--r--Ryujinx.Graphics/VDec/H264BitStreamWriter.cs54
-rw-r--r--Ryujinx.Graphics/VDec/H264Decoder.cs298
-rw-r--r--Ryujinx.Graphics/VDec/VideoDecoder.cs292
-rw-r--r--Ryujinx.Graphics/VDec/Vp9Decoder.cs582
-rw-r--r--Ryujinx.Graphics/VDec/VpxBitStreamWriter.cs26
-rw-r--r--Ryujinx.Graphics/VDec/VpxRangeEncoder.cs92
-rw-r--r--Ryujinx.Graphics/Vic/StructUnpacker.cs52
-rw-r--r--Ryujinx.Graphics/Vic/SurfaceOutputConfig.cs28
-rw-r--r--Ryujinx.Graphics/Vic/SurfacePixelFormat.cs4
-rw-r--r--Ryujinx.Graphics/Vic/VideoImageComposer.cs96
-rw-r--r--Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs10
-rw-r--r--Ryujinx.sln.DotSettings7
-rw-r--r--Ryujinx/Program.cs2
125 files changed, 9154 insertions, 9153 deletions
diff --git a/Ryujinx.Graphics/CdmaProcessor.cs b/Ryujinx.Graphics/CdmaProcessor.cs
index 4ebf2007..4ff12fbf 100644
--- a/Ryujinx.Graphics/CdmaProcessor.cs
+++ b/Ryujinx.Graphics/CdmaProcessor.cs
@@ -8,41 +8,41 @@ namespace Ryujinx.Graphics
private const int MethSetMethod = 0x10;
private const int MethSetData = 0x11;
- private NvGpu Gpu;
+ private NvGpu _gpu;
- public CdmaProcessor(NvGpu Gpu)
+ public CdmaProcessor(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
}
- public void PushCommands(NvGpuVmm Vmm, int[] CmdBuffer)
+ public void PushCommands(NvGpuVmm vmm, int[] cmdBuffer)
{
- List<ChCommand> Commands = new List<ChCommand>();
+ List<ChCommand> commands = new List<ChCommand>();
- ChClassId CurrentClass = 0;
+ ChClassId currentClass = 0;
- for (int Index = 0; Index < CmdBuffer.Length; Index++)
+ for (int index = 0; index < cmdBuffer.Length; index++)
{
- int Cmd = CmdBuffer[Index];
+ int cmd = cmdBuffer[index];
- int Value = (Cmd >> 0) & 0xffff;
- int MethodOffset = (Cmd >> 16) & 0xfff;
+ int value = (cmd >> 0) & 0xffff;
+ int methodOffset = (cmd >> 16) & 0xfff;
- ChSubmissionMode SubmissionMode = (ChSubmissionMode)((Cmd >> 28) & 0xf);
+ ChSubmissionMode submissionMode = (ChSubmissionMode)((cmd >> 28) & 0xf);
- switch (SubmissionMode)
+ switch (submissionMode)
{
- case ChSubmissionMode.SetClass: CurrentClass = (ChClassId)(Value >> 6); break;
+ case ChSubmissionMode.SetClass: currentClass = (ChClassId)(value >> 6); break;
case ChSubmissionMode.Incrementing:
{
- int Count = Value;
+ int count = value;
- for (int ArgIdx = 0; ArgIdx < Count; ArgIdx++)
+ for (int argIdx = 0; argIdx < count; argIdx++)
{
- int Argument = CmdBuffer[++Index];
+ int argument = cmdBuffer[++index];
- Commands.Add(new ChCommand(CurrentClass, MethodOffset + ArgIdx, Argument));
+ commands.Add(new ChCommand(currentClass, methodOffset + argIdx, argument));
}
break;
@@ -50,44 +50,44 @@ namespace Ryujinx.Graphics
case ChSubmissionMode.NonIncrementing:
{
- int Count = Value;
+ int count = value;
- int[] Arguments = new int[Count];
+ int[] arguments = new int[count];
- for (int ArgIdx = 0; ArgIdx < Count; ArgIdx++)
+ for (int argIdx = 0; argIdx < count; argIdx++)
{
- Arguments[ArgIdx] = CmdBuffer[++Index];
+ arguments[argIdx] = cmdBuffer[++index];
}
- Commands.Add(new ChCommand(CurrentClass, MethodOffset, Arguments));
+ commands.Add(new ChCommand(currentClass, methodOffset, arguments));
break;
}
}
}
- ProcessCommands(Vmm, Commands.ToArray());
+ ProcessCommands(vmm, commands.ToArray());
}
- private void ProcessCommands(NvGpuVmm Vmm, ChCommand[] Commands)
+ private void ProcessCommands(NvGpuVmm vmm, ChCommand[] commands)
{
- int MethodOffset = 0;
+ int methodOffset = 0;
- foreach (ChCommand Command in Commands)
+ foreach (ChCommand command in commands)
{
- switch (Command.MethodOffset)
+ switch (command.MethodOffset)
{
- case MethSetMethod: MethodOffset = Command.Arguments[0]; break;
+ case MethSetMethod: methodOffset = command.Arguments[0]; break;
case MethSetData:
{
- if (Command.ClassId == ChClassId.NvDec)
+ if (command.ClassId == ChClassId.NvDec)
{
- Gpu.VideoDecoder.Process(Vmm, MethodOffset, Command.Arguments);
+ _gpu.VideoDecoder.Process(vmm, methodOffset, command.Arguments);
}
- else if (Command.ClassId == ChClassId.GraphicsVic)
+ else if (command.ClassId == ChClassId.GraphicsVic)
{
- Gpu.VideoImageComposer.Process(Vmm, MethodOffset, Command.Arguments);
+ _gpu.VideoImageComposer.Process(vmm, methodOffset, command.Arguments);
}
break;
diff --git a/Ryujinx.Graphics/ChClassId.cs b/Ryujinx.Graphics/ChClassId.cs
index 7b74c6fb..115f0b89 100644
--- a/Ryujinx.Graphics/ChClassId.cs
+++ b/Ryujinx.Graphics/ChClassId.cs
@@ -2,7 +2,7 @@ namespace Ryujinx.Graphics
{
enum ChClassId
{
- Host1x = 0x1,
+ Host1X = 0x1,
VideoEncodeMpeg = 0x20,
VideoEncodeNvEnc = 0x21,
VideoStreamingVi = 0x30,
@@ -10,7 +10,7 @@ namespace Ryujinx.Graphics
VideoStreamingIspB = 0x34,
VideoStreamingViI2c = 0x36,
GraphicsVic = 0x5d,
- Graphics3d = 0x60,
+ Graphics3D = 0x60,
GraphicsGpu = 0x61,
Tsec = 0xe0,
TsecB = 0xe1,
diff --git a/Ryujinx.Graphics/ChCommandEntry.cs b/Ryujinx.Graphics/ChCommandEntry.cs
index 9001fab1..b01b77ed 100644
--- a/Ryujinx.Graphics/ChCommandEntry.cs
+++ b/Ryujinx.Graphics/ChCommandEntry.cs
@@ -8,11 +8,11 @@ namespace Ryujinx.Graphics
public int[] Arguments { get; private set; }
- public ChCommand(ChClassId ClassId, int MethodOffset, params int[] Arguments)
+ public ChCommand(ChClassId classId, int methodOffset, params int[] arguments)
{
- this.ClassId = ClassId;
- this.MethodOffset = MethodOffset;
- this.Arguments = Arguments;
+ ClassId = classId;
+ MethodOffset = methodOffset;
+ Arguments = arguments;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/DmaPusher.cs b/Ryujinx.Graphics/DmaPusher.cs
index 608d8a1d..c6825aba 100644
--- a/Ryujinx.Graphics/DmaPusher.cs
+++ b/Ryujinx.Graphics/DmaPusher.cs
@@ -6,10 +6,10 @@ namespace Ryujinx.Graphics
{
public class DmaPusher
{
- private ConcurrentQueue<(NvGpuVmm, long)> IbBuffer;
+ private ConcurrentQueue<(NvGpuVmm, long)> _ibBuffer;
- private long DmaPut;
- private long DmaGet;
+ private long _dmaPut;
+ private long _dmaGet;
private struct DmaState
{
@@ -21,43 +21,43 @@ namespace Ryujinx.Graphics
public int LengthPending;
}
- private DmaState State;
+ private DmaState _state;
- private bool SliEnable;
- private bool SliActive;
+ private bool _sliEnable;
+ private bool _sliActive;
- private bool IbEnable;
- private bool NonMain;
+ private bool _ibEnable;
+ private bool _nonMain;
- private long DmaMGet;
+ private long _dmaMGet;
- private NvGpuVmm Vmm;
+ private NvGpuVmm _vmm;
- private NvGpu Gpu;
+ private NvGpu _gpu;
- private AutoResetEvent Event;
+ private AutoResetEvent _event;
- public DmaPusher(NvGpu Gpu)
+ public DmaPusher(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
- IbBuffer = new ConcurrentQueue<(NvGpuVmm, long)>();
+ _ibBuffer = new ConcurrentQueue<(NvGpuVmm, long)>();
- IbEnable = true;
+ _ibEnable = true;
- Event = new AutoResetEvent(false);
+ _event = new AutoResetEvent(false);
}
- public void Push(NvGpuVmm Vmm, long Entry)
+ public void Push(NvGpuVmm vmm, long entry)
{
- IbBuffer.Enqueue((Vmm, Entry));
+ _ibBuffer.Enqueue((vmm, entry));
- Event.Set();
+ _event.Set();
}
public bool WaitForCommands()
{
- return Event.WaitOne(8);
+ return _event.WaitOne(8);
}
public void DispatchCalls()
@@ -67,101 +67,101 @@ namespace Ryujinx.Graphics
private bool Step()
{
- if (DmaGet != DmaPut)
+ if (_dmaGet != _dmaPut)
{
- int Word = Vmm.ReadInt32(DmaGet);
+ int word = _vmm.ReadInt32(_dmaGet);
- DmaGet += 4;
+ _dmaGet += 4;
- if (!NonMain)
+ if (!_nonMain)
{
- DmaMGet = DmaGet;
+ _dmaMGet = _dmaGet;
}
- if (State.LengthPending != 0)
+ if (_state.LengthPending != 0)
{
- State.LengthPending = 0;
- State.MethodCount = Word & 0xffffff;
+ _state.LengthPending = 0;
+ _state.MethodCount = word & 0xffffff;
}
- else if (State.MethodCount != 0)
+ else if (_state.MethodCount != 0)
{
- if (!SliEnable || SliActive)
+ if (!_sliEnable || _sliActive)
{
- CallMethod(Word);
+ CallMethod(word);
}
- if (!State.NonIncrementing)
+ if (!_state.NonIncrementing)
{
- State.Method++;
+ _state.Method++;
}
- if (State.IncrementOnce)
+ if (_state.IncrementOnce)
{
- State.NonIncrementing = true;
+ _state.NonIncrementing = true;
}
- State.MethodCount--;
+ _state.MethodCount--;
}
else
{
- int SumissionMode = (Word >> 29) & 7;
+ int sumissionMode = (word >> 29) & 7;
- switch (SumissionMode)
+ switch (sumissionMode)
{
case 1:
//Incrementing.
- SetNonImmediateState(Word);
+ SetNonImmediateState(word);
- State.NonIncrementing = false;
- State.IncrementOnce = false;
+ _state.NonIncrementing = false;
+ _state.IncrementOnce = false;
break;
case 3:
//Non-incrementing.
- SetNonImmediateState(Word);
+ SetNonImmediateState(word);
- State.NonIncrementing = true;
- State.IncrementOnce = false;
+ _state.NonIncrementing = true;
+ _state.IncrementOnce = false;
break;
case 4:
//Immediate.
- State.Method = (Word >> 0) & 0x1fff;
- State.SubChannel = (Word >> 13) & 7;
- State.NonIncrementing = true;
- State.IncrementOnce = false;
+ _state.Method = (word >> 0) & 0x1fff;
+ _state.SubChannel = (word >> 13) & 7;
+ _state.NonIncrementing = true;
+ _state.IncrementOnce = false;
- CallMethod((Word >> 16) & 0x1fff);
+ CallMethod((word >> 16) & 0x1fff);
break;
case 5:
//Increment-once.
- SetNonImmediateState(Word);
+ SetNonImmediateState(word);
- State.NonIncrementing = false;
- State.IncrementOnce = true;
+ _state.NonIncrementing = false;
+ _state.IncrementOnce = true;
break;
}
}
}
- else if (IbEnable && IbBuffer.TryDequeue(out (NvGpuVmm Vmm, long Entry) Tuple))
+ else if (_ibEnable && _ibBuffer.TryDequeue(out (NvGpuVmm Vmm, long Entry) tuple))
{
- this.Vmm = Tuple.Vmm;
+ _vmm = tuple.Vmm;
- long Entry = Tuple.Entry;
+ long entry = tuple.Entry;
- int Length = (int)(Entry >> 42) & 0x1fffff;
+ int length = (int)(entry >> 42) & 0x1fffff;
- DmaGet = Entry & 0xfffffffffc;
- DmaPut = DmaGet + Length * 4;
+ _dmaGet = entry & 0xfffffffffc;
+ _dmaPut = _dmaGet + length * 4;
- NonMain = (Entry & (1L << 41)) != 0;
+ _nonMain = (entry & (1L << 41)) != 0;
- Gpu.ResourceManager.ClearPbCache();
+ _gpu.ResourceManager.ClearPbCache();
}
else
{
@@ -171,20 +171,20 @@ namespace Ryujinx.Graphics
return true;
}
- private void SetNonImmediateState(int Word)
+ private void SetNonImmediateState(int word)
{
- State.Method = (Word >> 0) & 0x1fff;
- State.SubChannel = (Word >> 13) & 7;
- State.MethodCount = (Word >> 16) & 0x1fff;
+ _state.Method = (word >> 0) & 0x1fff;
+ _state.SubChannel = (word >> 13) & 7;
+ _state.MethodCount = (word >> 16) & 0x1fff;
}
- private void CallMethod(int Argument)
+ private void CallMethod(int argument)
{
- Gpu.Fifo.CallMethod(Vmm, new GpuMethodCall(
- State.Method,
- Argument,
- State.SubChannel,
- State.MethodCount));
+ _gpu.Fifo.CallMethod(_vmm, new GpuMethodCall(
+ _state.Method,
+ argument,
+ _state.SubChannel,
+ _state.MethodCount));
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/EmbeddedResource.cs b/Ryujinx.Graphics/Gal/EmbeddedResource.cs
index 45b77da7..ba662499 100644
--- a/Ryujinx.Graphics/Gal/EmbeddedResource.cs
+++ b/Ryujinx.Graphics/Gal/EmbeddedResource.cs
@@ -5,15 +5,15 @@ namespace Ryujinx.Graphics.Gal
{
static class EmbeddedResource
{
- public static string GetString(string Name)
+ public static string GetString(string name)
{
- Assembly Asm = typeof(EmbeddedResource).Assembly;
+ Assembly asm = typeof(EmbeddedResource).Assembly;
- using (Stream ResStream = Asm.GetManifestResourceStream(Name))
+ using (Stream resStream = asm.GetManifestResourceStream(name))
{
- StreamReader Reader = new StreamReader(ResStream);
+ StreamReader reader = new StreamReader(resStream);
- return Reader.ReadToEnd();
+ return reader.ReadToEnd();
}
}
}
diff --git a/Ryujinx.Graphics/Gal/GalColorF.cs b/Ryujinx.Graphics/Gal/GalColorF.cs
index 7cfb171d..e915870c 100644
--- a/Ryujinx.Graphics/Gal/GalColorF.cs
+++ b/Ryujinx.Graphics/Gal/GalColorF.cs
@@ -8,15 +8,15 @@ namespace Ryujinx.Graphics.Gal
public float Alpha { get; private set; }
public GalColorF(
- float Red,
- float Green,
- float Blue,
- float Alpha)
+ float red,
+ float green,
+ float blue,
+ float alpha)
{
- this.Red = Red;
- this.Green = Green;
- this.Blue = Blue;
- this.Alpha = Alpha;
+ Red = red;
+ Green = green;
+ Blue = blue;
+ Alpha = alpha;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/GalFrontFace.cs b/Ryujinx.Graphics/Gal/GalFrontFace.cs
index 17ad1126..6cc4a802 100644
--- a/Ryujinx.Graphics/Gal/GalFrontFace.cs
+++ b/Ryujinx.Graphics/Gal/GalFrontFace.cs
@@ -2,7 +2,7 @@
{
public enum GalFrontFace
{
- CW = 0x900,
- CCW = 0x901
+ Cw = 0x900,
+ Ccw = 0x901
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/GalImage.cs b/Ryujinx.Graphics/Gal/GalImage.cs
index fb904b09..1345704d 100644
--- a/Ryujinx.Graphics/Gal/GalImage.cs
+++ b/Ryujinx.Graphics/Gal/GalImage.cs
@@ -25,63 +25,63 @@ namespace Ryujinx.Graphics.Gal
public GalTextureTarget TextureTarget;
public GalImage(
- int Width,
- int Height,
- int Depth,
- int LayerCount,
- int TileWidth,
- int GobBlockHeight,
- int GobBlockDepth,
- GalMemoryLayout Layout,
- GalImageFormat Format,
- GalTextureTarget TextureTarget,
- int MaxMipmapLevel = 1,
- GalTextureSource XSource = GalTextureSource.Red,
- GalTextureSource YSource = GalTextureSource.Green,
- GalTextureSource ZSource = GalTextureSource.Blue,
- GalTextureSource WSource = GalTextureSource.Alpha)
+ int width,
+ int height,
+ int depth,
+ int layerCount,
+ int tileWidth,
+ int gobBlockHeight,
+ int gobBlockDepth,
+ GalMemoryLayout layout,
+ GalImageFormat format,
+ GalTextureTarget textureTarget,
+ int maxMipmapLevel = 1,
+ GalTextureSource xSource = GalTextureSource.Red,
+ GalTextureSource ySource = GalTextureSource.Green,
+ GalTextureSource zSource = GalTextureSource.Blue,
+ GalTextureSource wSource = GalTextureSource.Alpha)
{
- this.Width = Width;
- this.Height = Height;
- this.LayerCount = LayerCount;
- this.Depth = Depth;
- this.TileWidth = TileWidth;
- this.GobBlockHeight = GobBlockHeight;
- this.GobBlockDepth = GobBlockDepth;
- this.Layout = Layout;
- this.Format = Format;
- this.MaxMipmapLevel = MaxMipmapLevel;
- this.XSource = XSource;
- this.YSource = YSource;
- this.ZSource = ZSource;
- this.WSource = WSource;
- this.TextureTarget = TextureTarget;
+ Width = width;
+ Height = height;
+ LayerCount = layerCount;
+ Depth = depth;
+ TileWidth = tileWidth;
+ GobBlockHeight = gobBlockHeight;
+ GobBlockDepth = gobBlockDepth;
+ Layout = layout;
+ Format = format;
+ MaxMipmapLevel = maxMipmapLevel;
+ XSource = xSource;
+ YSource = ySource;
+ ZSource = zSource;
+ WSource = wSource;
+ TextureTarget = textureTarget;
- Pitch = ImageUtils.GetPitch(Format, Width);
+ Pitch = ImageUtils.GetPitch(format, width);
}
- public bool SizeMatches(GalImage Image, bool IgnoreLayer = false)
+ public bool SizeMatches(GalImage image, bool ignoreLayer = false)
{
if (ImageUtils.GetBytesPerPixel(Format) !=
- ImageUtils.GetBytesPerPixel(Image.Format))
+ ImageUtils.GetBytesPerPixel(image.Format))
{
return false;
}
if (ImageUtils.GetAlignedWidth(this) !=
- ImageUtils.GetAlignedWidth(Image))
+ ImageUtils.GetAlignedWidth(image))
{
return false;
}
- bool Result = Height == Image.Height && Depth == Image.Depth;
+ bool result = Height == image.Height && Depth == image.Depth;
- if (!IgnoreLayer)
+ if (!ignoreLayer)
{
- Result = Result && LayerCount == Image.LayerCount;
+ result = result && LayerCount == image.LayerCount;
}
- return Result;
+ return result;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/GalImageFormat.cs b/Ryujinx.Graphics/Gal/GalImageFormat.cs
index 70998d11..8dcde182 100644
--- a/Ryujinx.Graphics/Gal/GalImageFormat.cs
+++ b/Ryujinx.Graphics/Gal/GalImageFormat.cs
@@ -22,23 +22,23 @@ namespace Ryujinx.Graphics.Gal
Astc2D12x12,
Astc2DEnd,
- RGBA4,
- RGB565,
- BGR565,
- BGR5A1,
- RGB5A1,
+ Rgba4,
+ Rgb565,
+ Bgr565,
+ Bgr5A1,
+ Rgb5A1,
R8,
- RG8,
- RGBX8,
- RGBA8,
- BGRA8,
- RGB10A2,
+ Rg8,
+ Rgbx8,
+ Rgba8,
+ Bgra8,
+ Rgb10A2,
R16,
- RG16,
- RGBA16,
+ Rg16,
+ Rgba16,
R32,
- RG32,
- RGBA32,
+ Rg32,
+ Rgba32,
R11G11B10,
D16,
D24,
diff --git a/Ryujinx.Graphics/Gal/GalPipelineState.cs b/Ryujinx.Graphics/Gal/GalPipelineState.cs
index 8deb68b4..c044a55f 100644
--- a/Ryujinx.Graphics/Gal/GalPipelineState.cs
+++ b/Ryujinx.Graphics/Gal/GalPipelineState.cs
@@ -2,7 +2,7 @@
{
public struct ColorMaskState
{
- private static readonly ColorMaskState _Default = new ColorMaskState()
+ private static readonly ColorMaskState DefaultBackingField = new ColorMaskState()
{
Red = true,
Green = true,
@@ -10,7 +10,7 @@
Alpha = true
};
- public static ColorMaskState Default => _Default;
+ public static ColorMaskState Default => DefaultBackingField;
public bool Red;
public bool Green;
@@ -20,7 +20,7 @@
public struct BlendState
{
- private static readonly BlendState _Default = new BlendState()
+ private static readonly BlendState DefaultBackingField = new BlendState()
{
Enabled = false,
SeparateAlpha = false,
@@ -32,7 +32,7 @@
FuncDstAlpha = GalBlendFactor.Zero
};
- public static BlendState Default => _Default;
+ public static BlendState Default => DefaultBackingField;
public bool Enabled;
public bool SeparateAlpha;
@@ -111,9 +111,9 @@
{
ConstBufferKeys = new long[Stages][];
- for (int Stage = 0; Stage < Stages; Stage++)
+ for (int stage = 0; stage < Stages; stage++)
{
- ConstBufferKeys[Stage] = new long[ConstBuffersPerStage];
+ ConstBufferKeys[stage] = new long[ConstBuffersPerStage];
}
Blends = new BlendState[RenderTargetsCount];
diff --git a/Ryujinx.Graphics/Gal/GalSurfaceFormat.cs b/Ryujinx.Graphics/Gal/GalSurfaceFormat.cs
index 08bd622b..9cebcc27 100644
--- a/Ryujinx.Graphics/Gal/GalSurfaceFormat.cs
+++ b/Ryujinx.Graphics/Gal/GalSurfaceFormat.cs
@@ -4,48 +4,48 @@
{
Bitmap = 0x1c,
Unknown1D = 0x1d,
- RGBA32Float = 0xc0,
- RGBA32Sint = 0xc1,
- RGBA32Uint = 0xc2,
- RGBX32Float = 0xc3,
- RGBX32Sint = 0xc4,
- RGBX32Uint = 0xc5,
- RGBA16Unorm = 0xc6,
- RGBA16Snorm = 0xc7,
- RGBA16Sint = 0xc8,
- RGBA16Uint = 0xc9,
- RGBA16Float = 0xca,
- RG32Float = 0xcb,
- RG32Sint = 0xcc,
- RG32Uint = 0xcd,
- RGBX16Float = 0xce,
- BGRA8Unorm = 0xcf,
- BGRA8Srgb = 0xd0,
- RGB10A2Unorm = 0xd1,
- RGB10A2Uint = 0xd2,
- RGBA8Unorm = 0xd5,
- RGBA8Srgb = 0xd6,
- RGBA8Snorm = 0xd7,
- RGBA8Sint = 0xd8,
- RGBA8Uint = 0xd9,
- RG16Unorm = 0xda,
- RG16Snorm = 0xdb,
- RG16Sint = 0xdc,
- RG16Uint = 0xdd,
- RG16Float = 0xde,
- BGR10A2Unorm = 0xdf,
+ Rgba32Float = 0xc0,
+ Rgba32Sint = 0xc1,
+ Rgba32Uint = 0xc2,
+ Rgbx32Float = 0xc3,
+ Rgbx32Sint = 0xc4,
+ Rgbx32Uint = 0xc5,
+ Rgba16Unorm = 0xc6,
+ Rgba16Snorm = 0xc7,
+ Rgba16Sint = 0xc8,
+ Rgba16Uint = 0xc9,
+ Rgba16Float = 0xca,
+ Rg32Float = 0xcb,
+ Rg32Sint = 0xcc,
+ Rg32Uint = 0xcd,
+ Rgbx16Float = 0xce,
+ Bgra8Unorm = 0xcf,
+ Bgra8Srgb = 0xd0,
+ Rgb10A2Unorm = 0xd1,
+ Rgb10A2Uint = 0xd2,
+ Rgba8Unorm = 0xd5,
+ Rgba8Srgb = 0xd6,
+ Rgba8Snorm = 0xd7,
+ Rgba8Sint = 0xd8,
+ Rgba8Uint = 0xd9,
+ Rg16Unorm = 0xda,
+ Rg16Snorm = 0xdb,
+ Rg16Sint = 0xdc,
+ Rg16Uint = 0xdd,
+ Rg16Float = 0xde,
+ Bgr10A2Unorm = 0xdf,
R11G11B10Float = 0xe0,
R32Sint = 0xe3,
R32Uint = 0xe4,
R32Float = 0xe5,
- BGRX8Unorm = 0xe6,
- BGRX8Srgb = 0xe7,
+ Bgrx8Unorm = 0xe6,
+ Bgrx8Srgb = 0xe7,
B5G6R5Unorm = 0xe8,
- BGR5A1Unorm = 0xe9,
- RG8Unorm = 0xea,
- RG8Snorm = 0xeb,
- RG8Sint = 0xec,
- RG8Uint = 0xed,
+ Bgr5A1Unorm = 0xe9,
+ Rg8Unorm = 0xea,
+ Rg8Snorm = 0xeb,
+ Rg8Sint = 0xec,
+ Rg8Uint = 0xed,
R16Unorm = 0xee,
R16Snorm = 0xef,
R16Sint = 0xf0,
@@ -56,13 +56,13 @@
R8Sint = 0xf5,
R8Uint = 0xf6,
A8Unorm = 0xf7,
- BGR5X1Unorm = 0xf8,
- RGBX8Unorm = 0xf9,
- RGBX8Srgb = 0xfa,
- BGR5X1UnormUnknownFB = 0xfb,
- BGR5X1UnormUnknownFC = 0xfc,
- BGRX8UnormUnknownFD = 0xfd,
- BGRX8UnormUnknownFE = 0xfe,
+ Bgr5x1Unorm = 0xf8,
+ Rgbx8Unorm = 0xf9,
+ Rgbx8Srgb = 0xfa,
+ Bgr5x1UnormUnknownFB = 0xfb,
+ Bgr5x1UnormUnknownFC = 0xfc,
+ Bgrx8UnormUnknownFD = 0xfd,
+ Bgrx8UnormUnknownFE = 0xfe,
Y32UintUnknownFF = 0xff
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/GalTextureFormat.cs b/Ryujinx.Graphics/Gal/GalTextureFormat.cs
index 51ce5779..ed27180a 100644
--- a/Ryujinx.Graphics/Gal/GalTextureFormat.cs
+++ b/Ryujinx.Graphics/Gal/GalTextureFormat.cs
@@ -2,20 +2,20 @@ namespace Ryujinx.Graphics.Gal
{
public enum GalTextureFormat
{
- RGBA32 = 0x1,
- RGBA16 = 0x3,
- RG32 = 0x4,
- RGBA8 = 0x8,
- RGB10A2 = 0x9,
- RG16 = 0xc,
+ Rgba32 = 0x1,
+ Rgba16 = 0x3,
+ Rg32 = 0x4,
+ Rgba8 = 0x8,
+ Rgb10A2 = 0x9,
+ Rg16 = 0xc,
R32 = 0xf,
BptcSfloat = 0x10,
BptcUfloat = 0x11,
- RGBA4 = 0x12,
- RGB5A1 = 0x14,
- RGB565 = 0x15,
+ Rgba4 = 0x12,
+ Rgb5A1 = 0x14,
+ Rgb565 = 0x15,
BptcUnorm = 0x17,
- RG8 = 0x18,
+ Rg8 = 0x18,
R16 = 0x1b,
R8 = 0x1d,
R11G11B10F = 0x21,
@@ -26,7 +26,7 @@ namespace Ryujinx.Graphics.Gal
BC5 = 0x28,
D24S8 = 0x29,
D32F = 0x2f,
- D32FX24S8 = 0x30,
+ D32Fx24S8 = 0x30,
D16 = 0x3a,
Astc2D4x4 = 0x40,
Astc2D5x5 = 0x41,
diff --git a/Ryujinx.Graphics/Gal/GalTextureSampler.cs b/Ryujinx.Graphics/Gal/GalTextureSampler.cs
index 1d658cea..2e57a130 100644
--- a/Ryujinx.Graphics/Gal/GalTextureSampler.cs
+++ b/Ryujinx.Graphics/Gal/GalTextureSampler.cs
@@ -16,26 +16,26 @@ namespace Ryujinx.Graphics.Gal
public DepthCompareFunc DepthCompareFunc { get; private set; }
public GalTextureSampler(
- GalTextureWrap AddressU,
- GalTextureWrap AddressV,
- GalTextureWrap AddressP,
- GalTextureFilter MinFilter,
- GalTextureFilter MagFilter,
- GalTextureMipFilter MipFilter,
- GalColorF BorderColor,
- bool DepthCompare,
- DepthCompareFunc DepthCompareFunc)
+ GalTextureWrap addressU,
+ GalTextureWrap addressV,
+ GalTextureWrap addressP,
+ GalTextureFilter minFilter,
+ GalTextureFilter magFilter,
+ GalTextureMipFilter mipFilter,
+ GalColorF borderColor,
+ bool depthCompare,
+ DepthCompareFunc depthCompareFunc)
{
- this.AddressU = AddressU;
- this.AddressV = AddressV;
- this.AddressP = AddressP;
- this.MinFilter = MinFilter;
- this.MagFilter = MagFilter;
- this.MipFilter = MipFilter;
- this.BorderColor = BorderColor;
+ AddressU = addressU;
+ AddressV = addressV;
+ AddressP = addressP;
+ MinFilter = minFilter;
+ MagFilter = magFilter;
+ MipFilter = mipFilter;
+ BorderColor = borderColor;
- this.DepthCompare = DepthCompare;
- this.DepthCompareFunc = DepthCompareFunc;
+ DepthCompare = depthCompare;
+ DepthCompareFunc = depthCompareFunc;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/GalTextureType.cs b/Ryujinx.Graphics/Gal/GalTextureType.cs
index f7dd16d1..b02b8b37 100644
--- a/Ryujinx.Graphics/Gal/GalTextureType.cs
+++ b/Ryujinx.Graphics/Gal/GalTextureType.cs
@@ -6,8 +6,8 @@
Unorm = 2,
Sint = 3,
Uint = 4,
- Snorm_Force_Fp16 = 5,
- Unorm_Force_Fp16 = 6,
+ SnormForceFp16 = 5,
+ UnormForceFp16 = 6,
Float = 7
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/GalVertexAttrib.cs b/Ryujinx.Graphics/Gal/GalVertexAttrib.cs
index 31b648df..feca5aea 100644
--- a/Ryujinx.Graphics/Gal/GalVertexAttrib.cs
+++ b/Ryujinx.Graphics/Gal/GalVertexAttrib.cs
@@ -13,21 +13,21 @@ namespace Ryujinx.Graphics.Gal
public bool IsBgra { get; private set; }
public GalVertexAttrib(
- int Index,
- bool IsConst,
- int Offset,
- byte[] Data,
- GalVertexAttribSize Size,
- GalVertexAttribType Type,
- bool IsBgra)
+ int index,
+ bool isConst,
+ int offset,
+ byte[] data,
+ GalVertexAttribSize size,
+ GalVertexAttribType type,
+ bool isBgra)
{
- this.Index = Index;
- this.IsConst = IsConst;
- this.Data = Data;
- this.Offset = Offset;
- this.Size = Size;
- this.Type = Type;
- this.IsBgra = IsBgra;
+ Index = index;
+ IsConst = isConst;
+ Data = data;
+ Offset = offset;
+ Size = size;
+ Type = type;
+ IsBgra = isBgra;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/IGalConstBuffer.cs b/Ryujinx.Graphics/Gal/IGalConstBuffer.cs
index 0cdcc237..8c4e6d03 100644
--- a/Ryujinx.Graphics/Gal/IGalConstBuffer.cs
+++ b/Ryujinx.Graphics/Gal/IGalConstBuffer.cs
@@ -7,11 +7,11 @@ namespace Ryujinx.Graphics.Gal
void LockCache();
void UnlockCache();
- void Create(long Key, long Size);
+ void Create(long key, long size);
- bool IsCached(long Key, long Size);
+ bool IsCached(long key, long size);
- void SetData(long Key, long Size, IntPtr HostAddress);
- void SetData(long Key, byte[] Data);
+ void SetData(long key, long size, IntPtr hostAddress);
+ void SetData(long key, byte[] data);
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/IGalMemory.cs b/Ryujinx.Graphics/Gal/IGalMemory.cs
index e6762b50..78eb7154 100644
--- a/Ryujinx.Graphics/Gal/IGalMemory.cs
+++ b/Ryujinx.Graphics/Gal/IGalMemory.cs
@@ -1,7 +1,7 @@
namespace Ryujinx.Graphics.Gal
{
- public unsafe interface IGalMemory
+ public interface IGalMemory
{
- int ReadInt32(long Position);
+ int ReadInt32(long position);
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/IGalPipeline.cs b/Ryujinx.Graphics/Gal/IGalPipeline.cs
index cb470fb4..1ecb2602 100644
--- a/Ryujinx.Graphics/Gal/IGalPipeline.cs
+++ b/Ryujinx.Graphics/Gal/IGalPipeline.cs
@@ -2,10 +2,10 @@
{
public interface IGalPipeline
{
- void Bind(GalPipelineState State);
- void Unbind(GalPipelineState State);
+ void Bind(GalPipelineState state);
+ void Unbind(GalPipelineState state);
void ResetDepthMask();
- void ResetColorMask(int Index);
+ void ResetColorMask(int index);
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/IGalRasterizer.cs b/Ryujinx.Graphics/Gal/IGalRasterizer.cs
index 04f7aae5..33bdeaad 100644
--- a/Ryujinx.Graphics/Gal/IGalRasterizer.cs
+++ b/Ryujinx.Graphics/Gal/IGalRasterizer.cs
@@ -8,29 +8,29 @@ namespace Ryujinx.Graphics.Gal
void UnlockCaches();
void ClearBuffers(
- GalClearBufferFlags Flags,
- int Attachment,
- float Red,
- float Green,
- float Blue,
- float Alpha,
- float Depth,
- int Stencil);
+ GalClearBufferFlags flags,
+ int attachment,
+ float red,
+ float green,
+ float blue,
+ float alpha,
+ float depth,
+ int stencil);
- bool IsVboCached(long Key, long DataSize);
+ bool IsVboCached(long key, long dataSize);
- bool IsIboCached(long Key, long DataSize);
+ bool IsIboCached(long key, long dataSize);
- void CreateVbo(long Key, int DataSize, IntPtr HostAddress);
- void CreateVbo(long Key, byte[] Data);
+ void CreateVbo(long key, int dataSize, IntPtr hostAddress);
+ void CreateVbo(long key, byte[] data);
- void CreateIbo(long Key, int DataSize, IntPtr HostAddress);
- void CreateIbo(long Key, int DataSize, byte[] Buffer);
+ void CreateIbo(long key, int dataSize, IntPtr hostAddress);
+ void CreateIbo(long key, int dataSize, byte[] buffer);
- void SetIndexArray(int Size, GalIndexFormat Format);
+ void SetIndexArray(int size, GalIndexFormat format);
- void DrawArrays(int First, int Count, GalPrimitiveType PrimType);
+ void DrawArrays(int first, int count, GalPrimitiveType primType);
- void DrawElements(long IboKey, int First, int VertexBase, GalPrimitiveType PrimType);
+ void DrawElements(long iboKey, int first, int vertexBase, GalPrimitiveType primType);
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/IGalRenderTarget.cs b/Ryujinx.Graphics/Gal/IGalRenderTarget.cs
index 90cad856..c281fe06 100644
--- a/Ryujinx.Graphics/Gal/IGalRenderTarget.cs
+++ b/Ryujinx.Graphics/Gal/IGalRenderTarget.cs
@@ -4,42 +4,42 @@ namespace Ryujinx.Graphics.Gal
{
void Bind();
- void BindColor(long Key, int Attachment);
+ void BindColor(long key, int attachment);
- void UnbindColor(int Attachment);
+ void UnbindColor(int attachment);
- void BindZeta(long Key);
+ void BindZeta(long key);
void UnbindZeta();
- void Present(long Key);
+ void Present(long key);
- void SetMap(int[] Map);
+ void SetMap(int[] map);
- void SetTransform(bool FlipX, bool FlipY, int Top, int Left, int Right, int Bottom);
+ void SetTransform(bool flipX, bool flipY, int top, int left, int right, int bottom);
- void SetWindowSize(int Width, int Height);
+ void SetWindowSize(int width, int height);
- void SetViewport(int Attachment, int X, int Y, int Width, int Height);
+ void SetViewport(int attachment, int x, int y, int width, int height);
void Render();
void Copy(
- GalImage SrcImage,
- GalImage DstImage,
- long SrcKey,
- long DstKey,
- int SrcLayer,
- int DstLayer,
- int SrcX0,
- int SrcY0,
- int SrcX1,
- int SrcY1,
- int DstX0,
- int DstY0,
- int DstX1,
- int DstY1);
-
- void Reinterpret(long Key, GalImage NewImage);
+ GalImage srcImage,
+ GalImage dstImage,
+ long srcKey,
+ long dstKey,
+ int srcLayer,
+ int dstLayer,
+ int srcX0,
+ int srcY0,
+ int srcX1,
+ int srcY1,
+ int dstX0,
+ int dstY0,
+ int dstX1,
+ int dstY1);
+
+ void Reinterpret(long key, GalImage newImage);
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/IGalRenderer.cs b/Ryujinx.Graphics/Gal/IGalRenderer.cs
index 41e95a87..1acc4d03 100644
--- a/Ryujinx.Graphics/Gal/IGalRenderer.cs
+++ b/Ryujinx.Graphics/Gal/IGalRenderer.cs
@@ -4,7 +4,7 @@ namespace Ryujinx.Graphics.Gal
{
public interface IGalRenderer
{
- void QueueAction(Action ActionMthd);
+ void QueueAction(Action actionMthd);
void RunActions();
diff --git a/Ryujinx.Graphics/Gal/IGalShader.cs b/Ryujinx.Graphics/Gal/IGalShader.cs
index 4b951fa6..99cd4d76 100644
--- a/Ryujinx.Graphics/Gal/IGalShader.cs
+++ b/Ryujinx.Graphics/Gal/IGalShader.cs
@@ -4,16 +4,16 @@ namespace Ryujinx.Graphics.Gal
{
public interface IGalShader
{
- void Create(IGalMemory Memory, long Key, GalShaderType Type);
+ void Create(IGalMemory memory, long key, GalShaderType type);
- void Create(IGalMemory Memory, long VpAPos, long Key, GalShaderType Type);
+ void Create(IGalMemory memory, long vpAPos, long key, GalShaderType type);
- IEnumerable<ShaderDeclInfo> GetConstBufferUsage(long Key);
- IEnumerable<ShaderDeclInfo> GetTextureUsage(long Key);
+ IEnumerable<ShaderDeclInfo> GetConstBufferUsage(long key);
+ IEnumerable<ShaderDeclInfo> GetTextureUsage(long key);
- void Bind(long Key);
+ void Bind(long key);
- void Unbind(GalShaderType Type);
+ void Unbind(GalShaderType type);
void BindProgram();
}
diff --git a/Ryujinx.Graphics/Gal/IGalTexture.cs b/Ryujinx.Graphics/Gal/IGalTexture.cs
index de4ba9cb..23ce054a 100644
--- a/Ryujinx.Graphics/Gal/IGalTexture.cs
+++ b/Ryujinx.Graphics/Gal/IGalTexture.cs
@@ -5,14 +5,14 @@ namespace Ryujinx.Graphics.Gal
void LockCache();
void UnlockCache();
- void Create(long Key, int Size, GalImage Image);
+ void Create(long key, int size, GalImage image);
- void Create(long Key, byte[] Data, GalImage Image);
+ void Create(long key, byte[] data, GalImage image);
- bool TryGetImage(long Key, out GalImage Image);
+ bool TryGetImage(long key, out GalImage image);
- void Bind(long Key, int Index, GalImage Image);
+ void Bind(long key, int index, GalImage image);
- void SetSampler(GalImage Image, GalTextureSampler Sampler);
+ void SetSampler(GalImage image, GalTextureSampler sampler);
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/DeleteValueCallback.cs b/Ryujinx.Graphics/Gal/OpenGL/DeleteValueCallback.cs
index acd8d72f..63b626f1 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/DeleteValueCallback.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/DeleteValueCallback.cs
@@ -1,4 +1,4 @@
namespace Ryujinx.Graphics.Gal.OpenGL
{
- delegate void DeleteValue<T>(T Value);
+ delegate void DeleteValue<T>(T value);
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/ImageHandler.cs b/Ryujinx.Graphics/Gal/OpenGL/ImageHandler.cs
index 5714f3d8..d7f6f004 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/ImageHandler.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/ImageHandler.cs
@@ -18,10 +18,10 @@ namespace Ryujinx.Graphics.Gal.OpenGL
public bool HasDepth => ImageUtils.HasDepth(Image.Format);
public bool HasStencil => ImageUtils.HasStencil(Image.Format);
- public ImageHandler(int Handle, GalImage Image)
+ public ImageHandler(int handle, GalImage image)
{
- this.Handle = Handle;
- this.Image = Image;
+ Handle = handle;
+ Image = image;
}
}
}
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLCachedResource.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLCachedResource.cs
deleted file mode 100644
index 6e17872b..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLCachedResource.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-using Ryujinx.Common;
-using System;
-using System.Collections.Generic;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- class OGLCachedResource<T>
- {
- public delegate void DeleteValue(T Value);
-
- private const int MinTimeDelta = 5 * 60000;
- private const int MaxRemovalsPerRun = 10;
-
- private struct CacheBucket
- {
- public T Value { get; private set; }
-
- public LinkedListNode<long> Node { get; private set; }
-
- public long DataSize { get; private set; }
-
- public long Timestamp { get; private set; }
-
- public CacheBucket(T Value, long DataSize, LinkedListNode<long> Node)
- {
- this.Value = Value;
- this.DataSize = DataSize;
- this.Node = Node;
-
- Timestamp = PerformanceCounter.ElapsedMilliseconds;
- }
- }
-
- private Dictionary<long, CacheBucket> Cache;
-
- private LinkedList<long> SortedCache;
-
- private DeleteValue DeleteValueCallback;
-
- private Queue<T> DeletePending;
-
- private bool Locked;
-
- private long MaxSize;
- private long TotalSize;
-
- public OGLCachedResource(DeleteValue DeleteValueCallback, long MaxSize)
- {
- this.MaxSize = MaxSize;
-
- if (DeleteValueCallback == null)
- {
- throw new ArgumentNullException(nameof(DeleteValueCallback));
- }
-
- this.DeleteValueCallback = DeleteValueCallback;
-
- Cache = new Dictionary<long, CacheBucket>();
-
- SortedCache = new LinkedList<long>();
-
- DeletePending = new Queue<T>();
- }
-
- public void Lock()
- {
- Locked = true;
- }
-
- public void Unlock()
- {
- Locked = false;
-
- while (DeletePending.TryDequeue(out T Value))
- {
- DeleteValueCallback(Value);
- }
-
- ClearCacheIfNeeded();
- }
-
- public void AddOrUpdate(long Key, T Value, long Size)
- {
- if (!Locked)
- {
- ClearCacheIfNeeded();
- }
-
- LinkedListNode<long> Node = SortedCache.AddLast(Key);
-
- CacheBucket NewBucket = new CacheBucket(Value, Size, Node);
-
- if (Cache.TryGetValue(Key, out CacheBucket Bucket))
- {
- if (Locked)
- {
- DeletePending.Enqueue(Bucket.Value);
- }
- else
- {
- DeleteValueCallback(Bucket.Value);
- }
-
- SortedCache.Remove(Bucket.Node);
-
- TotalSize -= Bucket.DataSize;
-
- Cache[Key] = NewBucket;
- }
- else
- {
- Cache.Add(Key, NewBucket);
- }
-
- TotalSize += Size;
- }
-
- public bool TryGetValue(long Key, out T Value)
- {
- if (Cache.TryGetValue(Key, out CacheBucket Bucket))
- {
- Value = Bucket.Value;
-
- SortedCache.Remove(Bucket.Node);
-
- LinkedListNode<long> Node = SortedCache.AddLast(Key);
-
- Cache[Key] = new CacheBucket(Value, Bucket.DataSize, Node);
-
- return true;
- }
-
- Value = default(T);
-
- return false;
- }
-
- public bool TryGetSize(long Key, out long Size)
- {
- if (Cache.TryGetValue(Key, out CacheBucket Bucket))
- {
- Size = Bucket.DataSize;
-
- return true;
- }
-
- Size = 0;
-
- return false;
- }
-
- private void ClearCacheIfNeeded()
- {
- long Timestamp = PerformanceCounter.ElapsedMilliseconds;
-
- int Count = 0;
-
- while (Count++ < MaxRemovalsPerRun)
- {
- LinkedListNode<long> Node = SortedCache.First;
-
- if (Node == null)
- {
- break;
- }
-
- CacheBucket Bucket = Cache[Node.Value];
-
- long TimeDelta = Timestamp - Bucket.Timestamp;
-
- if (TimeDelta <= MinTimeDelta && !UnderMemoryPressure())
- {
- break;
- }
-
- SortedCache.Remove(Node);
-
- Cache.Remove(Node.Value);
-
- DeleteValueCallback(Bucket.Value);
-
- TotalSize -= Bucket.DataSize;
- }
- }
-
- private bool UnderMemoryPressure()
- {
- return TotalSize >= MaxSize;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLConstBuffer.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLConstBuffer.cs
deleted file mode 100644
index a12681c7..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLConstBuffer.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using System;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- class OGLConstBuffer : IGalConstBuffer
- {
- private const long MaxConstBufferCacheSize = 64 * 1024 * 1024;
-
- private OGLCachedResource<OGLStreamBuffer> Cache;
-
- public OGLConstBuffer()
- {
- Cache = new OGLCachedResource<OGLStreamBuffer>(DeleteBuffer, MaxConstBufferCacheSize);
- }
-
- public void LockCache()
- {
- Cache.Lock();
- }
-
- public void UnlockCache()
- {
- Cache.Unlock();
- }
-
- public void Create(long Key, long Size)
- {
- OGLStreamBuffer Buffer = new OGLStreamBuffer(BufferTarget.UniformBuffer, Size);
-
- Cache.AddOrUpdate(Key, Buffer, Size);
- }
-
- public bool IsCached(long Key, long Size)
- {
- return Cache.TryGetSize(Key, out long CachedSize) && CachedSize == Size;
- }
-
- public void SetData(long Key, long Size, IntPtr HostAddress)
- {
- if (Cache.TryGetValue(Key, out OGLStreamBuffer Buffer))
- {
- Buffer.SetData(Size, HostAddress);
- }
- }
-
- public void SetData(long Key, byte[] Data)
- {
- if (Cache.TryGetValue(Key, out OGLStreamBuffer Buffer))
- {
- Buffer.SetData(Data);
- }
- }
-
- public bool TryGetUbo(long Key, out int UboHandle)
- {
- if (Cache.TryGetValue(Key, out OGLStreamBuffer Buffer))
- {
- UboHandle = Buffer.Handle;
-
- return true;
- }
-
- UboHandle = 0;
-
- return false;
- }
-
- private static void DeleteBuffer(OGLStreamBuffer Buffer)
- {
- Buffer.Dispose();
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs
deleted file mode 100644
index eb06f83c..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLExtension.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using Ryujinx.Common.Logging;
-using System;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- static class OGLExtension
- {
- // Private lazy backing variables
- private static Lazy<bool> s_EnhancedLayouts = new Lazy<bool>(() => HasExtension("GL_ARB_enhanced_layouts"));
- private static Lazy<bool> s_TextureMirrorClamp = new Lazy<bool>(() => HasExtension("GL_EXT_texture_mirror_clamp"));
- private static Lazy<bool> s_ViewportArray = new Lazy<bool>(() => HasExtension("GL_ARB_viewport_array"));
-
- private static Lazy<bool> s_NvidiaDriver = new Lazy<bool>(() => IsNvidiaDriver());
-
- // Public accessors
- public static bool EnhancedLayouts => s_EnhancedLayouts.Value;
- public static bool TextureMirrorClamp => s_TextureMirrorClamp.Value;
- public static bool ViewportArray => s_ViewportArray.Value;
-
- public static bool NvidiaDrvier => s_NvidiaDriver.Value;
-
- private static bool HasExtension(string Name)
- {
- int NumExtensions = GL.GetInteger(GetPName.NumExtensions);
-
- for (int Extension = 0; Extension < NumExtensions; Extension++)
- {
- if (GL.GetString(StringNameIndexed.Extensions, Extension) == Name)
- {
- return true;
- }
- }
-
- Logger.PrintInfo(LogClass.Gpu, $"OpenGL extension {Name} unavailable. You may experience some performance degredation");
-
- return false;
- }
-
- private static bool IsNvidiaDriver()
- {
- return GL.GetString(StringName.Vendor).Equals("NVIDIA Corporation");
- }
-
- public static class Required
- {
- // Public accessors
- public static bool EnhancedLayouts => s_EnhancedLayoutsRequired.Value;
- public static bool TextureMirrorClamp => s_TextureMirrorClampRequired.Value;
- public static bool ViewportArray => s_ViewportArrayRequired.Value;
-
- // Private lazy backing variables
- private static Lazy<bool> s_EnhancedLayoutsRequired = new Lazy<bool>(() => HasExtensionRequired(OGLExtension.EnhancedLayouts, "GL_ARB_enhanced_layouts"));
- private static Lazy<bool> s_TextureMirrorClampRequired = new Lazy<bool>(() => HasExtensionRequired(OGLExtension.TextureMirrorClamp, "GL_EXT_texture_mirror_clamp"));
- private static Lazy<bool> s_ViewportArrayRequired = new Lazy<bool>(() => HasExtensionRequired(OGLExtension.ViewportArray, "GL_ARB_viewport_array"));
-
- private static bool HasExtensionRequired(bool Value, string Name)
- {
- if (Value)
- {
- return true;
- }
-
- Logger.PrintWarning(LogClass.Gpu, $"Required OpenGL extension {Name} unavailable. You may experience some rendering issues");
-
- return false;
- }
- }
- }
-}
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLLimit.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLLimit.cs
deleted file mode 100644
index 6c385bc4..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLLimit.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using System;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- static class OGLLimit
- {
- private static Lazy<int> s_MaxUboSize = new Lazy<int>(() => GL.GetInteger(GetPName.MaxUniformBlockSize));
-
- public static int MaxUboSize => s_MaxUboSize.Value;
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
deleted file mode 100644
index c4015d02..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
+++ /dev/null
@@ -1,207 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using System;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- class OGLRasterizer : IGalRasterizer
- {
- private const long MaxVertexBufferCacheSize = 128 * 1024 * 1024;
- private const long MaxIndexBufferCacheSize = 64 * 1024 * 1024;
-
- private int[] VertexBuffers;
-
- private OGLCachedResource<int> VboCache;
- private OGLCachedResource<int> IboCache;
-
- private struct IbInfo
- {
- public int Count;
- public int ElemSizeLog2;
-
- public DrawElementsType Type;
- }
-
- private IbInfo IndexBuffer;
-
- public OGLRasterizer()
- {
- VertexBuffers = new int[32];
-
- VboCache = new OGLCachedResource<int>(GL.DeleteBuffer, MaxVertexBufferCacheSize);
- IboCache = new OGLCachedResource<int>(GL.DeleteBuffer, MaxIndexBufferCacheSize);
-
- IndexBuffer = new IbInfo();
- }
-
- public void LockCaches()
- {
- VboCache.Lock();
- IboCache.Lock();
- }
-
- public void UnlockCaches()
- {
- VboCache.Unlock();
- IboCache.Unlock();
- }
-
- public void ClearBuffers(
- GalClearBufferFlags Flags,
- int Attachment,
- float Red,
- float Green,
- float Blue,
- float Alpha,
- float Depth,
- int Stencil)
- {
- GL.ColorMask(
- Attachment,
- Flags.HasFlag(GalClearBufferFlags.ColorRed),
- Flags.HasFlag(GalClearBufferFlags.ColorGreen),
- Flags.HasFlag(GalClearBufferFlags.ColorBlue),
- Flags.HasFlag(GalClearBufferFlags.ColorAlpha));
-
- GL.ClearBuffer(ClearBuffer.Color, Attachment, new float[] { Red, Green, Blue, Alpha });
-
- GL.ColorMask(Attachment, true, true, true, true);
- GL.DepthMask(true);
-
- if (Flags.HasFlag(GalClearBufferFlags.Depth))
- {
- GL.ClearBuffer(ClearBuffer.Depth, 0, ref Depth);
- }
-
- if (Flags.HasFlag(GalClearBufferFlags.Stencil))
- {
- GL.ClearBuffer(ClearBuffer.Stencil, 0, ref Stencil);
- }
- }
-
- public bool IsVboCached(long Key, long DataSize)
- {
- return VboCache.TryGetSize(Key, out long Size) && Size == DataSize;
- }
-
- public bool IsIboCached(long Key, long DataSize)
- {
- return IboCache.TryGetSize(Key, out long Size) && Size == DataSize;
- }
-
- public void CreateVbo(long Key, int DataSize, IntPtr HostAddress)
- {
- int Handle = GL.GenBuffer();
-
- VboCache.AddOrUpdate(Key, Handle, DataSize);
-
- IntPtr Length = new IntPtr(DataSize);
-
- GL.BindBuffer(BufferTarget.ArrayBuffer, Handle);
- GL.BufferData(BufferTarget.ArrayBuffer, Length, HostAddress, BufferUsageHint.StreamDraw);
- }
-
- public void CreateVbo(long Key, byte[] Data)
- {
- int Handle = GL.GenBuffer();
-
- VboCache.AddOrUpdate(Key, Handle, Data.Length);
-
- IntPtr Length = new IntPtr(Data.Length);
-
- GL.BindBuffer(BufferTarget.ArrayBuffer, Handle);
- GL.BufferData(BufferTarget.ArrayBuffer, Length, Data, BufferUsageHint.StreamDraw);
- }
-
- public void CreateIbo(long Key, int DataSize, IntPtr HostAddress)
- {
- int Handle = GL.GenBuffer();
-
- IboCache.AddOrUpdate(Key, Handle, (uint)DataSize);
-
- IntPtr Length = new IntPtr(DataSize);
-
- GL.BindBuffer(BufferTarget.ElementArrayBuffer, Handle);
- GL.BufferData(BufferTarget.ElementArrayBuffer, Length, HostAddress, BufferUsageHint.StreamDraw);
- }
-
- public void CreateIbo(long Key, int DataSize, byte[] Buffer)
- {
- int Handle = GL.GenBuffer();
-
- IboCache.AddOrUpdate(Key, Handle, DataSize);
-
- IntPtr Length = new IntPtr(Buffer.Length);
-
- GL.BindBuffer(BufferTarget.ElementArrayBuffer, Handle);
- GL.BufferData(BufferTarget.ElementArrayBuffer, Length, Buffer, BufferUsageHint.StreamDraw);
- }
-
- public void SetIndexArray(int Size, GalIndexFormat Format)
- {
- IndexBuffer.Type = OGLEnumConverter.GetDrawElementsType(Format);
-
- IndexBuffer.Count = Size >> (int)Format;
-
- IndexBuffer.ElemSizeLog2 = (int)Format;
- }
-
- public void DrawArrays(int First, int Count, GalPrimitiveType PrimType)
- {
- if (Count == 0)
- {
- return;
- }
-
- if (PrimType == GalPrimitiveType.Quads)
- {
- for (int Offset = 0; Offset < Count; Offset += 4)
- {
- GL.DrawArrays(PrimitiveType.TriangleFan, First + Offset, 4);
- }
- }
- else if (PrimType == GalPrimitiveType.QuadStrip)
- {
- GL.DrawArrays(PrimitiveType.TriangleFan, First, 4);
-
- for (int Offset = 2; Offset < Count; Offset += 2)
- {
- GL.DrawArrays(PrimitiveType.TriangleFan, First + Offset, 4);
- }
- }
- else
- {
- GL.DrawArrays(OGLEnumConverter.GetPrimitiveType(PrimType), First, Count);
- }
- }
-
- public void DrawElements(long IboKey, int First, int VertexBase, GalPrimitiveType PrimType)
- {
- if (!IboCache.TryGetValue(IboKey, out int IboHandle))
- {
- return;
- }
-
- PrimitiveType Mode = OGLEnumConverter.GetPrimitiveType(PrimType);
-
- GL.BindBuffer(BufferTarget.ElementArrayBuffer, IboHandle);
-
- First <<= IndexBuffer.ElemSizeLog2;
-
- if (VertexBase != 0)
- {
- IntPtr Indices = new IntPtr(First);
-
- GL.DrawElementsBaseVertex(Mode, IndexBuffer.Count, IndexBuffer.Type, Indices, VertexBase);
- }
- else
- {
- GL.DrawElements(Mode, IndexBuffer.Count, IndexBuffer.Type, First);
- }
- }
-
- public bool TryGetVbo(long VboKey, out int VboHandle)
- {
- return VboCache.TryGetValue(VboKey, out VboHandle);
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLRenderTarget.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLRenderTarget.cs
deleted file mode 100644
index 53cfd4a6..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLRenderTarget.cs
+++ /dev/null
@@ -1,549 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using Ryujinx.Graphics.Texture;
-using System;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- class OGLRenderTarget : IGalRenderTarget
- {
- private const int NativeWidth = 1280;
- private const int NativeHeight = 720;
-
- private const int RenderTargetsCount = GalPipelineState.RenderTargetsCount;
-
- private struct Rect
- {
- public int X { get; private set; }
- public int Y { get; private set; }
- public int Width { get; private set; }
- public int Height { get; private set; }
-
- public Rect(int X, int Y, int Width, int Height)
- {
- this.X = X;
- this.Y = Y;
- this.Width = Width;
- this.Height = Height;
- }
- }
-
- private class FrameBufferAttachments
- {
- public int MapCount { get; set; }
-
- public DrawBuffersEnum[] Map { get; private set; }
-
- public long[] Colors { get; private set; }
-
- public long Zeta { get; set; }
-
- public FrameBufferAttachments()
- {
- Colors = new long[RenderTargetsCount];
-
- Map = new DrawBuffersEnum[RenderTargetsCount];
- }
-
- public void Update(FrameBufferAttachments Source)
- {
- for (int Index = 0; Index < RenderTargetsCount; Index++)
- {
- Map[Index] = Source.Map[Index];
-
- Colors[Index] = Source.Colors[Index];
- }
-
- MapCount = Source.MapCount;
- Zeta = Source.Zeta;
- }
- }
-
- private int[] ColorHandles;
- private int ZetaHandle;
-
- private OGLTexture Texture;
-
- private ImageHandler ReadTex;
-
- private Rect Window;
-
- private float[] Viewports;
-
- private bool FlipX;
- private bool FlipY;
-
- private int CropTop;
- private int CropLeft;
- private int CropRight;
- private int CropBottom;
-
- //This framebuffer is used to attach guest rendertargets,
- //think of it as a dummy OpenGL VAO
- private int DummyFrameBuffer;
-
- //These framebuffers are used to blit images
- private int SrcFb;
- private int DstFb;
-
- private FrameBufferAttachments Attachments;
- private FrameBufferAttachments OldAttachments;
-
- private int CopyPBO;
-
- public bool FramebufferSrgb { get; set; }
-
- public OGLRenderTarget(OGLTexture Texture)
- {
- Attachments = new FrameBufferAttachments();
-
- OldAttachments = new FrameBufferAttachments();
-
- ColorHandles = new int[RenderTargetsCount];
-
- Viewports = new float[RenderTargetsCount * 4];
-
- this.Texture = Texture;
-
- Texture.TextureDeleted += TextureDeletionHandler;
- }
-
- private void TextureDeletionHandler(object Sender, int Handle)
- {
- //Texture was deleted, the handle is no longer valid, so
- //reset all uses of this handle on a render target.
- for (int Attachment = 0; Attachment < RenderTargetsCount; Attachment++)
- {
- if (ColorHandles[Attachment] == Handle)
- {
- ColorHandles[Attachment] = 0;
- }
- }
-
- if (ZetaHandle == Handle)
- {
- ZetaHandle = 0;
- }
- }
-
- public void Bind()
- {
- if (DummyFrameBuffer == 0)
- {
- DummyFrameBuffer = GL.GenFramebuffer();
- }
-
- GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, DummyFrameBuffer);
-
- ImageHandler CachedImage;
-
- for (int Attachment = 0; Attachment < RenderTargetsCount; Attachment++)
- {
- long Key = Attachments.Colors[Attachment];
-
- int Handle = 0;
-
- if (Key != 0 && Texture.TryGetImageHandler(Key, out CachedImage))
- {
- Handle = CachedImage.Handle;
- }
-
- if (Handle == ColorHandles[Attachment])
- {
- continue;
- }
-
- GL.FramebufferTexture(
- FramebufferTarget.DrawFramebuffer,
- FramebufferAttachment.ColorAttachment0 + Attachment,
- Handle,
- 0);
-
- ColorHandles[Attachment] = Handle;
- }
-
- if (Attachments.Zeta != 0 && Texture.TryGetImageHandler(Attachments.Zeta, out CachedImage))
- {
- if (CachedImage.Handle != ZetaHandle)
- {
- if (CachedImage.HasDepth && CachedImage.HasStencil)
- {
- GL.FramebufferTexture(
- FramebufferTarget.DrawFramebuffer,
- FramebufferAttachment.DepthStencilAttachment,
- CachedImage.Handle,
- 0);
- }
- else if (CachedImage.HasDepth)
- {
- GL.FramebufferTexture(
- FramebufferTarget.DrawFramebuffer,
- FramebufferAttachment.DepthAttachment,
- CachedImage.Handle,
- 0);
-
- GL.FramebufferTexture(
- FramebufferTarget.DrawFramebuffer,
- FramebufferAttachment.StencilAttachment,
- 0,
- 0);
- }
- else
- {
- throw new InvalidOperationException("Invalid image format \"" + CachedImage.Format + "\" used as Zeta!");
- }
-
- ZetaHandle = CachedImage.Handle;
- }
- }
- else if (ZetaHandle != 0)
- {
- GL.FramebufferTexture(
- FramebufferTarget.DrawFramebuffer,
- FramebufferAttachment.DepthStencilAttachment,
- 0,
- 0);
-
- ZetaHandle = 0;
- }
-
- if (OGLExtension.ViewportArray)
- {
- GL.ViewportArray(0, RenderTargetsCount, Viewports);
- }
- else
- {
- GL.Viewport(
- (int)Viewports[0],
- (int)Viewports[1],
- (int)Viewports[2],
- (int)Viewports[3]);
- }
-
- if (Attachments.MapCount > 1)
- {
- GL.DrawBuffers(Attachments.MapCount, Attachments.Map);
- }
- else if (Attachments.MapCount == 1)
- {
- GL.DrawBuffer((DrawBufferMode)Attachments.Map[0]);
- }
- else
- {
- GL.DrawBuffer(DrawBufferMode.None);
- }
-
- OldAttachments.Update(Attachments);
- }
-
- public void BindColor(long Key, int Attachment)
- {
- Attachments.Colors[Attachment] = Key;
- }
-
- public void UnbindColor(int Attachment)
- {
- Attachments.Colors[Attachment] = 0;
- }
-
- public void BindZeta(long Key)
- {
- Attachments.Zeta = Key;
- }
-
- public void UnbindZeta()
- {
- Attachments.Zeta = 0;
- }
-
- public void Present(long Key)
- {
- Texture.TryGetImageHandler(Key, out ReadTex);
- }
-
- public void SetMap(int[] Map)
- {
- if (Map != null)
- {
- Attachments.MapCount = Map.Length;
-
- for (int Attachment = 0; Attachment < Attachments.MapCount; Attachment++)
- {
- Attachments.Map[Attachment] = DrawBuffersEnum.ColorAttachment0 + Map[Attachment];
- }
- }
- else
- {
- Attachments.MapCount = 0;
- }
- }
-
- public void SetTransform(bool FlipX, bool FlipY, int Top, int Left, int Right, int Bottom)
- {
- this.FlipX = FlipX;
- this.FlipY = FlipY;
-
- CropTop = Top;
- CropLeft = Left;
- CropRight = Right;
- CropBottom = Bottom;
- }
-
- public void SetWindowSize(int Width, int Height)
- {
- Window = new Rect(0, 0, Width, Height);
- }
-
- public void SetViewport(int Attachment, int X, int Y, int Width, int Height)
- {
- int Offset = Attachment * 4;
-
- Viewports[Offset + 0] = X;
- Viewports[Offset + 1] = Y;
- Viewports[Offset + 2] = Width;
- Viewports[Offset + 3] = Height;
- }
-
- public void Render()
- {
- if (ReadTex == null)
- {
- return;
- }
-
- int SrcX0, SrcX1, SrcY0, SrcY1;
-
- if (CropLeft == 0 && CropRight == 0)
- {
- SrcX0 = 0;
- SrcX1 = ReadTex.Width;
- }
- else
- {
- SrcX0 = CropLeft;
- SrcX1 = CropRight;
- }
-
- if (CropTop == 0 && CropBottom == 0)
- {
- SrcY0 = 0;
- SrcY1 = ReadTex.Height;
- }
- else
- {
- SrcY0 = CropTop;
- SrcY1 = CropBottom;
- }
-
- float RatioX = MathF.Min(1f, (Window.Height * (float)NativeWidth) / ((float)NativeHeight * Window.Width));
- float RatioY = MathF.Min(1f, (Window.Width * (float)NativeHeight) / ((float)NativeWidth * Window.Height));
-
- int DstWidth = (int)(Window.Width * RatioX);
- int DstHeight = (int)(Window.Height * RatioY);
-
- int DstPaddingX = (Window.Width - DstWidth) / 2;
- int DstPaddingY = (Window.Height - DstHeight) / 2;
-
- int DstX0 = FlipX ? Window.Width - DstPaddingX : DstPaddingX;
- int DstX1 = FlipX ? DstPaddingX : Window.Width - DstPaddingX;
-
- int DstY0 = FlipY ? DstPaddingY : Window.Height - DstPaddingY;
- int DstY1 = FlipY ? Window.Height - DstPaddingY : DstPaddingY;
-
- GL.Viewport(0, 0, Window.Width, Window.Height);
-
- if (SrcFb == 0)
- {
- SrcFb = GL.GenFramebuffer();
- }
-
- GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, SrcFb);
- GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, 0);
-
- GL.FramebufferTexture(FramebufferTarget.ReadFramebuffer, FramebufferAttachment.ColorAttachment0, ReadTex.Handle, 0);
-
- GL.ReadBuffer(ReadBufferMode.ColorAttachment0);
-
- GL.Clear(ClearBufferMask.ColorBufferBit);
-
- GL.Disable(EnableCap.FramebufferSrgb);
-
- GL.BlitFramebuffer(
- SrcX0,
- SrcY0,
- SrcX1,
- SrcY1,
- DstX0,
- DstY0,
- DstX1,
- DstY1,
- ClearBufferMask.ColorBufferBit,
- BlitFramebufferFilter.Linear);
-
- if (FramebufferSrgb)
- {
- GL.Enable(EnableCap.FramebufferSrgb);
- }
- }
-
- public void Copy(
- GalImage SrcImage,
- GalImage DstImage,
- long SrcKey,
- long DstKey,
- int SrcLayer,
- int DstLayer,
- int SrcX0,
- int SrcY0,
- int SrcX1,
- int SrcY1,
- int DstX0,
- int DstY0,
- int DstX1,
- int DstY1)
- {
- if (Texture.TryGetImageHandler(SrcKey, out ImageHandler SrcTex) &&
- Texture.TryGetImageHandler(DstKey, out ImageHandler DstTex))
- {
- if (SrcTex.HasColor != DstTex.HasColor ||
- SrcTex.HasDepth != DstTex.HasDepth ||
- SrcTex.HasStencil != DstTex.HasStencil)
- {
- throw new NotImplementedException();
- }
-
- if (SrcFb == 0)
- {
- SrcFb = GL.GenFramebuffer();
- }
-
- if (DstFb == 0)
- {
- DstFb = GL.GenFramebuffer();
- }
-
- GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, SrcFb);
- GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, DstFb);
-
- FramebufferAttachment Attachment = GetAttachment(SrcTex);
-
- if (ImageUtils.IsArray(SrcImage.TextureTarget) && SrcLayer > 0)
- {
- GL.FramebufferTextureLayer(FramebufferTarget.ReadFramebuffer, Attachment, SrcTex.Handle, 0, SrcLayer);
- }
- else
- {
- GL.FramebufferTexture(FramebufferTarget.ReadFramebuffer, Attachment, SrcTex.Handle, 0);
- }
-
- if (ImageUtils.IsArray(DstImage.TextureTarget) && DstLayer > 0)
- {
- GL.FramebufferTextureLayer(FramebufferTarget.DrawFramebuffer, Attachment, DstTex.Handle, 0, DstLayer);
- }
- else
- {
- GL.FramebufferTexture(FramebufferTarget.DrawFramebuffer, Attachment, DstTex.Handle, 0);
- }
-
-
- BlitFramebufferFilter Filter = BlitFramebufferFilter.Nearest;
-
- if (SrcTex.HasColor)
- {
- GL.DrawBuffer(DrawBufferMode.ColorAttachment0);
-
- Filter = BlitFramebufferFilter.Linear;
- }
-
- ClearBufferMask Mask = GetClearMask(SrcTex);
-
- GL.BlitFramebuffer(SrcX0, SrcY0, SrcX1, SrcY1, DstX0, DstY0, DstX1, DstY1, Mask, Filter);
- }
- }
-
- public void Reinterpret(long Key, GalImage NewImage)
- {
- if (!Texture.TryGetImage(Key, out GalImage OldImage))
- {
- return;
- }
-
- if (NewImage.Format == OldImage.Format &&
- NewImage.Width == OldImage.Width &&
- NewImage.Height == OldImage.Height &&
- NewImage.Depth == OldImage.Depth &&
- NewImage.LayerCount == OldImage.LayerCount &&
- NewImage.TextureTarget == OldImage.TextureTarget)
- {
- return;
- }
-
- if (CopyPBO == 0)
- {
- CopyPBO = GL.GenBuffer();
- }
-
- GL.BindBuffer(BufferTarget.PixelPackBuffer, CopyPBO);
-
- //The buffer should be large enough to hold the largest texture.
- int BufferSize = Math.Max(ImageUtils.GetSize(OldImage),
- ImageUtils.GetSize(NewImage));
-
- GL.BufferData(BufferTarget.PixelPackBuffer, BufferSize, IntPtr.Zero, BufferUsageHint.StreamCopy);
-
- if (!Texture.TryGetImageHandler(Key, out ImageHandler CachedImage))
- {
- throw new InvalidOperationException();
- }
-
- (_, PixelFormat Format, PixelType Type) = OGLEnumConverter.GetImageFormat(CachedImage.Format);
-
- TextureTarget Target = ImageUtils.GetTextureTarget(NewImage.TextureTarget);
-
- GL.BindTexture(Target, CachedImage.Handle);
-
- GL.GetTexImage(Target, 0, Format, Type, IntPtr.Zero);
-
- GL.BindBuffer(BufferTarget.PixelPackBuffer, 0);
- GL.BindBuffer(BufferTarget.PixelUnpackBuffer, CopyPBO);
-
- GL.PixelStore(PixelStoreParameter.UnpackRowLength, OldImage.Width);
-
- Texture.Create(Key, ImageUtils.GetSize(NewImage), NewImage);
-
- GL.PixelStore(PixelStoreParameter.UnpackRowLength, 0);
-
- GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0);
- }
-
- private static FramebufferAttachment GetAttachment(ImageHandler CachedImage)
- {
- if (CachedImage.HasColor)
- {
- return FramebufferAttachment.ColorAttachment0;
- }
- else if (CachedImage.HasDepth && CachedImage.HasStencil)
- {
- return FramebufferAttachment.DepthStencilAttachment;
- }
- else if (CachedImage.HasDepth)
- {
- return FramebufferAttachment.DepthAttachment;
- }
- else if (CachedImage.HasStencil)
- {
- return FramebufferAttachment.StencilAttachment;
- }
- else
- {
- throw new InvalidOperationException();
- }
- }
-
- private static ClearBufferMask GetClearMask(ImageHandler CachedImage)
- {
- return (CachedImage.HasColor ? ClearBufferMask.ColorBufferBit : 0) |
- (CachedImage.HasDepth ? ClearBufferMask.DepthBufferBit : 0) |
- (CachedImage.HasStencil ? ClearBufferMask.StencilBufferBit : 0);
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLRenderer.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLRenderer.cs
deleted file mode 100644
index 14fb9018..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLRenderer.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-using System.Collections.Concurrent;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- public class OGLRenderer : IGalRenderer
- {
- public IGalConstBuffer Buffer { get; private set; }
-
- public IGalRenderTarget RenderTarget { get; private set; }
-
- public IGalRasterizer Rasterizer { get; private set; }
-
- public IGalShader Shader { get; private set; }
-
- public IGalPipeline Pipeline { get; private set; }
-
- public IGalTexture Texture { get; private set; }
-
- private ConcurrentQueue<Action> ActionsQueue;
-
- public OGLRenderer()
- {
- Buffer = new OGLConstBuffer();
-
- Texture = new OGLTexture();
-
- RenderTarget = new OGLRenderTarget(Texture as OGLTexture);
-
- Rasterizer = new OGLRasterizer();
-
- Shader = new OGLShader(Buffer as OGLConstBuffer);
-
- Pipeline = new OGLPipeline(
- Buffer as OGLConstBuffer,
- RenderTarget as OGLRenderTarget,
- Rasterizer as OGLRasterizer,
- Shader as OGLShader);
-
- ActionsQueue = new ConcurrentQueue<Action>();
- }
-
- public void QueueAction(Action ActionMthd)
- {
- ActionsQueue.Enqueue(ActionMthd);
- }
-
- public void RunActions()
- {
- int Count = ActionsQueue.Count;
-
- while (Count-- > 0 && ActionsQueue.TryDequeue(out Action RenderAction))
- {
- RenderAction();
- }
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs
deleted file mode 100644
index dc168ff9..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs
+++ /dev/null
@@ -1,298 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using Ryujinx.Graphics.Gal.Shader;
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- class OGLShader : IGalShader
- {
- public const int ReservedCbufCount = 1;
-
- private const int ExtraDataSize = 4;
-
- public OGLShaderProgram Current;
-
- private ConcurrentDictionary<long, OGLShaderStage> Stages;
-
- private Dictionary<OGLShaderProgram, int> Programs;
-
- public int CurrentProgramHandle { get; private set; }
-
- private OGLConstBuffer Buffer;
-
- private int ExtraUboHandle;
-
- public OGLShader(OGLConstBuffer Buffer)
- {
- this.Buffer = Buffer;
-
- Stages = new ConcurrentDictionary<long, OGLShaderStage>();
-
- Programs = new Dictionary<OGLShaderProgram, int>();
- }
-
- public void Create(IGalMemory Memory, long Key, GalShaderType Type)
- {
- Stages.GetOrAdd(Key, (Stage) => ShaderStageFactory(Memory, Key, 0, false, Type));
- }
-
- public void Create(IGalMemory Memory, long VpAPos, long Key, GalShaderType Type)
- {
- Stages.GetOrAdd(Key, (Stage) => ShaderStageFactory(Memory, VpAPos, Key, true, Type));
- }
-
- private OGLShaderStage ShaderStageFactory(
- IGalMemory Memory,
- long Position,
- long PositionB,
- bool IsDualVp,
- GalShaderType Type)
- {
- GlslProgram Program;
-
- GlslDecompiler Decompiler = new GlslDecompiler(OGLLimit.MaxUboSize, OGLExtension.NvidiaDrvier);
-
- int ShaderDumpIndex = ShaderDumper.DumpIndex;
-
- if (IsDualVp)
- {
- ShaderDumper.Dump(Memory, Position, Type, "a");
- ShaderDumper.Dump(Memory, PositionB, Type, "b");
-
- Program = Decompiler.Decompile(Memory, Position, PositionB, Type);
- }
- else
- {
- ShaderDumper.Dump(Memory, Position, Type);
-
- Program = Decompiler.Decompile(Memory, Position, Type);
- }
-
- string Code = Program.Code;
-
- if (ShaderDumper.IsDumpEnabled())
- {
- Code = "//Shader " + ShaderDumpIndex + Environment.NewLine + Code;
- }
-
- return new OGLShaderStage(Type, Code, Program.Uniforms, Program.Textures);
- }
-
- public IEnumerable<ShaderDeclInfo> GetConstBufferUsage(long Key)
- {
- if (Stages.TryGetValue(Key, out OGLShaderStage Stage))
- {
- return Stage.ConstBufferUsage;
- }
-
- return Enumerable.Empty<ShaderDeclInfo>();
- }
-
- public IEnumerable<ShaderDeclInfo> GetTextureUsage(long Key)
- {
- if (Stages.TryGetValue(Key, out OGLShaderStage Stage))
- {
- return Stage.TextureUsage;
- }
-
- return Enumerable.Empty<ShaderDeclInfo>();
- }
-
- public unsafe void SetExtraData(float FlipX, float FlipY, int Instance)
- {
- BindProgram();
-
- EnsureExtraBlock();
-
- GL.BindBuffer(BufferTarget.UniformBuffer, ExtraUboHandle);
-
- float* Data = stackalloc float[ExtraDataSize];
- Data[0] = FlipX;
- Data[1] = FlipY;
- Data[2] = BitConverter.Int32BitsToSingle(Instance);
-
- //Invalidate buffer
- GL.BufferData(BufferTarget.UniformBuffer, ExtraDataSize * sizeof(float), IntPtr.Zero, BufferUsageHint.StreamDraw);
-
- GL.BufferSubData(BufferTarget.UniformBuffer, IntPtr.Zero, ExtraDataSize * sizeof(float), (IntPtr)Data);
- }
-
- public void Bind(long Key)
- {
- if (Stages.TryGetValue(Key, out OGLShaderStage Stage))
- {
- Bind(Stage);
- }
- }
-
- private void Bind(OGLShaderStage Stage)
- {
- if (Stage.Type == GalShaderType.Geometry)
- {
- //Enhanced layouts are required for Geometry shaders
- //skip this stage if current driver has no ARB_enhanced_layouts
- if (!OGLExtension.EnhancedLayouts)
- {
- return;
- }
- }
-
- switch (Stage.Type)
- {
- case GalShaderType.Vertex: Current.Vertex = Stage; break;
- case GalShaderType.TessControl: Current.TessControl = Stage; break;
- case GalShaderType.TessEvaluation: Current.TessEvaluation = Stage; break;
- case GalShaderType.Geometry: Current.Geometry = Stage; break;
- case GalShaderType.Fragment: Current.Fragment = Stage; break;
- }
- }
-
- public void Unbind(GalShaderType Type)
- {
- switch (Type)
- {
- case GalShaderType.Vertex: Current.Vertex = null; break;
- case GalShaderType.TessControl: Current.TessControl = null; break;
- case GalShaderType.TessEvaluation: Current.TessEvaluation = null; break;
- case GalShaderType.Geometry: Current.Geometry = null; break;
- case GalShaderType.Fragment: Current.Fragment = null; break;
- }
- }
-
- public void BindProgram()
- {
- if (Current.Vertex == null ||
- Current.Fragment == null)
- {
- return;
- }
-
- if (!Programs.TryGetValue(Current, out int Handle))
- {
- Handle = GL.CreateProgram();
-
- AttachIfNotNull(Handle, Current.Vertex);
- AttachIfNotNull(Handle, Current.TessControl);
- AttachIfNotNull(Handle, Current.TessEvaluation);
- AttachIfNotNull(Handle, Current.Geometry);
- AttachIfNotNull(Handle, Current.Fragment);
-
- GL.LinkProgram(Handle);
-
- CheckProgramLink(Handle);
-
- BindUniformBlocks(Handle);
- BindTextureLocations(Handle);
-
- Programs.Add(Current, Handle);
- }
-
- GL.UseProgram(Handle);
-
- CurrentProgramHandle = Handle;
- }
-
- private void EnsureExtraBlock()
- {
- if (ExtraUboHandle == 0)
- {
- ExtraUboHandle = GL.GenBuffer();
-
- GL.BindBuffer(BufferTarget.UniformBuffer, ExtraUboHandle);
-
- GL.BufferData(BufferTarget.UniformBuffer, ExtraDataSize * sizeof(float), IntPtr.Zero, BufferUsageHint.StreamDraw);
-
- GL.BindBufferBase(BufferRangeTarget.UniformBuffer, 0, ExtraUboHandle);
- }
- }
-
- private void AttachIfNotNull(int ProgramHandle, OGLShaderStage Stage)
- {
- if (Stage != null)
- {
- Stage.Compile();
-
- GL.AttachShader(ProgramHandle, Stage.Handle);
- }
- }
-
- private void BindUniformBlocks(int ProgramHandle)
- {
- int ExtraBlockindex = GL.GetUniformBlockIndex(ProgramHandle, GlslDecl.ExtraUniformBlockName);
-
- GL.UniformBlockBinding(ProgramHandle, ExtraBlockindex, 0);
-
- int FreeBinding = ReservedCbufCount;
-
- void BindUniformBlocksIfNotNull(OGLShaderStage Stage)
- {
- if (Stage != null)
- {
- foreach (ShaderDeclInfo DeclInfo in Stage.ConstBufferUsage)
- {
- int BlockIndex = GL.GetUniformBlockIndex(ProgramHandle, DeclInfo.Name);
-
- if (BlockIndex < 0)
- {
- //It is expected that its found, if it's not then driver might be in a malfunction
- throw new InvalidOperationException();
- }
-
- GL.UniformBlockBinding(ProgramHandle, BlockIndex, FreeBinding);
-
- FreeBinding++;
- }
- }
- }
-
- BindUniformBlocksIfNotNull(Current.Vertex);
- BindUniformBlocksIfNotNull(Current.TessControl);
- BindUniformBlocksIfNotNull(Current.TessEvaluation);
- BindUniformBlocksIfNotNull(Current.Geometry);
- BindUniformBlocksIfNotNull(Current.Fragment);
- }
-
- private void BindTextureLocations(int ProgramHandle)
- {
- int Index = 0;
-
- void BindTexturesIfNotNull(OGLShaderStage Stage)
- {
- if (Stage != null)
- {
- foreach (ShaderDeclInfo Decl in Stage.TextureUsage)
- {
- int Location = GL.GetUniformLocation(ProgramHandle, Decl.Name);
-
- GL.Uniform1(Location, Index);
-
- Index++;
- }
- }
- }
-
- GL.UseProgram(ProgramHandle);
-
- BindTexturesIfNotNull(Current.Vertex);
- BindTexturesIfNotNull(Current.TessControl);
- BindTexturesIfNotNull(Current.TessEvaluation);
- BindTexturesIfNotNull(Current.Geometry);
- BindTexturesIfNotNull(Current.Fragment);
- }
-
- private static void CheckProgramLink(int Handle)
- {
- int Status = 0;
-
- GL.GetProgram(Handle, GetProgramParameterName.LinkStatus, out Status);
-
- if (Status == 0)
- {
- throw new ShaderException(GL.GetProgramInfoLog(Handle));
- }
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs
deleted file mode 100644
index c87b0d40..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using System;
-using System.Collections.Generic;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- struct OGLShaderProgram
- {
- public OGLShaderStage Vertex;
- public OGLShaderStage TessControl;
- public OGLShaderStage TessEvaluation;
- public OGLShaderStage Geometry;
- public OGLShaderStage Fragment;
- }
-
- class OGLShaderStage : IDisposable
- {
- public int Handle { get; private set; }
-
- public bool IsCompiled { get; private set; }
-
- public GalShaderType Type { get; private set; }
-
- public string Code { get; private set; }
-
- public IEnumerable<ShaderDeclInfo> ConstBufferUsage { get; private set; }
- public IEnumerable<ShaderDeclInfo> TextureUsage { get; private set; }
-
- public OGLShaderStage(
- GalShaderType Type,
- string Code,
- IEnumerable<ShaderDeclInfo> ConstBufferUsage,
- IEnumerable<ShaderDeclInfo> TextureUsage)
- {
- this.Type = Type;
- this.Code = Code;
- this.ConstBufferUsage = ConstBufferUsage;
- this.TextureUsage = TextureUsage;
- }
-
- public void Compile()
- {
- if (Handle == 0)
- {
- Handle = GL.CreateShader(OGLEnumConverter.GetShaderType(Type));
-
- CompileAndCheck(Handle, Code);
- }
- }
-
- public void Dispose()
- {
- Dispose(true);
- }
-
- protected virtual void Dispose(bool Disposing)
- {
- if (Disposing && Handle != 0)
- {
- GL.DeleteShader(Handle);
-
- Handle = 0;
- }
- }
-
- public static void CompileAndCheck(int Handle, string Code)
- {
- GL.ShaderSource(Handle, Code);
- GL.CompileShader(Handle);
-
- CheckCompilation(Handle);
- }
-
- private static void CheckCompilation(int Handle)
- {
- int Status = 0;
-
- GL.GetShader(Handle, ShaderParameter.CompileStatus, out Status);
-
- if (Status == 0)
- {
- throw new ShaderException(GL.GetShaderInfoLog(Handle));
- }
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs
deleted file mode 100644
index 4fef11d2..00000000
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs
+++ /dev/null
@@ -1,381 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using Ryujinx.Graphics.Texture;
-using System;
-
-namespace Ryujinx.Graphics.Gal.OpenGL
-{
- class OGLTexture : IGalTexture
- {
- private const long MaxTextureCacheSize = 768 * 1024 * 1024;
-
- private OGLCachedResource<ImageHandler> TextureCache;
-
- public EventHandler<int> TextureDeleted { get; set; }
-
- public OGLTexture()
- {
- TextureCache = new OGLCachedResource<ImageHandler>(DeleteTexture, MaxTextureCacheSize);
- }
-
- public void LockCache()
- {
- TextureCache.Lock();
- }
-
- public void UnlockCache()
- {
- TextureCache.Unlock();
- }
-
- private void DeleteTexture(ImageHandler CachedImage)
- {
- TextureDeleted?.Invoke(this, CachedImage.Handle);
-
- GL.DeleteTexture(CachedImage.Handle);
- }
-
- public void Create(long Key, int Size, GalImage Image)
- {
- int Handle = GL.GenTexture();
-
- TextureTarget Target = ImageUtils.GetTextureTarget(Image.TextureTarget);
-
- GL.BindTexture(Target, Handle);
-
- const int Level = 0; //TODO: Support mipmap textures.
- const int Border = 0;
-
- TextureCache.AddOrUpdate(Key, new ImageHandler(Handle, Image), (uint)Size);
-
- if (ImageUtils.IsCompressed(Image.Format))
- {
- throw new InvalidOperationException("Surfaces with compressed formats are not supported!");
- }
-
- (PixelInternalFormat InternalFmt,
- PixelFormat Format,
- PixelType Type) = OGLEnumConverter.GetImageFormat(Image.Format);
-
- switch (Target)
- {
- case TextureTarget.Texture1D:
- GL.TexImage1D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Border,
- Format,
- Type,
- IntPtr.Zero);
- break;
-
- case TextureTarget.Texture2D:
- GL.TexImage2D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Border,
- Format,
- Type,
- IntPtr.Zero);
- break;
- case TextureTarget.Texture3D:
- GL.TexImage3D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Image.Depth,
- Border,
- Format,
- Type,
- IntPtr.Zero);
- break;
- case TextureTarget.Texture2DArray:
- GL.TexImage3D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Image.LayerCount,
- Border,
- Format,
- Type,
- IntPtr.Zero);
- break;
- default:
- throw new NotImplementedException($"Unsupported texture target type: {Target}");
- }
- }
-
- public void Create(long Key, byte[] Data, GalImage Image)
- {
- int Handle = GL.GenTexture();
-
- TextureTarget Target = ImageUtils.GetTextureTarget(Image.TextureTarget);
-
- GL.BindTexture(Target, Handle);
-
- const int Level = 0; //TODO: Support mipmap textures.
- const int Border = 0;
-
- TextureCache.AddOrUpdate(Key, new ImageHandler(Handle, Image), (uint)Data.Length);
-
- if (ImageUtils.IsCompressed(Image.Format) && !IsAstc(Image.Format))
- {
- InternalFormat InternalFmt = OGLEnumConverter.GetCompressedImageFormat(Image.Format);
-
- switch (Target)
- {
- case TextureTarget.Texture1D:
- GL.CompressedTexImage1D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Border,
- Data.Length,
- Data);
- break;
- case TextureTarget.Texture2D:
- GL.CompressedTexImage2D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Border,
- Data.Length,
- Data);
- break;
- case TextureTarget.Texture3D:
- GL.CompressedTexImage3D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Image.Depth,
- Border,
- Data.Length,
- Data);
- break;
- case TextureTarget.Texture2DArray:
- GL.CompressedTexImage3D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Image.LayerCount,
- Border,
- Data.Length,
- Data);
- break;
- default:
- throw new NotImplementedException($"Unsupported texture target type: {Target}");
- }
- }
- else
- {
- //TODO: Use KHR_texture_compression_astc_hdr when available
- if (IsAstc(Image.Format))
- {
- int TextureBlockWidth = ImageUtils.GetBlockWidth(Image.Format);
- int TextureBlockHeight = ImageUtils.GetBlockHeight(Image.Format);
- int TextureBlockDepth = ImageUtils.GetBlockDepth(Image.Format);
-
- Data = ASTCDecoder.DecodeToRGBA8888(
- Data,
- TextureBlockWidth,
- TextureBlockHeight,
- TextureBlockDepth,
- Image.Width,
- Image.Height,
- Image.Depth);
-
- Image.Format = GalImageFormat.RGBA8 | (Image.Format & GalImageFormat.TypeMask);
- }
-
- (PixelInternalFormat InternalFmt,
- PixelFormat Format,
- PixelType Type) = OGLEnumConverter.GetImageFormat(Image.Format);
-
-
- switch (Target)
- {
- case TextureTarget.Texture1D:
- GL.TexImage1D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Border,
- Format,
- Type,
- Data);
- break;
- case TextureTarget.Texture2D:
- GL.TexImage2D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Border,
- Format,
- Type,
- Data);
- break;
- case TextureTarget.Texture3D:
- GL.TexImage3D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Image.Depth,
- Border,
- Format,
- Type,
- Data);
- break;
- case TextureTarget.Texture2DArray:
- GL.TexImage3D(
- Target,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Image.LayerCount,
- Border,
- Format,
- Type,
- Data);
- break;
- case TextureTarget.TextureCubeMap:
- Span<byte> Array = new Span<byte>(Data);
-
- int FaceSize = ImageUtils.GetSize(Image) / 6;
-
- for (int Face = 0; Face < 6; Face++)
- {
- GL.TexImage2D(
- TextureTarget.TextureCubeMapPositiveX + Face,
- Level,
- InternalFmt,
- Image.Width,
- Image.Height,
- Border,
- Format,
- Type,
- Array.Slice(Face * FaceSize, FaceSize).ToArray());
- }
- break;
- default:
- throw new NotImplementedException($"Unsupported texture target type: {Target}");
- }
- }
- }
-
- private static bool IsAstc(GalImageFormat Format)
- {
- Format &= GalImageFormat.FormatMask;
-
- return Format > GalImageFormat.Astc2DStart && Format < GalImageFormat.Astc2DEnd;
- }
-
- public bool TryGetImage(long Key, out GalImage Image)
- {
- if (TextureCache.TryGetValue(Key, out ImageHandler CachedImage))
- {
- Image = CachedImage.Image;
-
- return true;
- }
-
- Image = default(GalImage);
-
- return false;
- }
-
- public bool TryGetImageHandler(long Key, out ImageHandler CachedImage)
- {
- if (TextureCache.TryGetValue(Key, out CachedImage))
- {
- return true;
- }
-
- CachedImage = null;
-
- return false;
- }
-
- public void Bind(long Key, int Index, GalImage Image)
- {
- if (TextureCache.TryGetValue(Key, out ImageHandler CachedImage))
- {
- GL.ActiveTexture(TextureUnit.Texture0 + Index);
-
- TextureTarget Target = ImageUtils.GetTextureTarget(Image.TextureTarget);
-
- GL.BindTexture(Target, CachedImage.Handle);
-
- int[] SwizzleRgba = new int[]
- {
- (int)OGLEnumConverter.GetTextureSwizzle(Image.XSource),
- (int)OGLEnumConverter.GetTextureSwizzle(Image.YSource),
- (int)OGLEnumConverter.GetTextureSwizzle(Image.ZSource),
- (int)OGLEnumConverter.GetTextureSwizzle(Image.WSource)
- };
-
- GL.TexParameter(Target, TextureParameterName.TextureSwizzleRgba, SwizzleRgba);
- }
- }
-
- public void SetSampler(GalImage Image, GalTextureSampler Sampler)
- {
- int WrapS = (int)OGLEnumConverter.GetTextureWrapMode(Sampler.AddressU);
- int WrapT = (int)OGLEnumConverter.GetTextureWrapMode(Sampler.AddressV);
- int WrapR = (int)OGLEnumConverter.GetTextureWrapMode(Sampler.AddressP);
-
- int MinFilter = (int)OGLEnumConverter.GetTextureMinFilter(Sampler.MinFilter, Sampler.MipFilter);
- int MagFilter = (int)OGLEnumConverter.GetTextureMagFilter(Sampler.MagFilter);
-
- TextureTarget Target = ImageUtils.GetTextureTarget(Image.TextureTarget);
-
- GL.TexParameter(Target, TextureParameterName.TextureWrapS, WrapS);
- GL.TexParameter(Target, TextureParameterName.TextureWrapT, WrapT);
- GL.TexParameter(Target, TextureParameterName.TextureWrapR, WrapR);
-
- GL.TexParameter(Target, TextureParameterName.TextureMinFilter, MinFilter);
- GL.TexParameter(Target, TextureParameterName.TextureMagFilter, MagFilter);
-
- float[] Color = new float[]
- {
- Sampler.BorderColor.Red,
- Sampler.BorderColor.Green,
- Sampler.BorderColor.Blue,
- Sampler.BorderColor.Alpha
- };
-
- GL.TexParameter(Target, TextureParameterName.TextureBorderColor, Color);
-
- if (Sampler.DepthCompare)
- {
- GL.TexParameter(Target, TextureParameterName.TextureCompareMode, (int)All.CompareRToTexture);
- GL.TexParameter(Target, TextureParameterName.TextureCompareFunc, (int)OGLEnumConverter.GetDepthCompareFunc(Sampler.DepthCompareFunc));
- }
- else
- {
- GL.TexParameter(Target, TextureParameterName.TextureCompareMode, (int)All.None);
- GL.TexParameter(Target, TextureParameterName.TextureCompareFunc, (int)All.Never);
- }
- }
- }
-}
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglCachedResource.cs b/Ryujinx.Graphics/Gal/OpenGL/OglCachedResource.cs
new file mode 100644
index 00000000..91f0a7e1
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglCachedResource.cs
@@ -0,0 +1,191 @@
+using Ryujinx.Common;
+using System;
+using System.Collections.Generic;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ class OglCachedResource<T>
+ {
+ public delegate void DeleteValue(T value);
+
+ private const int MinTimeDelta = 5 * 60000;
+ private const int MaxRemovalsPerRun = 10;
+
+ private struct CacheBucket
+ {
+ public T Value { get; private set; }
+
+ public LinkedListNode<long> Node { get; private set; }
+
+ public long DataSize { get; private set; }
+
+ public long Timestamp { get; private set; }
+
+ public CacheBucket(T value, long dataSize, LinkedListNode<long> node)
+ {
+ Value = value;
+ DataSize = dataSize;
+ Node = node;
+
+ Timestamp = PerformanceCounter.ElapsedMilliseconds;
+ }
+ }
+
+ private Dictionary<long, CacheBucket> _cache;
+
+ private LinkedList<long> _sortedCache;
+
+ private DeleteValue _deleteValueCallback;
+
+ private Queue<T> _deletePending;
+
+ private bool _locked;
+
+ private long _maxSize;
+ private long _totalSize;
+
+ public OglCachedResource(DeleteValue deleteValueCallback, long maxSize)
+ {
+ _maxSize = maxSize;
+
+ if (deleteValueCallback == null)
+ {
+ throw new ArgumentNullException(nameof(deleteValueCallback));
+ }
+
+ _deleteValueCallback = deleteValueCallback;
+
+ _cache = new Dictionary<long, CacheBucket>();
+
+ _sortedCache = new LinkedList<long>();
+
+ _deletePending = new Queue<T>();
+ }
+
+ public void Lock()
+ {
+ _locked = true;
+ }
+
+ public void Unlock()
+ {
+ _locked = false;
+
+ while (_deletePending.TryDequeue(out T value))
+ {
+ _deleteValueCallback(value);
+ }
+
+ ClearCacheIfNeeded();
+ }
+
+ public void AddOrUpdate(long key, T value, long size)
+ {
+ if (!_locked)
+ {
+ ClearCacheIfNeeded();
+ }
+
+ LinkedListNode<long> node = _sortedCache.AddLast(key);
+
+ CacheBucket newBucket = new CacheBucket(value, size, node);
+
+ if (_cache.TryGetValue(key, out CacheBucket bucket))
+ {
+ if (_locked)
+ {
+ _deletePending.Enqueue(bucket.Value);
+ }
+ else
+ {
+ _deleteValueCallback(bucket.Value);
+ }
+
+ _sortedCache.Remove(bucket.Node);
+
+ _totalSize -= bucket.DataSize;
+
+ _cache[key] = newBucket;
+ }
+ else
+ {
+ _cache.Add(key, newBucket);
+ }
+
+ _totalSize += size;
+ }
+
+ public bool TryGetValue(long key, out T value)
+ {
+ if (_cache.TryGetValue(key, out CacheBucket bucket))
+ {
+ value = bucket.Value;
+
+ _sortedCache.Remove(bucket.Node);
+
+ LinkedListNode<long> node = _sortedCache.AddLast(key);
+
+ _cache[key] = new CacheBucket(value, bucket.DataSize, node);
+
+ return true;
+ }
+
+ value = default(T);
+
+ return false;
+ }
+
+ public bool TryGetSize(long key, out long size)
+ {
+ if (_cache.TryGetValue(key, out CacheBucket bucket))
+ {
+ size = bucket.DataSize;
+
+ return true;
+ }
+
+ size = 0;
+
+ return false;
+ }
+
+ private void ClearCacheIfNeeded()
+ {
+ long timestamp = PerformanceCounter.ElapsedMilliseconds;
+
+ int count = 0;
+
+ while (count++ < MaxRemovalsPerRun)
+ {
+ LinkedListNode<long> node = _sortedCache.First;
+
+ if (node == null)
+ {
+ break;
+ }
+
+ CacheBucket bucket = _cache[node.Value];
+
+ long timeDelta = timestamp - bucket.Timestamp;
+
+ if (timeDelta <= MinTimeDelta && !UnderMemoryPressure())
+ {
+ break;
+ }
+
+ _sortedCache.Remove(node);
+
+ _cache.Remove(node.Value);
+
+ _deleteValueCallback(bucket.Value);
+
+ _totalSize -= bucket.DataSize;
+ }
+ }
+
+ private bool UnderMemoryPressure()
+ {
+ return _totalSize >= _maxSize;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglConstBuffer.cs b/Ryujinx.Graphics/Gal/OpenGL/OglConstBuffer.cs
new file mode 100644
index 00000000..e076be33
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglConstBuffer.cs
@@ -0,0 +1,74 @@
+using OpenTK.Graphics.OpenGL;
+using System;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ class OglConstBuffer : IGalConstBuffer
+ {
+ private const long MaxConstBufferCacheSize = 64 * 1024 * 1024;
+
+ private OglCachedResource<OglStreamBuffer> _cache;
+
+ public OglConstBuffer()
+ {
+ _cache = new OglCachedResource<OglStreamBuffer>(DeleteBuffer, MaxConstBufferCacheSize);
+ }
+
+ public void LockCache()
+ {
+ _cache.Lock();
+ }
+
+ public void UnlockCache()
+ {
+ _cache.Unlock();
+ }
+
+ public void Create(long key, long size)
+ {
+ OglStreamBuffer buffer = new OglStreamBuffer(BufferTarget.UniformBuffer, size);
+
+ _cache.AddOrUpdate(key, buffer, size);
+ }
+
+ public bool IsCached(long key, long size)
+ {
+ return _cache.TryGetSize(key, out long cachedSize) && cachedSize == size;
+ }
+
+ public void SetData(long key, long size, IntPtr hostAddress)
+ {
+ if (_cache.TryGetValue(key, out OglStreamBuffer buffer))
+ {
+ buffer.SetData(size, hostAddress);
+ }
+ }
+
+ public void SetData(long key, byte[] data)
+ {
+ if (_cache.TryGetValue(key, out OglStreamBuffer buffer))
+ {
+ buffer.SetData(data);
+ }
+ }
+
+ public bool TryGetUbo(long key, out int uboHandle)
+ {
+ if (_cache.TryGetValue(key, out OglStreamBuffer buffer))
+ {
+ uboHandle = buffer.Handle;
+
+ return true;
+ }
+
+ uboHandle = 0;
+
+ return false;
+ }
+
+ private static void DeleteBuffer(OglStreamBuffer buffer)
+ {
+ buffer.Dispose();
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs b/Ryujinx.Graphics/Gal/OpenGL/OglEnumConverter.cs
index 3a25fff7..a3f9957f 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglEnumConverter.cs
@@ -3,34 +3,34 @@ using System;
namespace Ryujinx.Graphics.Gal.OpenGL
{
- static class OGLEnumConverter
+ static class OglEnumConverter
{
- public static FrontFaceDirection GetFrontFace(GalFrontFace FrontFace)
+ public static FrontFaceDirection GetFrontFace(GalFrontFace frontFace)
{
- switch (FrontFace)
+ switch (frontFace)
{
- case GalFrontFace.CW: return FrontFaceDirection.Cw;
- case GalFrontFace.CCW: return FrontFaceDirection.Ccw;
+ case GalFrontFace.Cw: return FrontFaceDirection.Cw;
+ case GalFrontFace.Ccw: return FrontFaceDirection.Ccw;
}
- throw new ArgumentException(nameof(FrontFace) + " \"" + FrontFace + "\" is not valid!");
+ throw new ArgumentException(nameof(frontFace) + " \"" + frontFace + "\" is not valid!");
}
- public static CullFaceMode GetCullFace(GalCullFace CullFace)
+ public static CullFaceMode GetCullFace(GalCullFace cullFace)
{
- switch (CullFace)
+ switch (cullFace)
{
case GalCullFace.Front: return CullFaceMode.Front;
case GalCullFace.Back: return CullFaceMode.Back;
case GalCullFace.FrontAndBack: return CullFaceMode.FrontAndBack;
}
- throw new ArgumentException(nameof(CullFace) + " \"" + CullFace + "\" is not valid!");
+ throw new ArgumentException(nameof(cullFace) + " \"" + cullFace + "\" is not valid!");
}
- public static StencilOp GetStencilOp(GalStencilOp Op)
+ public static StencilOp GetStencilOp(GalStencilOp op)
{
- switch (Op)
+ switch (op)
{
case GalStencilOp.Keep: return StencilOp.Keep;
case GalStencilOp.Zero: return StencilOp.Zero;
@@ -42,28 +42,28 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case GalStencilOp.DecrWrap: return StencilOp.DecrWrap;
}
- throw new ArgumentException(nameof(Op) + " \"" + Op + "\" is not valid!");
+ throw new ArgumentException(nameof(op) + " \"" + op + "\" is not valid!");
}
- public static DepthFunction GetDepthFunc(GalComparisonOp Func)
+ public static DepthFunction GetDepthFunc(GalComparisonOp func)
{
- return (DepthFunction)GetFunc(Func);
+ return (DepthFunction)GetFunc(func);
}
- public static StencilFunction GetStencilFunc(GalComparisonOp Func)
+ public static StencilFunction GetStencilFunc(GalComparisonOp func)
{
- return (StencilFunction)GetFunc(Func);
+ return (StencilFunction)GetFunc(func);
}
- private static All GetFunc(GalComparisonOp Func)
+ private static All GetFunc(GalComparisonOp func)
{
- if ((int)Func >= (int)All.Never &&
- (int)Func <= (int)All.Always)
+ if ((int)func >= (int)All.Never &&
+ (int)func <= (int)All.Always)
{
- return (All)Func;
+ return (All)func;
}
- switch (Func)
+ switch (func)
{
case GalComparisonOp.Never: return All.Never;
case GalComparisonOp.Less: return All.Less;
@@ -75,24 +75,24 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case GalComparisonOp.Always: return All.Always;
}
- throw new ArgumentException(nameof(Func) + " \"" + Func + "\" is not valid!");
+ throw new ArgumentException(nameof(func) + " \"" + func + "\" is not valid!");
}
- public static DrawElementsType GetDrawElementsType(GalIndexFormat Format)
+ public static DrawElementsType GetDrawElementsType(GalIndexFormat format)
{
- switch (Format)
+ switch (format)
{
case GalIndexFormat.Byte: return DrawElementsType.UnsignedByte;
case GalIndexFormat.Int16: return DrawElementsType.UnsignedShort;
case GalIndexFormat.Int32: return DrawElementsType.UnsignedInt;
}
- throw new ArgumentException(nameof(Format) + " \"" + Format + "\" is not valid!");
+ throw new ArgumentException(nameof(format) + " \"" + format + "\" is not valid!");
}
- public static PrimitiveType GetPrimitiveType(GalPrimitiveType Type)
+ public static PrimitiveType GetPrimitiveType(GalPrimitiveType type)
{
- switch (Type)
+ switch (type)
{
case GalPrimitiveType.Points: return PrimitiveType.Points;
case GalPrimitiveType.Lines: return PrimitiveType.Lines;
@@ -109,12 +109,12 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case GalPrimitiveType.Patches: return PrimitiveType.Patches;
}
- throw new ArgumentException(nameof(Type) + " \"" + Type + "\" is not valid!");
+ throw new ArgumentException(nameof(type) + " \"" + type + "\" is not valid!");
}
- public static ShaderType GetShaderType(GalShaderType Type)
+ public static ShaderType GetShaderType(GalShaderType type)
{
- switch (Type)
+ switch (type)
{
case GalShaderType.Vertex: return ShaderType.VertexShader;
case GalShaderType.TessControl: return ShaderType.TessControlShader;
@@ -123,50 +123,50 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case GalShaderType.Fragment: return ShaderType.FragmentShader;
}
- throw new ArgumentException(nameof(Type) + " \"" + Type + "\" is not valid!");
+ throw new ArgumentException(nameof(type) + " \"" + type + "\" is not valid!");
}
- public static (PixelInternalFormat, PixelFormat, PixelType) GetImageFormat(GalImageFormat Format)
+ public static (PixelInternalFormat, PixelFormat, PixelType) GetImageFormat(GalImageFormat format)
{
- switch (Format)
+ switch (format)
{
- case GalImageFormat.RGBA32 | GalImageFormat.Float: return (PixelInternalFormat.Rgba32f, PixelFormat.Rgba, PixelType.Float);
- case GalImageFormat.RGBA32 | GalImageFormat.Sint: return (PixelInternalFormat.Rgba32i, PixelFormat.RgbaInteger, PixelType.Int);
- case GalImageFormat.RGBA32 | GalImageFormat.Uint: return (PixelInternalFormat.Rgba32ui, PixelFormat.RgbaInteger, PixelType.UnsignedInt);
- case GalImageFormat.RGBA16 | GalImageFormat.Float: return (PixelInternalFormat.Rgba16f, PixelFormat.Rgba, PixelType.HalfFloat);
- case GalImageFormat.RGBA16 | GalImageFormat.Sint: return (PixelInternalFormat.Rgba16i, PixelFormat.RgbaInteger, PixelType.Short);
- case GalImageFormat.RGBA16 | GalImageFormat.Uint: return (PixelInternalFormat.Rgba16ui, PixelFormat.RgbaInteger, PixelType.UnsignedShort);
- case GalImageFormat.RGBA16 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba16, PixelFormat.Rgba, PixelType.UnsignedShort);
- case GalImageFormat.RG32 | GalImageFormat.Float: return (PixelInternalFormat.Rg32f, PixelFormat.Rg, PixelType.Float);
- case GalImageFormat.RG32 | GalImageFormat.Sint: return (PixelInternalFormat.Rg32i, PixelFormat.RgInteger, PixelType.Int);
- case GalImageFormat.RG32 | GalImageFormat.Uint: return (PixelInternalFormat.Rg32ui, PixelFormat.RgInteger, PixelType.UnsignedInt);
- case GalImageFormat.RGBX8 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgb8, PixelFormat.Rgba, PixelType.UnsignedByte);
- case GalImageFormat.RGBA8 | GalImageFormat.Snorm: return (PixelInternalFormat.Rgba8Snorm, PixelFormat.Rgba, PixelType.Byte);
- case GalImageFormat.RGBA8 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba8, PixelFormat.Rgba, PixelType.UnsignedByte);
- case GalImageFormat.RGBA8 | GalImageFormat.Sint: return (PixelInternalFormat.Rgba8i, PixelFormat.RgbaInteger, PixelType.Byte);
- case GalImageFormat.RGBA8 | GalImageFormat.Uint: return (PixelInternalFormat.Rgba8ui, PixelFormat.RgbaInteger, PixelType.UnsignedByte);
- case GalImageFormat.RGBA8 | GalImageFormat.Srgb: return (PixelInternalFormat.Srgb8Alpha8, PixelFormat.Rgba, PixelType.UnsignedByte);
- case GalImageFormat.BGRA8 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba8, PixelFormat.Bgra, PixelType.UnsignedByte);
- case GalImageFormat.BGRA8 | GalImageFormat.Srgb: return (PixelInternalFormat.Srgb8Alpha8, PixelFormat.Bgra, PixelType.UnsignedByte);
- case GalImageFormat.RGBA4 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba4, PixelFormat.Rgba, PixelType.UnsignedShort4444Reversed);
- case GalImageFormat.RGB10A2 | GalImageFormat.Uint: return (PixelInternalFormat.Rgb10A2ui, PixelFormat.RgbaInteger, PixelType.UnsignedInt2101010Reversed);
- case GalImageFormat.RGB10A2 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgb10A2, PixelFormat.Rgba, PixelType.UnsignedInt2101010Reversed);
+ case GalImageFormat.Rgba32 | GalImageFormat.Float: return (PixelInternalFormat.Rgba32f, PixelFormat.Rgba, PixelType.Float);
+ case GalImageFormat.Rgba32 | GalImageFormat.Sint: return (PixelInternalFormat.Rgba32i, PixelFormat.RgbaInteger, PixelType.Int);
+ case GalImageFormat.Rgba32 | GalImageFormat.Uint: return (PixelInternalFormat.Rgba32ui, PixelFormat.RgbaInteger, PixelType.UnsignedInt);
+ case GalImageFormat.Rgba16 | GalImageFormat.Float: return (PixelInternalFormat.Rgba16f, PixelFormat.Rgba, PixelType.HalfFloat);
+ case GalImageFormat.Rgba16 | GalImageFormat.Sint: return (PixelInternalFormat.Rgba16i, PixelFormat.RgbaInteger, PixelType.Short);
+ case GalImageFormat.Rgba16 | GalImageFormat.Uint: return (PixelInternalFormat.Rgba16ui, PixelFormat.RgbaInteger, PixelType.UnsignedShort);
+ case GalImageFormat.Rgba16 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba16, PixelFormat.Rgba, PixelType.UnsignedShort);
+ case GalImageFormat.Rg32 | GalImageFormat.Float: return (PixelInternalFormat.Rg32f, PixelFormat.Rg, PixelType.Float);
+ case GalImageFormat.Rg32 | GalImageFormat.Sint: return (PixelInternalFormat.Rg32i, PixelFormat.RgInteger, PixelType.Int);
+ case GalImageFormat.Rg32 | GalImageFormat.Uint: return (PixelInternalFormat.Rg32ui, PixelFormat.RgInteger, PixelType.UnsignedInt);
+ case GalImageFormat.Rgbx8 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgb8, PixelFormat.Rgba, PixelType.UnsignedByte);
+ case GalImageFormat.Rgba8 | GalImageFormat.Snorm: return (PixelInternalFormat.Rgba8Snorm, PixelFormat.Rgba, PixelType.Byte);
+ case GalImageFormat.Rgba8 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba8, PixelFormat.Rgba, PixelType.UnsignedByte);
+ case GalImageFormat.Rgba8 | GalImageFormat.Sint: return (PixelInternalFormat.Rgba8i, PixelFormat.RgbaInteger, PixelType.Byte);
+ case GalImageFormat.Rgba8 | GalImageFormat.Uint: return (PixelInternalFormat.Rgba8ui, PixelFormat.RgbaInteger, PixelType.UnsignedByte);
+ case GalImageFormat.Rgba8 | GalImageFormat.Srgb: return (PixelInternalFormat.Srgb8Alpha8, PixelFormat.Rgba, PixelType.UnsignedByte);
+ case GalImageFormat.Bgra8 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba8, PixelFormat.Bgra, PixelType.UnsignedByte);
+ case GalImageFormat.Bgra8 | GalImageFormat.Srgb: return (PixelInternalFormat.Srgb8Alpha8, PixelFormat.Bgra, PixelType.UnsignedByte);
+ case GalImageFormat.Rgba4 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba4, PixelFormat.Rgba, PixelType.UnsignedShort4444Reversed);
+ case GalImageFormat.Rgb10A2 | GalImageFormat.Uint: return (PixelInternalFormat.Rgb10A2ui, PixelFormat.RgbaInteger, PixelType.UnsignedInt2101010Reversed);
+ case GalImageFormat.Rgb10A2 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgb10A2, PixelFormat.Rgba, PixelType.UnsignedInt2101010Reversed);
case GalImageFormat.R32 | GalImageFormat.Float: return (PixelInternalFormat.R32f, PixelFormat.Red, PixelType.Float);
case GalImageFormat.R32 | GalImageFormat.Sint: return (PixelInternalFormat.R32i, PixelFormat.Red, PixelType.Int);
case GalImageFormat.R32 | GalImageFormat.Uint: return (PixelInternalFormat.R32ui, PixelFormat.Red, PixelType.UnsignedInt);
- case GalImageFormat.BGR5A1 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgb5A1, PixelFormat.Rgba, PixelType.UnsignedShort5551);
- case GalImageFormat.RGB5A1 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgb5A1, PixelFormat.Rgba, PixelType.UnsignedShort1555Reversed);
- case GalImageFormat.RGB565 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba, PixelFormat.Rgb, PixelType.UnsignedShort565Reversed);
- case GalImageFormat.BGR565 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba, PixelFormat.Rgb, PixelType.UnsignedShort565);
- case GalImageFormat.RG16 | GalImageFormat.Float: return (PixelInternalFormat.Rg16f, PixelFormat.Rg, PixelType.HalfFloat);
- case GalImageFormat.RG16 | GalImageFormat.Sint: return (PixelInternalFormat.Rg16i, PixelFormat.RgInteger, PixelType.Short);
- case GalImageFormat.RG16 | GalImageFormat.Snorm: return (PixelInternalFormat.Rg16Snorm, PixelFormat.Rg, PixelType.Short);
- case GalImageFormat.RG16 | GalImageFormat.Uint: return (PixelInternalFormat.Rg16ui, PixelFormat.RgInteger, PixelType.UnsignedShort);
- case GalImageFormat.RG16 | GalImageFormat.Unorm: return (PixelInternalFormat.Rg16, PixelFormat.Rg, PixelType.UnsignedShort);
- case GalImageFormat.RG8 | GalImageFormat.Sint: return (PixelInternalFormat.Rg8i, PixelFormat.RgInteger, PixelType.Byte);
- case GalImageFormat.RG8 | GalImageFormat.Snorm: return (PixelInternalFormat.Rg8Snorm, PixelFormat.Rg, PixelType.Byte);
- case GalImageFormat.RG8 | GalImageFormat.Uint: return (PixelInternalFormat.Rg8ui, PixelFormat.RgInteger, PixelType.UnsignedByte);
- case GalImageFormat.RG8 | GalImageFormat.Unorm: return (PixelInternalFormat.Rg8, PixelFormat.Rg, PixelType.UnsignedByte);
+ case GalImageFormat.Bgr5A1 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgb5A1, PixelFormat.Rgba, PixelType.UnsignedShort5551);
+ case GalImageFormat.Rgb5A1 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgb5A1, PixelFormat.Rgba, PixelType.UnsignedShort1555Reversed);
+ case GalImageFormat.Rgb565 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba, PixelFormat.Rgb, PixelType.UnsignedShort565Reversed);
+ case GalImageFormat.Bgr565 | GalImageFormat.Unorm: return (PixelInternalFormat.Rgba, PixelFormat.Rgb, PixelType.UnsignedShort565);
+ case GalImageFormat.Rg16 | GalImageFormat.Float: return (PixelInternalFormat.Rg16f, PixelFormat.Rg, PixelType.HalfFloat);
+ case GalImageFormat.Rg16 | GalImageFormat.Sint: return (PixelInternalFormat.Rg16i, PixelFormat.RgInteger, PixelType.Short);
+ case GalImageFormat.Rg16 | GalImageFormat.Snorm: return (PixelInternalFormat.Rg16Snorm, PixelFormat.Rg, PixelType.Short);
+ case GalImageFormat.Rg16 | GalImageFormat.Uint: return (PixelInternalFormat.Rg16ui, PixelFormat.RgInteger, PixelType.UnsignedShort);
+ case GalImageFormat.Rg16 | GalImageFormat.Unorm: return (PixelInternalFormat.Rg16, PixelFormat.Rg, PixelType.UnsignedShort);
+ case GalImageFormat.Rg8 | GalImageFormat.Sint: return (PixelInternalFormat.Rg8i, PixelFormat.RgInteger, PixelType.Byte);
+ case GalImageFormat.Rg8 | GalImageFormat.Snorm: return (PixelInternalFormat.Rg8Snorm, PixelFormat.Rg, PixelType.Byte);
+ case GalImageFormat.Rg8 | GalImageFormat.Uint: return (PixelInternalFormat.Rg8ui, PixelFormat.RgInteger, PixelType.UnsignedByte);
+ case GalImageFormat.Rg8 | GalImageFormat.Unorm: return (PixelInternalFormat.Rg8, PixelFormat.Rg, PixelType.UnsignedByte);
case GalImageFormat.R16 | GalImageFormat.Float: return (PixelInternalFormat.R16f, PixelFormat.Red, PixelType.HalfFloat);
case GalImageFormat.R16 | GalImageFormat.Sint: return (PixelInternalFormat.R16i, PixelFormat.RedInteger, PixelType.Short);
case GalImageFormat.R16 | GalImageFormat.Snorm: return (PixelInternalFormat.R16Snorm, PixelFormat.Red, PixelType.Short);
@@ -186,12 +186,12 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case GalImageFormat.D32S8 | GalImageFormat.Float: return (PixelInternalFormat.Depth32fStencil8, PixelFormat.DepthStencil, PixelType.Float32UnsignedInt248Rev);
}
- throw new NotImplementedException($"{Format & GalImageFormat.FormatMask} {Format & GalImageFormat.TypeMask}");
+ throw new NotImplementedException($"{format & GalImageFormat.FormatMask} {format & GalImageFormat.TypeMask}");
}
- public static All GetDepthCompareFunc(DepthCompareFunc DepthCompareFunc)
+ public static All GetDepthCompareFunc(DepthCompareFunc depthCompareFunc)
{
- switch (DepthCompareFunc)
+ switch (depthCompareFunc)
{
case DepthCompareFunc.LEqual:
return All.Lequal;
@@ -210,13 +210,13 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case DepthCompareFunc.Never:
return All.Never;
default:
- throw new ArgumentException(nameof(DepthCompareFunc) + " \"" + DepthCompareFunc + "\" is not valid!");
+ throw new ArgumentException(nameof(depthCompareFunc) + " \"" + depthCompareFunc + "\" is not valid!");
}
}
- public static InternalFormat GetCompressedImageFormat(GalImageFormat Format)
+ public static InternalFormat GetCompressedImageFormat(GalImageFormat format)
{
- switch (Format)
+ switch (format)
{
case GalImageFormat.BptcSfloat | GalImageFormat.Float: return InternalFormat.CompressedRgbBptcSignedFloat;
case GalImageFormat.BptcUfloat | GalImageFormat.Float: return InternalFormat.CompressedRgbBptcUnsignedFloat;
@@ -234,12 +234,12 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case GalImageFormat.BC5 | GalImageFormat.Unorm: return InternalFormat.CompressedRgRgtc2;
}
- throw new NotImplementedException($"{Format & GalImageFormat.FormatMask} {Format & GalImageFormat.TypeMask}");
+ throw new NotImplementedException($"{format & GalImageFormat.FormatMask} {format & GalImageFormat.TypeMask}");
}
- public static All GetTextureSwizzle(GalTextureSource Source)
+ public static All GetTextureSwizzle(GalTextureSource source)
{
- switch (Source)
+ switch (source)
{
case GalTextureSource.Zero: return All.Zero;
case GalTextureSource.Red: return All.Red;
@@ -250,12 +250,12 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case GalTextureSource.OneFloat: return All.One;
}
- throw new ArgumentException(nameof(Source) + " \"" + Source + "\" is not valid!");
+ throw new ArgumentException(nameof(source) + " \"" + source + "\" is not valid!");
}
- public static TextureWrapMode GetTextureWrapMode(GalTextureWrap Wrap)
+ public static TextureWrapMode GetTextureWrapMode(GalTextureWrap wrap)
{
- switch (Wrap)
+ switch (wrap)
{
case GalTextureWrap.Repeat: return TextureWrapMode.Repeat;
case GalTextureWrap.MirroredRepeat: return TextureWrapMode.MirroredRepeat;
@@ -264,9 +264,9 @@ namespace Ryujinx.Graphics.Gal.OpenGL
case GalTextureWrap.Clamp: return TextureWrapMode.Clamp;
}
- if (OGLExtension.TextureMirrorClamp)
+ if (OglExtension.TextureMirrorClamp)
{
- switch (Wrap)
+ switch (wrap)
{
case GalTextureWrap.MirrorClampToEdge: return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToEdgeExt;
case GalTextureWrap.MirrorClampToBorder: return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToBorderExt;
@@ -276,7 +276,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL
else
{
//Fallback to non-mirrored clamps
- switch (Wrap)
+ switch (wrap)
{
case GalTextureWrap.MirrorClampToEdge: return TextureWrapMode.ClampToEdge;
case GalTextureWrap.MirrorClampToBorder: return TextureWrapMode.ClampToBorder;
@@ -284,37 +284,37 @@ namespace Ryujinx.Graphics.Gal.OpenGL
}
}
- throw new ArgumentException(nameof(Wrap) + " \"" + Wrap + "\" is not valid!");
+ throw new ArgumentException(nameof(wrap) + " \"" + wrap + "\" is not valid!");
}
public static TextureMinFilter GetTextureMinFilter(
- GalTextureFilter MinFilter,
- GalTextureMipFilter MipFilter)
+ GalTextureFilter minFilter,
+ GalTextureMipFilter mipFilter)
{
//TODO: Mip (needs mipmap support first).
- switch (MinFilter)
+ switch (minFilter)
{
case GalTextureFilter.Nearest: return TextureMinFilter.Nearest;
case GalTextureFilter.Linear: return TextureMinFilter.Linear;
}
- throw new ArgumentException(nameof(MinFilter) + " \"" + MinFilter + "\" is not valid!");
+ throw new ArgumentException(nameof(minFilter) + " \"" + minFilter + "\" is not valid!");
}
- public static TextureMagFilter GetTextureMagFilter(GalTextureFilter Filter)
+ public static TextureMagFilter GetTextureMagFilter(GalTextureFilter filter)
{
- switch (Filter)
+ switch (filter)
{
case GalTextureFilter.Nearest: return TextureMagFilter.Nearest;
case GalTextureFilter.Linear: return TextureMagFilter.Linear;
}
- throw new ArgumentException(nameof(Filter) + " \"" + Filter + "\" is not valid!");
+ throw new ArgumentException(nameof(filter) + " \"" + filter + "\" is not valid!");
}
- public static BlendEquationMode GetBlendEquation(GalBlendEquation BlendEquation)
+ public static BlendEquationMode GetBlendEquation(GalBlendEquation blendEquation)
{
- switch (BlendEquation)
+ switch (blendEquation)
{
case GalBlendEquation.FuncAdd:
case GalBlendEquation.FuncAddGl:
@@ -337,12 +337,12 @@ namespace Ryujinx.Graphics.Gal.OpenGL
return BlendEquationMode.Max;
}
- throw new ArgumentException(nameof(BlendEquation) + " \"" + BlendEquation + "\" is not valid!");
+ throw new ArgumentException(nameof(blendEquation) + " \"" + blendEquation + "\" is not valid!");
}
- public static BlendingFactor GetBlendFactor(GalBlendFactor BlendFactor)
+ public static BlendingFactor GetBlendFactor(GalBlendFactor blendFactor)
{
- switch (BlendFactor)
+ switch (blendFactor)
{
case GalBlendFactor.Zero:
case GalBlendFactor.ZeroGl:
@@ -421,7 +421,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL
return BlendingFactor.ConstantColor;
}
- throw new ArgumentException(nameof(BlendFactor) + " \"" + BlendFactor + "\" is not valid!");
+ throw new ArgumentException(nameof(blendFactor) + " \"" + blendFactor + "\" is not valid!");
}
}
}
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglExtension.cs b/Ryujinx.Graphics/Gal/OpenGL/OglExtension.cs
new file mode 100644
index 00000000..8a1a0510
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglExtension.cs
@@ -0,0 +1,70 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Common.Logging;
+using System;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ static class OglExtension
+ {
+ // Private lazy backing variables
+ private static Lazy<bool> _enhancedLayouts = new Lazy<bool>(() => HasExtension("GL_ARB_enhanced_layouts"));
+ private static Lazy<bool> _textureMirrorClamp = new Lazy<bool>(() => HasExtension("GL_EXT_texture_mirror_clamp"));
+ private static Lazy<bool> _viewportArray = new Lazy<bool>(() => HasExtension("GL_ARB_viewport_array"));
+
+ private static Lazy<bool> _nvidiaDriver = new Lazy<bool>(() => IsNvidiaDriver());
+
+ // Public accessors
+ public static bool EnhancedLayouts => _enhancedLayouts.Value;
+ public static bool TextureMirrorClamp => _textureMirrorClamp.Value;
+ public static bool ViewportArray => _viewportArray.Value;
+
+ public static bool NvidiaDriver => _nvidiaDriver.Value;
+
+ private static bool HasExtension(string name)
+ {
+ int numExtensions = GL.GetInteger(GetPName.NumExtensions);
+
+ for (int extension = 0; extension < numExtensions; extension++)
+ {
+ if (GL.GetString(StringNameIndexed.Extensions, extension) == name)
+ {
+ return true;
+ }
+ }
+
+ Logger.PrintInfo(LogClass.Gpu, $"OpenGL extension {name} unavailable. You may experience some performance degradation");
+
+ return false;
+ }
+
+ private static bool IsNvidiaDriver()
+ {
+ return GL.GetString(StringName.Vendor).Equals("NVIDIA Corporation");
+ }
+
+ public static class Required
+ {
+ // Public accessors
+ public static bool EnhancedLayouts => _enhancedLayoutsRequired.Value;
+ public static bool TextureMirrorClamp => _textureMirrorClampRequired.Value;
+ public static bool ViewportArray => _viewportArrayRequired.Value;
+
+ // Private lazy backing variables
+ private static Lazy<bool> _enhancedLayoutsRequired = new Lazy<bool>(() => HasExtensionRequired(OglExtension.EnhancedLayouts, "GL_ARB_enhanced_layouts"));
+ private static Lazy<bool> _textureMirrorClampRequired = new Lazy<bool>(() => HasExtensionRequired(OglExtension.TextureMirrorClamp, "GL_EXT_texture_mirror_clamp"));
+ private static Lazy<bool> _viewportArrayRequired = new Lazy<bool>(() => HasExtensionRequired(OglExtension.ViewportArray, "GL_ARB_viewport_array"));
+
+ private static bool HasExtensionRequired(bool value, string name)
+ {
+ if (value)
+ {
+ return true;
+ }
+
+ Logger.PrintWarning(LogClass.Gpu, $"Required OpenGL extension {name} unavailable. You may experience some rendering issues");
+
+ return false;
+ }
+ }
+ }
+}
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglLimit.cs b/Ryujinx.Graphics/Gal/OpenGL/OglLimit.cs
new file mode 100644
index 00000000..2a227a37
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglLimit.cs
@@ -0,0 +1,12 @@
+using OpenTK.Graphics.OpenGL;
+using System;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ static class OglLimit
+ {
+ private static Lazy<int> _sMaxUboSize = new Lazy<int>(() => GL.GetInteger(GetPName.MaxUniformBlockSize));
+
+ public static int MaxUboSize => _sMaxUboSize.Value;
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs b/Ryujinx.Graphics/Gal/OpenGL/OglPipeline.cs
index 96d42e02..3c8ada3e 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglPipeline.cs
@@ -4,9 +4,9 @@ using System.Collections.Generic;
namespace Ryujinx.Graphics.Gal.OpenGL
{
- class OGLPipeline : IGalPipeline
+ class OglPipeline : IGalPipeline
{
- private static Dictionary<GalVertexAttribSize, int> AttribElements =
+ private static Dictionary<GalVertexAttribSize, int> _attribElements =
new Dictionary<GalVertexAttribSize, int>()
{
{ GalVertexAttribSize._32_32_32_32, 4 },
@@ -25,7 +25,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL
{ GalVertexAttribSize._11_11_10, 3 }
};
- private static Dictionary<GalVertexAttribSize, VertexAttribPointerType> FloatAttribTypes =
+ private static Dictionary<GalVertexAttribSize, VertexAttribPointerType> _floatAttribTypes =
new Dictionary<GalVertexAttribSize, VertexAttribPointerType>()
{
{ GalVertexAttribSize._32_32_32_32, VertexAttribPointerType.Float },
@@ -38,7 +38,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL
{ GalVertexAttribSize._16, VertexAttribPointerType.HalfFloat }
};
- private static Dictionary<GalVertexAttribSize, VertexAttribPointerType> SignedAttribTypes =
+ private static Dictionary<GalVertexAttribSize, VertexAttribPointerType> _signedAttribTypes =
new Dictionary<GalVertexAttribSize, VertexAttribPointerType>()
{
{ GalVertexAttribSize._32_32_32_32, VertexAttribPointerType.Int },
@@ -56,7 +56,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL
{ GalVertexAttribSize._10_10_10_2, VertexAttribPointerType.Int2101010Rev }
};
- private static Dictionary<GalVertexAttribSize, VertexAttribPointerType> UnsignedAttribTypes =
+ private static Dictionary<GalVertexAttribSize, VertexAttribPointerType> _unsignedAttribTypes =
new Dictionary<GalVertexAttribSize, VertexAttribPointerType>()
{
{ GalVertexAttribSize._32_32_32_32, VertexAttribPointerType.UnsignedInt },
@@ -75,30 +75,30 @@ namespace Ryujinx.Graphics.Gal.OpenGL
{ GalVertexAttribSize._11_11_10, VertexAttribPointerType.UnsignedInt10F11F11FRev }
};
- private GalPipelineState Old;
+ private GalPipelineState _old;
- private OGLConstBuffer Buffer;
- private OGLRenderTarget RenderTarget;
- private OGLRasterizer Rasterizer;
- private OGLShader Shader;
+ private OglConstBuffer _buffer;
+ private OglRenderTarget _renderTarget;
+ private OglRasterizer _rasterizer;
+ private OglShader _shader;
- private int VaoHandle;
+ private int _vaoHandle;
- public OGLPipeline(
- OGLConstBuffer Buffer,
- OGLRenderTarget RenderTarget,
- OGLRasterizer Rasterizer,
- OGLShader Shader)
+ public OglPipeline(
+ OglConstBuffer buffer,
+ OglRenderTarget renderTarget,
+ OglRasterizer rasterizer,
+ OglShader shader)
{
- this.Buffer = Buffer;
- this.RenderTarget = RenderTarget;
- this.Rasterizer = Rasterizer;
- this.Shader = Shader;
+ _buffer = buffer;
+ _renderTarget = renderTarget;
+ _rasterizer = rasterizer;
+ _shader = shader;
//These values match OpenGL's defaults
- Old = new GalPipelineState
+ _old = new GalPipelineState
{
- FrontFace = GalFrontFace.CCW,
+ FrontFace = GalFrontFace.Ccw,
CullFaceEnabled = false,
CullFace = GalCullFace.Back,
@@ -133,11 +133,11 @@ namespace Ryujinx.Graphics.Gal.OpenGL
PrimitiveRestartIndex = 0
};
- for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+ for (int index = 0; index < GalPipelineState.RenderTargetsCount; index++)
{
- Old.Blends[Index] = BlendState.Default;
+ _old.Blends[index] = BlendState.Default;
- Old.ColorMasks[Index] = ColorMaskState.Default;
+ _old.ColorMasks[index] = ColorMaskState.Default;
}
}
@@ -147,122 +147,122 @@ namespace Ryujinx.Graphics.Gal.OpenGL
BindVertexLayout(New);
- if (New.FramebufferSrgb != Old.FramebufferSrgb)
+ if (New.FramebufferSrgb != _old.FramebufferSrgb)
{
Enable(EnableCap.FramebufferSrgb, New.FramebufferSrgb);
- RenderTarget.FramebufferSrgb = New.FramebufferSrgb;
+ _renderTarget.FramebufferSrgb = New.FramebufferSrgb;
}
- if (New.FlipX != Old.FlipX || New.FlipY != Old.FlipY || New.Instance != Old.Instance)
+ if (New.FlipX != _old.FlipX || New.FlipY != _old.FlipY || New.Instance != _old.Instance)
{
- Shader.SetExtraData(New.FlipX, New.FlipY, New.Instance);
+ _shader.SetExtraData(New.FlipX, New.FlipY, New.Instance);
}
- if (New.FrontFace != Old.FrontFace)
+ if (New.FrontFace != _old.FrontFace)
{
- GL.FrontFace(OGLEnumConverter.GetFrontFace(New.FrontFace));
+ GL.FrontFace(OglEnumConverter.GetFrontFace(New.FrontFace));
}
- if (New.CullFaceEnabled != Old.CullFaceEnabled)
+ if (New.CullFaceEnabled != _old.CullFaceEnabled)
{
Enable(EnableCap.CullFace, New.CullFaceEnabled);
}
if (New.CullFaceEnabled)
{
- if (New.CullFace != Old.CullFace)
+ if (New.CullFace != _old.CullFace)
{
- GL.CullFace(OGLEnumConverter.GetCullFace(New.CullFace));
+ GL.CullFace(OglEnumConverter.GetCullFace(New.CullFace));
}
}
- if (New.DepthTestEnabled != Old.DepthTestEnabled)
+ if (New.DepthTestEnabled != _old.DepthTestEnabled)
{
Enable(EnableCap.DepthTest, New.DepthTestEnabled);
}
- if (New.DepthWriteEnabled != Old.DepthWriteEnabled)
+ if (New.DepthWriteEnabled != _old.DepthWriteEnabled)
{
GL.DepthMask(New.DepthWriteEnabled);
}
if (New.DepthTestEnabled)
{
- if (New.DepthFunc != Old.DepthFunc)
+ if (New.DepthFunc != _old.DepthFunc)
{
- GL.DepthFunc(OGLEnumConverter.GetDepthFunc(New.DepthFunc));
+ GL.DepthFunc(OglEnumConverter.GetDepthFunc(New.DepthFunc));
}
}
- if (New.DepthRangeNear != Old.DepthRangeNear ||
- New.DepthRangeFar != Old.DepthRangeFar)
+ if (New.DepthRangeNear != _old.DepthRangeNear ||
+ New.DepthRangeFar != _old.DepthRangeFar)
{
GL.DepthRange(New.DepthRangeNear, New.DepthRangeFar);
}
- if (New.StencilTestEnabled != Old.StencilTestEnabled)
+ if (New.StencilTestEnabled != _old.StencilTestEnabled)
{
Enable(EnableCap.StencilTest, New.StencilTestEnabled);
}
- if (New.StencilTwoSideEnabled != Old.StencilTwoSideEnabled)
+ if (New.StencilTwoSideEnabled != _old.StencilTwoSideEnabled)
{
Enable((EnableCap)All.StencilTestTwoSideExt, New.StencilTwoSideEnabled);
}
if (New.StencilTestEnabled)
{
- if (New.StencilBackFuncFunc != Old.StencilBackFuncFunc ||
- New.StencilBackFuncRef != Old.StencilBackFuncRef ||
- New.StencilBackFuncMask != Old.StencilBackFuncMask)
+ if (New.StencilBackFuncFunc != _old.StencilBackFuncFunc ||
+ New.StencilBackFuncRef != _old.StencilBackFuncRef ||
+ New.StencilBackFuncMask != _old.StencilBackFuncMask)
{
GL.StencilFuncSeparate(
StencilFace.Back,
- OGLEnumConverter.GetStencilFunc(New.StencilBackFuncFunc),
+ OglEnumConverter.GetStencilFunc(New.StencilBackFuncFunc),
New.StencilBackFuncRef,
New.StencilBackFuncMask);
}
- if (New.StencilBackOpFail != Old.StencilBackOpFail ||
- New.StencilBackOpZFail != Old.StencilBackOpZFail ||
- New.StencilBackOpZPass != Old.StencilBackOpZPass)
+ if (New.StencilBackOpFail != _old.StencilBackOpFail ||
+ New.StencilBackOpZFail != _old.StencilBackOpZFail ||
+ New.StencilBackOpZPass != _old.StencilBackOpZPass)
{
GL.StencilOpSeparate(
StencilFace.Back,
- OGLEnumConverter.GetStencilOp(New.StencilBackOpFail),
- OGLEnumConverter.GetStencilOp(New.StencilBackOpZFail),
- OGLEnumConverter.GetStencilOp(New.StencilBackOpZPass));
+ OglEnumConverter.GetStencilOp(New.StencilBackOpFail),
+ OglEnumConverter.GetStencilOp(New.StencilBackOpZFail),
+ OglEnumConverter.GetStencilOp(New.StencilBackOpZPass));
}
- if (New.StencilBackMask != Old.StencilBackMask)
+ if (New.StencilBackMask != _old.StencilBackMask)
{
GL.StencilMaskSeparate(StencilFace.Back, New.StencilBackMask);
}
- if (New.StencilFrontFuncFunc != Old.StencilFrontFuncFunc ||
- New.StencilFrontFuncRef != Old.StencilFrontFuncRef ||
- New.StencilFrontFuncMask != Old.StencilFrontFuncMask)
+ if (New.StencilFrontFuncFunc != _old.StencilFrontFuncFunc ||
+ New.StencilFrontFuncRef != _old.StencilFrontFuncRef ||
+ New.StencilFrontFuncMask != _old.StencilFrontFuncMask)
{
GL.StencilFuncSeparate(
StencilFace.Front,
- OGLEnumConverter.GetStencilFunc(New.StencilFrontFuncFunc),
+ OglEnumConverter.GetStencilFunc(New.StencilFrontFuncFunc),
New.StencilFrontFuncRef,
New.StencilFrontFuncMask);
}
- if (New.StencilFrontOpFail != Old.StencilFrontOpFail ||
- New.StencilFrontOpZFail != Old.StencilFrontOpZFail ||
- New.StencilFrontOpZPass != Old.StencilFrontOpZPass)
+ if (New.StencilFrontOpFail != _old.StencilFrontOpFail ||
+ New.StencilFrontOpZFail != _old.StencilFrontOpZFail ||
+ New.StencilFrontOpZPass != _old.StencilFrontOpZPass)
{
GL.StencilOpSeparate(
StencilFace.Front,
- OGLEnumConverter.GetStencilOp(New.StencilFrontOpFail),
- OGLEnumConverter.GetStencilOp(New.StencilFrontOpZFail),
- OGLEnumConverter.GetStencilOp(New.StencilFrontOpZPass));
+ OglEnumConverter.GetStencilOp(New.StencilFrontOpFail),
+ OglEnumConverter.GetStencilOp(New.StencilFrontOpZFail),
+ OglEnumConverter.GetStencilOp(New.StencilFrontOpZPass));
}
- if (New.StencilFrontMask != Old.StencilFrontMask)
+ if (New.StencilFrontMask != _old.StencilFrontMask)
{
GL.StencilMaskSeparate(StencilFace.Front, New.StencilFrontMask);
}
@@ -277,42 +277,42 @@ namespace Ryujinx.Graphics.Gal.OpenGL
int scissorsApplied = 0;
bool applyToAll = false;
- for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+ for (int index = 0; index < GalPipelineState.RenderTargetsCount; index++)
{
- if (New.ScissorTestEnabled[Index])
+ if (New.ScissorTestEnabled[index])
{
// If viewport arrays are unavailable apply first scissor test to all or
// there is only 1 scissor test and it's the first, the scissor test applies to all viewports
- if (!OGLExtension.Required.ViewportArray || (Index == 0 && New.ScissorTestCount == 1))
+ if (!OglExtension.Required.ViewportArray || (index == 0 && New.ScissorTestCount == 1))
{
GL.Enable(EnableCap.ScissorTest);
applyToAll = true;
}
else
{
- GL.Enable(IndexedEnableCap.ScissorTest, Index);
+ GL.Enable(IndexedEnableCap.ScissorTest, index);
}
- if (New.ScissorTestEnabled[Index] != Old.ScissorTestEnabled[Index] ||
- New.ScissorTestX[Index] != Old.ScissorTestX[Index] ||
- New.ScissorTestY[Index] != Old.ScissorTestY[Index] ||
- New.ScissorTestWidth[Index] != Old.ScissorTestWidth[Index] ||
- New.ScissorTestHeight[Index] != Old.ScissorTestHeight[Index])
+ if (New.ScissorTestEnabled[index] != _old.ScissorTestEnabled[index] ||
+ New.ScissorTestX[index] != _old.ScissorTestX[index] ||
+ New.ScissorTestY[index] != _old.ScissorTestY[index] ||
+ New.ScissorTestWidth[index] != _old.ScissorTestWidth[index] ||
+ New.ScissorTestHeight[index] != _old.ScissorTestHeight[index])
{
if (applyToAll)
{
- GL.Scissor(New.ScissorTestX[Index], New.ScissorTestY[Index],
- New.ScissorTestWidth[Index], New.ScissorTestHeight[Index]);
+ GL.Scissor(New.ScissorTestX[index], New.ScissorTestY[index],
+ New.ScissorTestWidth[index], New.ScissorTestHeight[index]);
}
else
{
- GL.ScissorIndexed(Index, New.ScissorTestX[Index], New.ScissorTestY[Index],
- New.ScissorTestWidth[Index], New.ScissorTestHeight[Index]);
+ GL.ScissorIndexed(index, New.ScissorTestX[index], New.ScissorTestY[index],
+ New.ScissorTestWidth[index], New.ScissorTestHeight[index]);
}
}
- // If all scissor tests have been applied, or viewport arrays are unavailable we can skip remaining itterations
- if (!OGLExtension.Required.ViewportArray || ++scissorsApplied == New.ScissorTestCount)
+ // If all scissor tests have been applied, or viewport arrays are unavailable we can skip remaining iterations
+ if (!OglExtension.Required.ViewportArray || ++scissorsApplied == New.ScissorTestCount)
{
break;
}
@@ -323,26 +323,26 @@ namespace Ryujinx.Graphics.Gal.OpenGL
if (New.BlendIndependent)
{
- for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+ for (int index = 0; index < GalPipelineState.RenderTargetsCount; index++)
{
- SetBlendState(Index, New.Blends[Index], Old.Blends[Index]);
+ SetBlendState(index, New.Blends[index], _old.Blends[index]);
}
}
else
{
- if (New.BlendIndependent != Old.BlendIndependent)
+ if (New.BlendIndependent != _old.BlendIndependent)
{
SetAllBlendState(New.Blends[0]);
}
else
{
- SetBlendState(New.Blends[0], Old.Blends[0]);
+ SetBlendState(New.Blends[0], _old.Blends[0]);
}
}
if (New.ColorMaskCommon)
{
- if (New.ColorMaskCommon != Old.ColorMaskCommon || !New.ColorMasks[0].Equals(Old.ColorMasks[0]))
+ if (New.ColorMaskCommon != _old.ColorMaskCommon || !New.ColorMasks[0].Equals(_old.ColorMasks[0]))
{
GL.ColorMask(
New.ColorMasks[0].Red,
@@ -353,39 +353,39 @@ namespace Ryujinx.Graphics.Gal.OpenGL
}
else
{
- for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+ for (int index = 0; index < GalPipelineState.RenderTargetsCount; index++)
{
- if (!New.ColorMasks[Index].Equals(Old.ColorMasks[Index]))
+ if (!New.ColorMasks[index].Equals(_old.ColorMasks[index]))
{
GL.ColorMask(
- Index,
- New.ColorMasks[Index].Red,
- New.ColorMasks[Index].Green,
- New.ColorMasks[Index].Blue,
- New.ColorMasks[Index].Alpha);
+ index,
+ New.ColorMasks[index].Red,
+ New.ColorMasks[index].Green,
+ New.ColorMasks[index].Blue,
+ New.ColorMasks[index].Alpha);
}
}
}
- if (New.PrimitiveRestartEnabled != Old.PrimitiveRestartEnabled)
+ if (New.PrimitiveRestartEnabled != _old.PrimitiveRestartEnabled)
{
Enable(EnableCap.PrimitiveRestart, New.PrimitiveRestartEnabled);
}
if (New.PrimitiveRestartEnabled)
{
- if (New.PrimitiveRestartIndex != Old.PrimitiveRestartIndex)
+ if (New.PrimitiveRestartIndex != _old.PrimitiveRestartIndex)
{
GL.PrimitiveRestartIndex(New.PrimitiveRestartIndex);
}
}
- Old = New;
+ _old = New;
}
- public void Unbind(GalPipelineState State)
+ public void Unbind(GalPipelineState state)
{
- if (State.ScissorTestCount > 0)
+ if (state.ScissorTestCount > 0)
{
GL.Disable(EnableCap.ScissorTest);
}
@@ -400,29 +400,29 @@ namespace Ryujinx.Graphics.Gal.OpenGL
if (New.SeparateAlpha)
{
GL.BlendEquationSeparate(
- OGLEnumConverter.GetBlendEquation(New.EquationRgb),
- OGLEnumConverter.GetBlendEquation(New.EquationAlpha));
+ OglEnumConverter.GetBlendEquation(New.EquationRgb),
+ OglEnumConverter.GetBlendEquation(New.EquationAlpha));
GL.BlendFuncSeparate(
- (BlendingFactorSrc) OGLEnumConverter.GetBlendFactor(New.FuncSrcRgb),
- (BlendingFactorDest)OGLEnumConverter.GetBlendFactor(New.FuncDstRgb),
- (BlendingFactorSrc) OGLEnumConverter.GetBlendFactor(New.FuncSrcAlpha),
- (BlendingFactorDest)OGLEnumConverter.GetBlendFactor(New.FuncDstAlpha));
+ (BlendingFactorSrc) OglEnumConverter.GetBlendFactor(New.FuncSrcRgb),
+ (BlendingFactorDest)OglEnumConverter.GetBlendFactor(New.FuncDstRgb),
+ (BlendingFactorSrc) OglEnumConverter.GetBlendFactor(New.FuncSrcAlpha),
+ (BlendingFactorDest)OglEnumConverter.GetBlendFactor(New.FuncDstAlpha));
}
else
{
- GL.BlendEquation(OGLEnumConverter.GetBlendEquation(New.EquationRgb));
+ GL.BlendEquation(OglEnumConverter.GetBlendEquation(New.EquationRgb));
GL.BlendFunc(
- OGLEnumConverter.GetBlendFactor(New.FuncSrcRgb),
- OGLEnumConverter.GetBlendFactor(New.FuncDstRgb));
+ OglEnumConverter.GetBlendFactor(New.FuncSrcRgb),
+ OglEnumConverter.GetBlendFactor(New.FuncDstRgb));
}
}
}
- private void SetBlendState(BlendState New, BlendState Old)
+ private void SetBlendState(BlendState New, BlendState old)
{
- if (New.Enabled != Old.Enabled)
+ if (New.Enabled != old.Enabled)
{
Enable(EnableCap.Blend, New.Enabled);
}
@@ -431,91 +431,91 @@ namespace Ryujinx.Graphics.Gal.OpenGL
{
if (New.SeparateAlpha)
{
- if (New.EquationRgb != Old.EquationRgb ||
- New.EquationAlpha != Old.EquationAlpha)
+ if (New.EquationRgb != old.EquationRgb ||
+ New.EquationAlpha != old.EquationAlpha)
{
GL.BlendEquationSeparate(
- OGLEnumConverter.GetBlendEquation(New.EquationRgb),
- OGLEnumConverter.GetBlendEquation(New.EquationAlpha));
+ OglEnumConverter.GetBlendEquation(New.EquationRgb),
+ OglEnumConverter.GetBlendEquation(New.EquationAlpha));
}
- if (New.FuncSrcRgb != Old.FuncSrcRgb ||
- New.FuncDstRgb != Old.FuncDstRgb ||
- New.FuncSrcAlpha != Old.FuncSrcAlpha ||
- New.FuncDstAlpha != Old.FuncDstAlpha)
+ if (New.FuncSrcRgb != old.FuncSrcRgb ||
+ New.FuncDstRgb != old.FuncDstRgb ||
+ New.FuncSrcAlpha != old.FuncSrcAlpha ||
+ New.FuncDstAlpha != old.FuncDstAlpha)
{
GL.BlendFuncSeparate(
- (BlendingFactorSrc) OGLEnumConverter.GetBlendFactor(New.FuncSrcRgb),
- (BlendingFactorDest)OGLEnumConverter.GetBlendFactor(New.FuncDstRgb),
- (BlendingFactorSrc) OGLEnumConverter.GetBlendFactor(New.FuncSrcAlpha),
- (BlendingFactorDest)OGLEnumConverter.GetBlendFactor(New.FuncDstAlpha));
+ (BlendingFactorSrc) OglEnumConverter.GetBlendFactor(New.FuncSrcRgb),
+ (BlendingFactorDest)OglEnumConverter.GetBlendFactor(New.FuncDstRgb),
+ (BlendingFactorSrc) OglEnumConverter.GetBlendFactor(New.FuncSrcAlpha),
+ (BlendingFactorDest)OglEnumConverter.GetBlendFactor(New.FuncDstAlpha));
}
}
else
{
- if (New.EquationRgb != Old.EquationRgb)
+ if (New.EquationRgb != old.EquationRgb)
{
- GL.BlendEquation(OGLEnumConverter.GetBlendEquation(New.EquationRgb));
+ GL.BlendEquation(OglEnumConverter.GetBlendEquation(New.EquationRgb));
}
- if (New.FuncSrcRgb != Old.FuncSrcRgb ||
- New.FuncDstRgb != Old.FuncDstRgb)
+ if (New.FuncSrcRgb != old.FuncSrcRgb ||
+ New.FuncDstRgb != old.FuncDstRgb)
{
GL.BlendFunc(
- OGLEnumConverter.GetBlendFactor(New.FuncSrcRgb),
- OGLEnumConverter.GetBlendFactor(New.FuncDstRgb));
+ OglEnumConverter.GetBlendFactor(New.FuncSrcRgb),
+ OglEnumConverter.GetBlendFactor(New.FuncDstRgb));
}
}
}
}
- private void SetBlendState(int Index, BlendState New, BlendState Old)
+ private void SetBlendState(int index, BlendState New, BlendState old)
{
- if (New.Enabled != Old.Enabled)
+ if (New.Enabled != old.Enabled)
{
- Enable(IndexedEnableCap.Blend, Index, New.Enabled);
+ Enable(IndexedEnableCap.Blend, index, New.Enabled);
}
if (New.Enabled)
{
if (New.SeparateAlpha)
{
- if (New.EquationRgb != Old.EquationRgb ||
- New.EquationAlpha != Old.EquationAlpha)
+ if (New.EquationRgb != old.EquationRgb ||
+ New.EquationAlpha != old.EquationAlpha)
{
GL.BlendEquationSeparate(
- Index,
- OGLEnumConverter.GetBlendEquation(New.EquationRgb),
- OGLEnumConverter.GetBlendEquation(New.EquationAlpha));
+ index,
+ OglEnumConverter.GetBlendEquation(New.EquationRgb),
+ OglEnumConverter.GetBlendEquation(New.EquationAlpha));
}
- if (New.FuncSrcRgb != Old.FuncSrcRgb ||
- New.FuncDstRgb != Old.FuncDstRgb ||
- New.FuncSrcAlpha != Old.FuncSrcAlpha ||
- New.FuncDstAlpha != Old.FuncDstAlpha)
+ if (New.FuncSrcRgb != old.FuncSrcRgb ||
+ New.FuncDstRgb != old.FuncDstRgb ||
+ New.FuncSrcAlpha != old.FuncSrcAlpha ||
+ New.FuncDstAlpha != old.FuncDstAlpha)
{
GL.BlendFuncSeparate(
- Index,
- (BlendingFactorSrc) OGLEnumConverter.GetBlendFactor(New.FuncSrcRgb),
- (BlendingFactorDest)OGLEnumConverter.GetBlendFactor(New.FuncDstRgb),
- (BlendingFactorSrc) OGLEnumConverter.GetBlendFactor(New.FuncSrcAlpha),
- (BlendingFactorDest)OGLEnumConverter.GetBlendFactor(New.FuncDstAlpha));
+ index,
+ (BlendingFactorSrc) OglEnumConverter.GetBlendFactor(New.FuncSrcRgb),
+ (BlendingFactorDest)OglEnumConverter.GetBlendFactor(New.FuncDstRgb),
+ (BlendingFactorSrc) OglEnumConverter.GetBlendFactor(New.FuncSrcAlpha),
+ (BlendingFactorDest)OglEnumConverter.GetBlendFactor(New.FuncDstAlpha));
}
}
else
{
- if (New.EquationRgb != Old.EquationRgb)
+ if (New.EquationRgb != old.EquationRgb)
{
- GL.BlendEquation(Index, OGLEnumConverter.GetBlendEquation(New.EquationRgb));
+ GL.BlendEquation(index, OglEnumConverter.GetBlendEquation(New.EquationRgb));
}
- if (New.FuncSrcRgb != Old.FuncSrcRgb ||
- New.FuncDstRgb != Old.FuncDstRgb)
+ if (New.FuncSrcRgb != old.FuncSrcRgb ||
+ New.FuncDstRgb != old.FuncDstRgb)
{
GL.BlendFunc(
- Index,
- (BlendingFactorSrc) OGLEnumConverter.GetBlendFactor(New.FuncSrcRgb),
- (BlendingFactorDest)OGLEnumConverter.GetBlendFactor(New.FuncDstRgb));
+ index,
+ (BlendingFactorSrc) OglEnumConverter.GetBlendFactor(New.FuncSrcRgb),
+ (BlendingFactorDest)OglEnumConverter.GetBlendFactor(New.FuncDstRgb));
}
}
}
@@ -523,310 +523,310 @@ namespace Ryujinx.Graphics.Gal.OpenGL
private void BindConstBuffers(GalPipelineState New)
{
- int FreeBinding = OGLShader.ReservedCbufCount;
+ int freeBinding = OglShader.ReservedCbufCount;
- void BindIfNotNull(OGLShaderStage Stage)
+ void BindIfNotNull(OglShaderStage stage)
{
- if (Stage != null)
+ if (stage != null)
{
- foreach (ShaderDeclInfo DeclInfo in Stage.ConstBufferUsage)
+ foreach (ShaderDeclInfo declInfo in stage.ConstBufferUsage)
{
- long Key = New.ConstBufferKeys[(int)Stage.Type][DeclInfo.Cbuf];
+ long key = New.ConstBufferKeys[(int)stage.Type][declInfo.Cbuf];
- if (Key != 0 && Buffer.TryGetUbo(Key, out int UboHandle))
+ if (key != 0 && _buffer.TryGetUbo(key, out int uboHandle))
{
- GL.BindBufferBase(BufferRangeTarget.UniformBuffer, FreeBinding, UboHandle);
+ GL.BindBufferBase(BufferRangeTarget.UniformBuffer, freeBinding, uboHandle);
}
- FreeBinding++;
+ freeBinding++;
}
}
}
- BindIfNotNull(Shader.Current.Vertex);
- BindIfNotNull(Shader.Current.TessControl);
- BindIfNotNull(Shader.Current.TessEvaluation);
- BindIfNotNull(Shader.Current.Geometry);
- BindIfNotNull(Shader.Current.Fragment);
+ BindIfNotNull(_shader.Current.Vertex);
+ BindIfNotNull(_shader.Current.TessControl);
+ BindIfNotNull(_shader.Current.TessEvaluation);
+ BindIfNotNull(_shader.Current.Geometry);
+ BindIfNotNull(_shader.Current.Fragment);
}
private void BindVertexLayout(GalPipelineState New)
{
- foreach (GalVertexBinding Binding in New.VertexBindings)
+ foreach (GalVertexBinding binding in New.VertexBindings)
{
- if (!Binding.Enabled || !Rasterizer.TryGetVbo(Binding.VboKey, out int VboHandle))
+ if (!binding.Enabled || !_rasterizer.TryGetVbo(binding.VboKey, out int vboHandle))
{
continue;
}
- if (VaoHandle == 0)
+ if (_vaoHandle == 0)
{
- VaoHandle = GL.GenVertexArray();
+ _vaoHandle = GL.GenVertexArray();
//Vertex arrays shouldn't be used anywhere else in OpenGL's backend
//if you want to use it, move this line out of the if
- GL.BindVertexArray(VaoHandle);
+ GL.BindVertexArray(_vaoHandle);
}
- foreach (GalVertexAttrib Attrib in Binding.Attribs)
+ foreach (GalVertexAttrib attrib in binding.Attribs)
{
//Skip uninitialized attributes.
- if (Attrib.Size == 0)
+ if (attrib.Size == 0)
{
continue;
}
- GL.BindBuffer(BufferTarget.ArrayBuffer, VboHandle);
+ GL.BindBuffer(BufferTarget.ArrayBuffer, vboHandle);
- bool Unsigned =
- Attrib.Type == GalVertexAttribType.Unorm ||
- Attrib.Type == GalVertexAttribType.Uint ||
- Attrib.Type == GalVertexAttribType.Uscaled;
+ bool unsigned =
+ attrib.Type == GalVertexAttribType.Unorm ||
+ attrib.Type == GalVertexAttribType.Uint ||
+ attrib.Type == GalVertexAttribType.Uscaled;
- bool Normalize =
- Attrib.Type == GalVertexAttribType.Snorm ||
- Attrib.Type == GalVertexAttribType.Unorm;
+ bool normalize =
+ attrib.Type == GalVertexAttribType.Snorm ||
+ attrib.Type == GalVertexAttribType.Unorm;
- VertexAttribPointerType Type = 0;
+ VertexAttribPointerType type = 0;
- if (Attrib.Type == GalVertexAttribType.Float)
+ if (attrib.Type == GalVertexAttribType.Float)
{
- Type = GetType(FloatAttribTypes, Attrib);
+ type = GetType(_floatAttribTypes, attrib);
}
else
{
- if (Unsigned)
+ if (unsigned)
{
- Type = GetType(UnsignedAttribTypes, Attrib);
+ type = GetType(_unsignedAttribTypes, attrib);
}
else
{
- Type = GetType(SignedAttribTypes, Attrib);
+ type = GetType(_signedAttribTypes, attrib);
}
}
- if (!AttribElements.TryGetValue(Attrib.Size, out int Size))
+ if (!_attribElements.TryGetValue(attrib.Size, out int size))
{
- throw new InvalidOperationException("Invalid attribute size \"" + Attrib.Size + "\"!");
+ throw new InvalidOperationException("Invalid attribute size \"" + attrib.Size + "\"!");
}
- int Offset = Attrib.Offset;
+ int offset = attrib.Offset;
- if (Binding.Stride != 0)
+ if (binding.Stride != 0)
{
- GL.EnableVertexAttribArray(Attrib.Index);
+ GL.EnableVertexAttribArray(attrib.Index);
- if (Attrib.Type == GalVertexAttribType.Sint ||
- Attrib.Type == GalVertexAttribType.Uint)
+ if (attrib.Type == GalVertexAttribType.Sint ||
+ attrib.Type == GalVertexAttribType.Uint)
{
- IntPtr Pointer = new IntPtr(Offset);
+ IntPtr pointer = new IntPtr(offset);
- VertexAttribIntegerType IType = (VertexAttribIntegerType)Type;
+ VertexAttribIntegerType iType = (VertexAttribIntegerType)type;
- GL.VertexAttribIPointer(Attrib.Index, Size, IType, Binding.Stride, Pointer);
+ GL.VertexAttribIPointer(attrib.Index, size, iType, binding.Stride, pointer);
}
else
{
- GL.VertexAttribPointer(Attrib.Index, Size, Type, Normalize, Binding.Stride, Offset);
+ GL.VertexAttribPointer(attrib.Index, size, type, normalize, binding.Stride, offset);
}
}
else
{
- GL.DisableVertexAttribArray(Attrib.Index);
+ GL.DisableVertexAttribArray(attrib.Index);
- SetConstAttrib(Attrib);
+ SetConstAttrib(attrib);
}
- if (Binding.Instanced && Binding.Divisor != 0)
+ if (binding.Instanced && binding.Divisor != 0)
{
- GL.VertexAttribDivisor(Attrib.Index, 1);
+ GL.VertexAttribDivisor(attrib.Index, 1);
}
else
{
- GL.VertexAttribDivisor(Attrib.Index, 0);
+ GL.VertexAttribDivisor(attrib.Index, 0);
}
}
}
}
- private static VertexAttribPointerType GetType(Dictionary<GalVertexAttribSize, VertexAttribPointerType> Dict, GalVertexAttrib Attrib)
+ private static VertexAttribPointerType GetType(Dictionary<GalVertexAttribSize, VertexAttribPointerType> dict, GalVertexAttrib attrib)
{
- if (!Dict.TryGetValue(Attrib.Size, out VertexAttribPointerType Type))
+ if (!dict.TryGetValue(attrib.Size, out VertexAttribPointerType type))
{
- ThrowUnsupportedAttrib(Attrib);
+ ThrowUnsupportedAttrib(attrib);
}
- return Type;
+ return type;
}
- private unsafe static void SetConstAttrib(GalVertexAttrib Attrib)
+ private static unsafe void SetConstAttrib(GalVertexAttrib attrib)
{
- if (Attrib.Size == GalVertexAttribSize._10_10_10_2 ||
- Attrib.Size == GalVertexAttribSize._11_11_10)
+ if (attrib.Size == GalVertexAttribSize._10_10_10_2 ||
+ attrib.Size == GalVertexAttribSize._11_11_10)
{
- ThrowUnsupportedAttrib(Attrib);
+ ThrowUnsupportedAttrib(attrib);
}
- fixed (byte* Ptr = Attrib.Data)
+ fixed (byte* ptr = attrib.Data)
{
- if (Attrib.Type == GalVertexAttribType.Unorm)
+ if (attrib.Type == GalVertexAttribType.Unorm)
{
- switch (Attrib.Size)
+ switch (attrib.Size)
{
case GalVertexAttribSize._8:
case GalVertexAttribSize._8_8:
case GalVertexAttribSize._8_8_8:
case GalVertexAttribSize._8_8_8_8:
- GL.VertexAttrib4N((uint)Attrib.Index, Ptr);
+ GL.VertexAttrib4N((uint)attrib.Index, ptr);
break;
case GalVertexAttribSize._16:
case GalVertexAttribSize._16_16:
case GalVertexAttribSize._16_16_16:
case GalVertexAttribSize._16_16_16_16:
- GL.VertexAttrib4N((uint)Attrib.Index, (ushort*)Ptr);
+ GL.VertexAttrib4N((uint)attrib.Index, (ushort*)ptr);
break;
case GalVertexAttribSize._32:
case GalVertexAttribSize._32_32:
case GalVertexAttribSize._32_32_32:
case GalVertexAttribSize._32_32_32_32:
- GL.VertexAttrib4N((uint)Attrib.Index, (uint*)Ptr);
+ GL.VertexAttrib4N((uint)attrib.Index, (uint*)ptr);
break;
}
}
- else if (Attrib.Type == GalVertexAttribType.Snorm)
+ else if (attrib.Type == GalVertexAttribType.Snorm)
{
- switch (Attrib.Size)
+ switch (attrib.Size)
{
case GalVertexAttribSize._8:
case GalVertexAttribSize._8_8:
case GalVertexAttribSize._8_8_8:
case GalVertexAttribSize._8_8_8_8:
- GL.VertexAttrib4N((uint)Attrib.Index, (sbyte*)Ptr);
+ GL.VertexAttrib4N((uint)attrib.Index, (sbyte*)ptr);
break;
case GalVertexAttribSize._16:
case GalVertexAttribSize._16_16:
case GalVertexAttribSize._16_16_16:
case GalVertexAttribSize._16_16_16_16:
- GL.VertexAttrib4N((uint)Attrib.Index, (short*)Ptr);
+ GL.VertexAttrib4N((uint)attrib.Index, (short*)ptr);
break;
case GalVertexAttribSize._32:
case GalVertexAttribSize._32_32:
case GalVertexAttribSize._32_32_32:
case GalVertexAttribSize._32_32_32_32:
- GL.VertexAttrib4N((uint)Attrib.Index, (int*)Ptr);
+ GL.VertexAttrib4N((uint)attrib.Index, (int*)ptr);
break;
}
}
- else if (Attrib.Type == GalVertexAttribType.Uint)
+ else if (attrib.Type == GalVertexAttribType.Uint)
{
- switch (Attrib.Size)
+ switch (attrib.Size)
{
case GalVertexAttribSize._8:
case GalVertexAttribSize._8_8:
case GalVertexAttribSize._8_8_8:
case GalVertexAttribSize._8_8_8_8:
- GL.VertexAttribI4((uint)Attrib.Index, Ptr);
+ GL.VertexAttribI4((uint)attrib.Index, ptr);
break;
case GalVertexAttribSize._16:
case GalVertexAttribSize._16_16:
case GalVertexAttribSize._16_16_16:
case GalVertexAttribSize._16_16_16_16:
- GL.VertexAttribI4((uint)Attrib.Index, (ushort*)Ptr);
+ GL.VertexAttribI4((uint)attrib.Index, (ushort*)ptr);
break;
case GalVertexAttribSize._32:
case GalVertexAttribSize._32_32:
case GalVertexAttribSize._32_32_32:
case GalVertexAttribSize._32_32_32_32:
- GL.VertexAttribI4((uint)Attrib.Index, (uint*)Ptr);
+ GL.VertexAttribI4((uint)attrib.Index, (uint*)ptr);
break;
}
}
- else if (Attrib.Type == GalVertexAttribType.Sint)
+ else if (attrib.Type == GalVertexAttribType.Sint)
{
- switch (Attrib.Size)
+ switch (attrib.Size)
{
case GalVertexAttribSize._8:
case GalVertexAttribSize._8_8:
case GalVertexAttribSize._8_8_8:
case GalVertexAttribSize._8_8_8_8:
- GL.VertexAttribI4((uint)Attrib.Index, (sbyte*)Ptr);
+ GL.VertexAttribI4((uint)attrib.Index, (sbyte*)ptr);
break;
case GalVertexAttribSize._16:
case GalVertexAttribSize._16_16:
case GalVertexAttribSize._16_16_16:
case GalVertexAttribSize._16_16_16_16:
- GL.VertexAttribI4((uint)Attrib.Index, (short*)Ptr);
+ GL.VertexAttribI4((uint)attrib.Index, (short*)ptr);
break;
case GalVertexAttribSize._32:
case GalVertexAttribSize._32_32:
case GalVertexAttribSize._32_32_32:
case GalVertexAttribSize._32_32_32_32:
- GL.VertexAttribI4((uint)Attrib.Index, (int*)Ptr);
+ GL.VertexAttribI4((uint)attrib.Index, (int*)ptr);
break;
}
}
- else if (Attrib.Type == GalVertexAttribType.Float)
+ else if (attrib.Type == GalVertexAttribType.Float)
{
- switch (Attrib.Size)
+ switch (attrib.Size)
{
case GalVertexAttribSize._32:
case GalVertexAttribSize._32_32:
case GalVertexAttribSize._32_32_32:
case GalVertexAttribSize._32_32_32_32:
- GL.VertexAttrib4(Attrib.Index, (float*)Ptr);
+ GL.VertexAttrib4(attrib.Index, (float*)ptr);
break;
- default: ThrowUnsupportedAttrib(Attrib); break;
+ default: ThrowUnsupportedAttrib(attrib); break;
}
}
}
}
- private static void ThrowUnsupportedAttrib(GalVertexAttrib Attrib)
+ private static void ThrowUnsupportedAttrib(GalVertexAttrib attrib)
{
- throw new NotImplementedException("Unsupported size \"" + Attrib.Size + "\" on type \"" + Attrib.Type + "\"!");
+ throw new NotImplementedException("Unsupported size \"" + attrib.Size + "\" on type \"" + attrib.Type + "\"!");
}
- private void Enable(EnableCap Cap, bool Enabled)
+ private void Enable(EnableCap cap, bool enabled)
{
- if (Enabled)
+ if (enabled)
{
- GL.Enable(Cap);
+ GL.Enable(cap);
}
else
{
- GL.Disable(Cap);
+ GL.Disable(cap);
}
}
- private void Enable(IndexedEnableCap Cap, int Index, bool Enabled)
+ private void Enable(IndexedEnableCap cap, int index, bool enabled)
{
- if (Enabled)
+ if (enabled)
{
- GL.Enable(Cap, Index);
+ GL.Enable(cap, index);
}
else
{
- GL.Disable(Cap, Index);
+ GL.Disable(cap, index);
}
}
public void ResetDepthMask()
{
- Old.DepthWriteEnabled = true;
+ _old.DepthWriteEnabled = true;
}
- public void ResetColorMask(int Index)
+ public void ResetColorMask(int index)
{
- Old.ColorMasks[Index] = ColorMaskState.Default;
+ _old.ColorMasks[index] = ColorMaskState.Default;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglRasterizer.cs b/Ryujinx.Graphics/Gal/OpenGL/OglRasterizer.cs
new file mode 100644
index 00000000..c19911c5
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglRasterizer.cs
@@ -0,0 +1,207 @@
+using OpenTK.Graphics.OpenGL;
+using System;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ class OglRasterizer : IGalRasterizer
+ {
+ private const long MaxVertexBufferCacheSize = 128 * 1024 * 1024;
+ private const long MaxIndexBufferCacheSize = 64 * 1024 * 1024;
+
+ private int[] _vertexBuffers;
+
+ private OglCachedResource<int> _vboCache;
+ private OglCachedResource<int> _iboCache;
+
+ private struct IbInfo
+ {
+ public int Count;
+ public int ElemSizeLog2;
+
+ public DrawElementsType Type;
+ }
+
+ private IbInfo _indexBuffer;
+
+ public OglRasterizer()
+ {
+ _vertexBuffers = new int[32];
+
+ _vboCache = new OglCachedResource<int>(GL.DeleteBuffer, MaxVertexBufferCacheSize);
+ _iboCache = new OglCachedResource<int>(GL.DeleteBuffer, MaxIndexBufferCacheSize);
+
+ _indexBuffer = new IbInfo();
+ }
+
+ public void LockCaches()
+ {
+ _vboCache.Lock();
+ _iboCache.Lock();
+ }
+
+ public void UnlockCaches()
+ {
+ _vboCache.Unlock();
+ _iboCache.Unlock();
+ }
+
+ public void ClearBuffers(
+ GalClearBufferFlags flags,
+ int attachment,
+ float red,
+ float green,
+ float blue,
+ float alpha,
+ float depth,
+ int stencil)
+ {
+ GL.ColorMask(
+ attachment,
+ flags.HasFlag(GalClearBufferFlags.ColorRed),
+ flags.HasFlag(GalClearBufferFlags.ColorGreen),
+ flags.HasFlag(GalClearBufferFlags.ColorBlue),
+ flags.HasFlag(GalClearBufferFlags.ColorAlpha));
+
+ GL.ClearBuffer(ClearBuffer.Color, attachment, new float[] { red, green, blue, alpha });
+
+ GL.ColorMask(attachment, true, true, true, true);
+ GL.DepthMask(true);
+
+ if (flags.HasFlag(GalClearBufferFlags.Depth))
+ {
+ GL.ClearBuffer(ClearBuffer.Depth, 0, ref depth);
+ }
+
+ if (flags.HasFlag(GalClearBufferFlags.Stencil))
+ {
+ GL.ClearBuffer(ClearBuffer.Stencil, 0, ref stencil);
+ }
+ }
+
+ public bool IsVboCached(long key, long dataSize)
+ {
+ return _vboCache.TryGetSize(key, out long size) && size == dataSize;
+ }
+
+ public bool IsIboCached(long key, long dataSize)
+ {
+ return _iboCache.TryGetSize(key, out long size) && size == dataSize;
+ }
+
+ public void CreateVbo(long key, int dataSize, IntPtr hostAddress)
+ {
+ int handle = GL.GenBuffer();
+
+ _vboCache.AddOrUpdate(key, handle, dataSize);
+
+ IntPtr length = new IntPtr(dataSize);
+
+ GL.BindBuffer(BufferTarget.ArrayBuffer, handle);
+ GL.BufferData(BufferTarget.ArrayBuffer, length, hostAddress, BufferUsageHint.StreamDraw);
+ }
+
+ public void CreateVbo(long key, byte[] data)
+ {
+ int handle = GL.GenBuffer();
+
+ _vboCache.AddOrUpdate(key, handle, data.Length);
+
+ IntPtr length = new IntPtr(data.Length);
+
+ GL.BindBuffer(BufferTarget.ArrayBuffer, handle);
+ GL.BufferData(BufferTarget.ArrayBuffer, length, data, BufferUsageHint.StreamDraw);
+ }
+
+ public void CreateIbo(long key, int dataSize, IntPtr hostAddress)
+ {
+ int handle = GL.GenBuffer();
+
+ _iboCache.AddOrUpdate(key, handle, (uint)dataSize);
+
+ IntPtr length = new IntPtr(dataSize);
+
+ GL.BindBuffer(BufferTarget.ElementArrayBuffer, handle);
+ GL.BufferData(BufferTarget.ElementArrayBuffer, length, hostAddress, BufferUsageHint.StreamDraw);
+ }
+
+ public void CreateIbo(long key, int dataSize, byte[] buffer)
+ {
+ int handle = GL.GenBuffer();
+
+ _iboCache.AddOrUpdate(key, handle, dataSize);
+
+ IntPtr length = new IntPtr(buffer.Length);
+
+ GL.BindBuffer(BufferTarget.ElementArrayBuffer, handle);
+ GL.BufferData(BufferTarget.ElementArrayBuffer, length, buffer, BufferUsageHint.StreamDraw);
+ }
+
+ public void SetIndexArray(int size, GalIndexFormat format)
+ {
+ _indexBuffer.Type = OglEnumConverter.GetDrawElementsType(format);
+
+ _indexBuffer.Count = size >> (int)format;
+
+ _indexBuffer.ElemSizeLog2 = (int)format;
+ }
+
+ public void DrawArrays(int first, int count, GalPrimitiveType primType)
+ {
+ if (count == 0)
+ {
+ return;
+ }
+
+ if (primType == GalPrimitiveType.Quads)
+ {
+ for (int offset = 0; offset < count; offset += 4)
+ {
+ GL.DrawArrays(PrimitiveType.TriangleFan, first + offset, 4);
+ }
+ }
+ else if (primType == GalPrimitiveType.QuadStrip)
+ {
+ GL.DrawArrays(PrimitiveType.TriangleFan, first, 4);
+
+ for (int offset = 2; offset < count; offset += 2)
+ {
+ GL.DrawArrays(PrimitiveType.TriangleFan, first + offset, 4);
+ }
+ }
+ else
+ {
+ GL.DrawArrays(OglEnumConverter.GetPrimitiveType(primType), first, count);
+ }
+ }
+
+ public void DrawElements(long iboKey, int first, int vertexBase, GalPrimitiveType primType)
+ {
+ if (!_iboCache.TryGetValue(iboKey, out int iboHandle))
+ {
+ return;
+ }
+
+ PrimitiveType mode = OglEnumConverter.GetPrimitiveType(primType);
+
+ GL.BindBuffer(BufferTarget.ElementArrayBuffer, iboHandle);
+
+ first <<= _indexBuffer.ElemSizeLog2;
+
+ if (vertexBase != 0)
+ {
+ IntPtr indices = new IntPtr(first);
+
+ GL.DrawElementsBaseVertex(mode, _indexBuffer.Count, _indexBuffer.Type, indices, vertexBase);
+ }
+ else
+ {
+ GL.DrawElements(mode, _indexBuffer.Count, _indexBuffer.Type, first);
+ }
+ }
+
+ public bool TryGetVbo(long vboKey, out int vboHandle)
+ {
+ return _vboCache.TryGetValue(vboKey, out vboHandle);
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglRenderTarget.cs b/Ryujinx.Graphics/Gal/OpenGL/OglRenderTarget.cs
new file mode 100644
index 00000000..d36bac1b
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglRenderTarget.cs
@@ -0,0 +1,549 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.Texture;
+using System;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ class OglRenderTarget : IGalRenderTarget
+ {
+ private const int NativeWidth = 1280;
+ private const int NativeHeight = 720;
+
+ private const int RenderTargetsCount = GalPipelineState.RenderTargetsCount;
+
+ private struct Rect
+ {
+ public int X { get; private set; }
+ public int Y { get; private set; }
+ public int Width { get; private set; }
+ public int Height { get; private set; }
+
+ public Rect(int x, int y, int width, int height)
+ {
+ X = x;
+ Y = y;
+ Width = width;
+ Height = height;
+ }
+ }
+
+ private class FrameBufferAttachments
+ {
+ public int MapCount { get; set; }
+
+ public DrawBuffersEnum[] Map { get; private set; }
+
+ public long[] Colors { get; private set; }
+
+ public long Zeta { get; set; }
+
+ public FrameBufferAttachments()
+ {
+ Colors = new long[RenderTargetsCount];
+
+ Map = new DrawBuffersEnum[RenderTargetsCount];
+ }
+
+ public void Update(FrameBufferAttachments source)
+ {
+ for (int index = 0; index < RenderTargetsCount; index++)
+ {
+ Map[index] = source.Map[index];
+
+ Colors[index] = source.Colors[index];
+ }
+
+ MapCount = source.MapCount;
+ Zeta = source.Zeta;
+ }
+ }
+
+ private int[] _colorHandles;
+ private int _zetaHandle;
+
+ private OglTexture _texture;
+
+ private ImageHandler _readTex;
+
+ private Rect _window;
+
+ private float[] _viewports;
+
+ private bool _flipX;
+ private bool _flipY;
+
+ private int _cropTop;
+ private int _cropLeft;
+ private int _cropRight;
+ private int _cropBottom;
+
+ //This framebuffer is used to attach guest rendertargets,
+ //think of it as a dummy OpenGL VAO
+ private int _dummyFrameBuffer;
+
+ //These framebuffers are used to blit images
+ private int _srcFb;
+ private int _dstFb;
+
+ private FrameBufferAttachments _attachments;
+ private FrameBufferAttachments _oldAttachments;
+
+ private int _copyPbo;
+
+ public bool FramebufferSrgb { get; set; }
+
+ public OglRenderTarget(OglTexture texture)
+ {
+ _attachments = new FrameBufferAttachments();
+
+ _oldAttachments = new FrameBufferAttachments();
+
+ _colorHandles = new int[RenderTargetsCount];
+
+ _viewports = new float[RenderTargetsCount * 4];
+
+ _texture = texture;
+
+ texture.TextureDeleted += TextureDeletionHandler;
+ }
+
+ private void TextureDeletionHandler(object sender, int handle)
+ {
+ //Texture was deleted, the handle is no longer valid, so
+ //reset all uses of this handle on a render target.
+ for (int attachment = 0; attachment < RenderTargetsCount; attachment++)
+ {
+ if (_colorHandles[attachment] == handle)
+ {
+ _colorHandles[attachment] = 0;
+ }
+ }
+
+ if (_zetaHandle == handle)
+ {
+ _zetaHandle = 0;
+ }
+ }
+
+ public void Bind()
+ {
+ if (_dummyFrameBuffer == 0)
+ {
+ _dummyFrameBuffer = GL.GenFramebuffer();
+ }
+
+ GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, _dummyFrameBuffer);
+
+ ImageHandler cachedImage;
+
+ for (int attachment = 0; attachment < RenderTargetsCount; attachment++)
+ {
+ long key = _attachments.Colors[attachment];
+
+ int handle = 0;
+
+ if (key != 0 && _texture.TryGetImageHandler(key, out cachedImage))
+ {
+ handle = cachedImage.Handle;
+ }
+
+ if (handle == _colorHandles[attachment])
+ {
+ continue;
+ }
+
+ GL.FramebufferTexture(
+ FramebufferTarget.DrawFramebuffer,
+ FramebufferAttachment.ColorAttachment0 + attachment,
+ handle,
+ 0);
+
+ _colorHandles[attachment] = handle;
+ }
+
+ if (_attachments.Zeta != 0 && _texture.TryGetImageHandler(_attachments.Zeta, out cachedImage))
+ {
+ if (cachedImage.Handle != _zetaHandle)
+ {
+ if (cachedImage.HasDepth && cachedImage.HasStencil)
+ {
+ GL.FramebufferTexture(
+ FramebufferTarget.DrawFramebuffer,
+ FramebufferAttachment.DepthStencilAttachment,
+ cachedImage.Handle,
+ 0);
+ }
+ else if (cachedImage.HasDepth)
+ {
+ GL.FramebufferTexture(
+ FramebufferTarget.DrawFramebuffer,
+ FramebufferAttachment.DepthAttachment,
+ cachedImage.Handle,
+ 0);
+
+ GL.FramebufferTexture(
+ FramebufferTarget.DrawFramebuffer,
+ FramebufferAttachment.StencilAttachment,
+ 0,
+ 0);
+ }
+ else
+ {
+ throw new InvalidOperationException("Invalid image format \"" + cachedImage.Format + "\" used as Zeta!");
+ }
+
+ _zetaHandle = cachedImage.Handle;
+ }
+ }
+ else if (_zetaHandle != 0)
+ {
+ GL.FramebufferTexture(
+ FramebufferTarget.DrawFramebuffer,
+ FramebufferAttachment.DepthStencilAttachment,
+ 0,
+ 0);
+
+ _zetaHandle = 0;
+ }
+
+ if (OglExtension.ViewportArray)
+ {
+ GL.ViewportArray(0, RenderTargetsCount, _viewports);
+ }
+ else
+ {
+ GL.Viewport(
+ (int)_viewports[0],
+ (int)_viewports[1],
+ (int)_viewports[2],
+ (int)_viewports[3]);
+ }
+
+ if (_attachments.MapCount > 1)
+ {
+ GL.DrawBuffers(_attachments.MapCount, _attachments.Map);
+ }
+ else if (_attachments.MapCount == 1)
+ {
+ GL.DrawBuffer((DrawBufferMode)_attachments.Map[0]);
+ }
+ else
+ {
+ GL.DrawBuffer(DrawBufferMode.None);
+ }
+
+ _oldAttachments.Update(_attachments);
+ }
+
+ public void BindColor(long key, int attachment)
+ {
+ _attachments.Colors[attachment] = key;
+ }
+
+ public void UnbindColor(int attachment)
+ {
+ _attachments.Colors[attachment] = 0;
+ }
+
+ public void BindZeta(long key)
+ {
+ _attachments.Zeta = key;
+ }
+
+ public void UnbindZeta()
+ {
+ _attachments.Zeta = 0;
+ }
+
+ public void Present(long key)
+ {
+ _texture.TryGetImageHandler(key, out _readTex);
+ }
+
+ public void SetMap(int[] map)
+ {
+ if (map != null)
+ {
+ _attachments.MapCount = map.Length;
+
+ for (int attachment = 0; attachment < _attachments.MapCount; attachment++)
+ {
+ _attachments.Map[attachment] = DrawBuffersEnum.ColorAttachment0 + map[attachment];
+ }
+ }
+ else
+ {
+ _attachments.MapCount = 0;
+ }
+ }
+
+ public void SetTransform(bool flipX, bool flipY, int top, int left, int right, int bottom)
+ {
+ _flipX = flipX;
+ _flipY = flipY;
+
+ _cropTop = top;
+ _cropLeft = left;
+ _cropRight = right;
+ _cropBottom = bottom;
+ }
+
+ public void SetWindowSize(int width, int height)
+ {
+ _window = new Rect(0, 0, width, height);
+ }
+
+ public void SetViewport(int attachment, int x, int y, int width, int height)
+ {
+ int offset = attachment * 4;
+
+ _viewports[offset + 0] = x;
+ _viewports[offset + 1] = y;
+ _viewports[offset + 2] = width;
+ _viewports[offset + 3] = height;
+ }
+
+ public void Render()
+ {
+ if (_readTex == null)
+ {
+ return;
+ }
+
+ int srcX0, srcX1, srcY0, srcY1;
+
+ if (_cropLeft == 0 && _cropRight == 0)
+ {
+ srcX0 = 0;
+ srcX1 = _readTex.Width;
+ }
+ else
+ {
+ srcX0 = _cropLeft;
+ srcX1 = _cropRight;
+ }
+
+ if (_cropTop == 0 && _cropBottom == 0)
+ {
+ srcY0 = 0;
+ srcY1 = _readTex.Height;
+ }
+ else
+ {
+ srcY0 = _cropTop;
+ srcY1 = _cropBottom;
+ }
+
+ float ratioX = MathF.Min(1f, (_window.Height * (float)NativeWidth) / ((float)NativeHeight * _window.Width));
+ float ratioY = MathF.Min(1f, (_window.Width * (float)NativeHeight) / ((float)NativeWidth * _window.Height));
+
+ int dstWidth = (int)(_window.Width * ratioX);
+ int dstHeight = (int)(_window.Height * ratioY);
+
+ int dstPaddingX = (_window.Width - dstWidth) / 2;
+ int dstPaddingY = (_window.Height - dstHeight) / 2;
+
+ int dstX0 = _flipX ? _window.Width - dstPaddingX : dstPaddingX;
+ int dstX1 = _flipX ? dstPaddingX : _window.Width - dstPaddingX;
+
+ int dstY0 = _flipY ? dstPaddingY : _window.Height - dstPaddingY;
+ int dstY1 = _flipY ? _window.Height - dstPaddingY : dstPaddingY;
+
+ GL.Viewport(0, 0, _window.Width, _window.Height);
+
+ if (_srcFb == 0)
+ {
+ _srcFb = GL.GenFramebuffer();
+ }
+
+ GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, _srcFb);
+ GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, 0);
+
+ GL.FramebufferTexture(FramebufferTarget.ReadFramebuffer, FramebufferAttachment.ColorAttachment0, _readTex.Handle, 0);
+
+ GL.ReadBuffer(ReadBufferMode.ColorAttachment0);
+
+ GL.Clear(ClearBufferMask.ColorBufferBit);
+
+ GL.Disable(EnableCap.FramebufferSrgb);
+
+ GL.BlitFramebuffer(
+ srcX0,
+ srcY0,
+ srcX1,
+ srcY1,
+ dstX0,
+ dstY0,
+ dstX1,
+ dstY1,
+ ClearBufferMask.ColorBufferBit,
+ BlitFramebufferFilter.Linear);
+
+ if (FramebufferSrgb)
+ {
+ GL.Enable(EnableCap.FramebufferSrgb);
+ }
+ }
+
+ public void Copy(
+ GalImage srcImage,
+ GalImage dstImage,
+ long srcKey,
+ long dstKey,
+ int srcLayer,
+ int dstLayer,
+ int srcX0,
+ int srcY0,
+ int srcX1,
+ int srcY1,
+ int dstX0,
+ int dstY0,
+ int dstX1,
+ int dstY1)
+ {
+ if (_texture.TryGetImageHandler(srcKey, out ImageHandler srcTex) &&
+ _texture.TryGetImageHandler(dstKey, out ImageHandler dstTex))
+ {
+ if (srcTex.HasColor != dstTex.HasColor ||
+ srcTex.HasDepth != dstTex.HasDepth ||
+ srcTex.HasStencil != dstTex.HasStencil)
+ {
+ throw new NotImplementedException();
+ }
+
+ if (_srcFb == 0)
+ {
+ _srcFb = GL.GenFramebuffer();
+ }
+
+ if (_dstFb == 0)
+ {
+ _dstFb = GL.GenFramebuffer();
+ }
+
+ GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, _srcFb);
+ GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, _dstFb);
+
+ FramebufferAttachment attachment = GetAttachment(srcTex);
+
+ if (ImageUtils.IsArray(srcImage.TextureTarget) && srcLayer > 0)
+ {
+ GL.FramebufferTextureLayer(FramebufferTarget.ReadFramebuffer, attachment, srcTex.Handle, 0, srcLayer);
+ }
+ else
+ {
+ GL.FramebufferTexture(FramebufferTarget.ReadFramebuffer, attachment, srcTex.Handle, 0);
+ }
+
+ if (ImageUtils.IsArray(dstImage.TextureTarget) && dstLayer > 0)
+ {
+ GL.FramebufferTextureLayer(FramebufferTarget.DrawFramebuffer, attachment, dstTex.Handle, 0, dstLayer);
+ }
+ else
+ {
+ GL.FramebufferTexture(FramebufferTarget.DrawFramebuffer, attachment, dstTex.Handle, 0);
+ }
+
+
+ BlitFramebufferFilter filter = BlitFramebufferFilter.Nearest;
+
+ if (srcTex.HasColor)
+ {
+ GL.DrawBuffer(DrawBufferMode.ColorAttachment0);
+
+ filter = BlitFramebufferFilter.Linear;
+ }
+
+ ClearBufferMask mask = GetClearMask(srcTex);
+
+ GL.BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ }
+ }
+
+ public void Reinterpret(long key, GalImage newImage)
+ {
+ if (!_texture.TryGetImage(key, out GalImage oldImage))
+ {
+ return;
+ }
+
+ if (newImage.Format == oldImage.Format &&
+ newImage.Width == oldImage.Width &&
+ newImage.Height == oldImage.Height &&
+ newImage.Depth == oldImage.Depth &&
+ newImage.LayerCount == oldImage.LayerCount &&
+ newImage.TextureTarget == oldImage.TextureTarget)
+ {
+ return;
+ }
+
+ if (_copyPbo == 0)
+ {
+ _copyPbo = GL.GenBuffer();
+ }
+
+ GL.BindBuffer(BufferTarget.PixelPackBuffer, _copyPbo);
+
+ //The buffer should be large enough to hold the largest texture.
+ int bufferSize = Math.Max(ImageUtils.GetSize(oldImage),
+ ImageUtils.GetSize(newImage));
+
+ GL.BufferData(BufferTarget.PixelPackBuffer, bufferSize, IntPtr.Zero, BufferUsageHint.StreamCopy);
+
+ if (!_texture.TryGetImageHandler(key, out ImageHandler cachedImage))
+ {
+ throw new InvalidOperationException();
+ }
+
+ (_, PixelFormat format, PixelType type) = OglEnumConverter.GetImageFormat(cachedImage.Format);
+
+ TextureTarget target = ImageUtils.GetTextureTarget(newImage.TextureTarget);
+
+ GL.BindTexture(target, cachedImage.Handle);
+
+ GL.GetTexImage(target, 0, format, type, IntPtr.Zero);
+
+ GL.BindBuffer(BufferTarget.PixelPackBuffer, 0);
+ GL.BindBuffer(BufferTarget.PixelUnpackBuffer, _copyPbo);
+
+ GL.PixelStore(PixelStoreParameter.UnpackRowLength, oldImage.Width);
+
+ _texture.Create(key, ImageUtils.GetSize(newImage), newImage);
+
+ GL.PixelStore(PixelStoreParameter.UnpackRowLength, 0);
+
+ GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0);
+ }
+
+ private static FramebufferAttachment GetAttachment(ImageHandler cachedImage)
+ {
+ if (cachedImage.HasColor)
+ {
+ return FramebufferAttachment.ColorAttachment0;
+ }
+ else if (cachedImage.HasDepth && cachedImage.HasStencil)
+ {
+ return FramebufferAttachment.DepthStencilAttachment;
+ }
+ else if (cachedImage.HasDepth)
+ {
+ return FramebufferAttachment.DepthAttachment;
+ }
+ else if (cachedImage.HasStencil)
+ {
+ return FramebufferAttachment.StencilAttachment;
+ }
+ else
+ {
+ throw new InvalidOperationException();
+ }
+ }
+
+ private static ClearBufferMask GetClearMask(ImageHandler cachedImage)
+ {
+ return (cachedImage.HasColor ? ClearBufferMask.ColorBufferBit : 0) |
+ (cachedImage.HasDepth ? ClearBufferMask.DepthBufferBit : 0) |
+ (cachedImage.HasStencil ? ClearBufferMask.StencilBufferBit : 0);
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglRenderer.cs b/Ryujinx.Graphics/Gal/OpenGL/OglRenderer.cs
new file mode 100644
index 00000000..1ff8c7ad
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglRenderer.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Concurrent;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ public class OglRenderer : IGalRenderer
+ {
+ public IGalConstBuffer Buffer { get; private set; }
+
+ public IGalRenderTarget RenderTarget { get; private set; }
+
+ public IGalRasterizer Rasterizer { get; private set; }
+
+ public IGalShader Shader { get; private set; }
+
+ public IGalPipeline Pipeline { get; private set; }
+
+ public IGalTexture Texture { get; private set; }
+
+ private ConcurrentQueue<Action> _actionsQueue;
+
+ public OglRenderer()
+ {
+ Buffer = new OglConstBuffer();
+
+ Texture = new OglTexture();
+
+ RenderTarget = new OglRenderTarget(Texture as OglTexture);
+
+ Rasterizer = new OglRasterizer();
+
+ Shader = new OglShader(Buffer as OglConstBuffer);
+
+ Pipeline = new OglPipeline(
+ Buffer as OglConstBuffer,
+ RenderTarget as OglRenderTarget,
+ Rasterizer as OglRasterizer,
+ Shader as OglShader);
+
+ _actionsQueue = new ConcurrentQueue<Action>();
+ }
+
+ public void QueueAction(Action actionMthd)
+ {
+ _actionsQueue.Enqueue(actionMthd);
+ }
+
+ public void RunActions()
+ {
+ int count = _actionsQueue.Count;
+
+ while (count-- > 0 && _actionsQueue.TryDequeue(out Action renderAction))
+ {
+ renderAction();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglShader.cs b/Ryujinx.Graphics/Gal/OpenGL/OglShader.cs
new file mode 100644
index 00000000..8faa9053
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglShader.cs
@@ -0,0 +1,298 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.Gal.Shader;
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ class OglShader : IGalShader
+ {
+ public const int ReservedCbufCount = 1;
+
+ private const int ExtraDataSize = 4;
+
+ public OglShaderProgram Current;
+
+ private ConcurrentDictionary<long, OglShaderStage> _stages;
+
+ private Dictionary<OglShaderProgram, int> _programs;
+
+ public int CurrentProgramHandle { get; private set; }
+
+ private OglConstBuffer _buffer;
+
+ private int _extraUboHandle;
+
+ public OglShader(OglConstBuffer buffer)
+ {
+ _buffer = buffer;
+
+ _stages = new ConcurrentDictionary<long, OglShaderStage>();
+
+ _programs = new Dictionary<OglShaderProgram, int>();
+ }
+
+ public void Create(IGalMemory memory, long key, GalShaderType type)
+ {
+ _stages.GetOrAdd(key, (stage) => ShaderStageFactory(memory, key, 0, false, type));
+ }
+
+ public void Create(IGalMemory memory, long vpAPos, long key, GalShaderType type)
+ {
+ _stages.GetOrAdd(key, (stage) => ShaderStageFactory(memory, vpAPos, key, true, type));
+ }
+
+ private OglShaderStage ShaderStageFactory(
+ IGalMemory memory,
+ long position,
+ long positionB,
+ bool isDualVp,
+ GalShaderType type)
+ {
+ GlslProgram program;
+
+ GlslDecompiler decompiler = new GlslDecompiler(OglLimit.MaxUboSize, OglExtension.NvidiaDriver);
+
+ int shaderDumpIndex = ShaderDumper.DumpIndex;
+
+ if (isDualVp)
+ {
+ ShaderDumper.Dump(memory, position, type, "a");
+ ShaderDumper.Dump(memory, positionB, type, "b");
+
+ program = decompiler.Decompile(memory, position, positionB, type);
+ }
+ else
+ {
+ ShaderDumper.Dump(memory, position, type);
+
+ program = decompiler.Decompile(memory, position, type);
+ }
+
+ string code = program.Code;
+
+ if (ShaderDumper.IsDumpEnabled())
+ {
+ code = "//Shader " + shaderDumpIndex + Environment.NewLine + code;
+ }
+
+ return new OglShaderStage(type, code, program.Uniforms, program.Textures);
+ }
+
+ public IEnumerable<ShaderDeclInfo> GetConstBufferUsage(long key)
+ {
+ if (_stages.TryGetValue(key, out OglShaderStage stage))
+ {
+ return stage.ConstBufferUsage;
+ }
+
+ return Enumerable.Empty<ShaderDeclInfo>();
+ }
+
+ public IEnumerable<ShaderDeclInfo> GetTextureUsage(long key)
+ {
+ if (_stages.TryGetValue(key, out OglShaderStage stage))
+ {
+ return stage.TextureUsage;
+ }
+
+ return Enumerable.Empty<ShaderDeclInfo>();
+ }
+
+ public unsafe void SetExtraData(float flipX, float flipY, int instance)
+ {
+ BindProgram();
+
+ EnsureExtraBlock();
+
+ GL.BindBuffer(BufferTarget.UniformBuffer, _extraUboHandle);
+
+ float* data = stackalloc float[ExtraDataSize];
+ data[0] = flipX;
+ data[1] = flipY;
+ data[2] = BitConverter.Int32BitsToSingle(instance);
+
+ //Invalidate buffer
+ GL.BufferData(BufferTarget.UniformBuffer, ExtraDataSize * sizeof(float), IntPtr.Zero, BufferUsageHint.StreamDraw);
+
+ GL.BufferSubData(BufferTarget.UniformBuffer, IntPtr.Zero, ExtraDataSize * sizeof(float), (IntPtr)data);
+ }
+
+ public void Bind(long key)
+ {
+ if (_stages.TryGetValue(key, out OglShaderStage stage))
+ {
+ Bind(stage);
+ }
+ }
+
+ private void Bind(OglShaderStage stage)
+ {
+ if (stage.Type == GalShaderType.Geometry)
+ {
+ //Enhanced layouts are required for Geometry shaders
+ //skip this stage if current driver has no ARB_enhanced_layouts
+ if (!OglExtension.EnhancedLayouts)
+ {
+ return;
+ }
+ }
+
+ switch (stage.Type)
+ {
+ case GalShaderType.Vertex: Current.Vertex = stage; break;
+ case GalShaderType.TessControl: Current.TessControl = stage; break;
+ case GalShaderType.TessEvaluation: Current.TessEvaluation = stage; break;
+ case GalShaderType.Geometry: Current.Geometry = stage; break;
+ case GalShaderType.Fragment: Current.Fragment = stage; break;
+ }
+ }
+
+ public void Unbind(GalShaderType type)
+ {
+ switch (type)
+ {
+ case GalShaderType.Vertex: Current.Vertex = null; break;
+ case GalShaderType.TessControl: Current.TessControl = null; break;
+ case GalShaderType.TessEvaluation: Current.TessEvaluation = null; break;
+ case GalShaderType.Geometry: Current.Geometry = null; break;
+ case GalShaderType.Fragment: Current.Fragment = null; break;
+ }
+ }
+
+ public void BindProgram()
+ {
+ if (Current.Vertex == null ||
+ Current.Fragment == null)
+ {
+ return;
+ }
+
+ if (!_programs.TryGetValue(Current, out int handle))
+ {
+ handle = GL.CreateProgram();
+
+ AttachIfNotNull(handle, Current.Vertex);
+ AttachIfNotNull(handle, Current.TessControl);
+ AttachIfNotNull(handle, Current.TessEvaluation);
+ AttachIfNotNull(handle, Current.Geometry);
+ AttachIfNotNull(handle, Current.Fragment);
+
+ GL.LinkProgram(handle);
+
+ CheckProgramLink(handle);
+
+ BindUniformBlocks(handle);
+ BindTextureLocations(handle);
+
+ _programs.Add(Current, handle);
+ }
+
+ GL.UseProgram(handle);
+
+ CurrentProgramHandle = handle;
+ }
+
+ private void EnsureExtraBlock()
+ {
+ if (_extraUboHandle == 0)
+ {
+ _extraUboHandle = GL.GenBuffer();
+
+ GL.BindBuffer(BufferTarget.UniformBuffer, _extraUboHandle);
+
+ GL.BufferData(BufferTarget.UniformBuffer, ExtraDataSize * sizeof(float), IntPtr.Zero, BufferUsageHint.StreamDraw);
+
+ GL.BindBufferBase(BufferRangeTarget.UniformBuffer, 0, _extraUboHandle);
+ }
+ }
+
+ private void AttachIfNotNull(int programHandle, OglShaderStage stage)
+ {
+ if (stage != null)
+ {
+ stage.Compile();
+
+ GL.AttachShader(programHandle, stage.Handle);
+ }
+ }
+
+ private void BindUniformBlocks(int programHandle)
+ {
+ int extraBlockindex = GL.GetUniformBlockIndex(programHandle, GlslDecl.ExtraUniformBlockName);
+
+ GL.UniformBlockBinding(programHandle, extraBlockindex, 0);
+
+ int freeBinding = ReservedCbufCount;
+
+ void BindUniformBlocksIfNotNull(OglShaderStage stage)
+ {
+ if (stage != null)
+ {
+ foreach (ShaderDeclInfo declInfo in stage.ConstBufferUsage)
+ {
+ int blockIndex = GL.GetUniformBlockIndex(programHandle, declInfo.Name);
+
+ if (blockIndex < 0)
+ {
+ //It is expected that its found, if it's not then driver might be in a malfunction
+ throw new InvalidOperationException();
+ }
+
+ GL.UniformBlockBinding(programHandle, blockIndex, freeBinding);
+
+ freeBinding++;
+ }
+ }
+ }
+
+ BindUniformBlocksIfNotNull(Current.Vertex);
+ BindUniformBlocksIfNotNull(Current.TessControl);
+ BindUniformBlocksIfNotNull(Current.TessEvaluation);
+ BindUniformBlocksIfNotNull(Current.Geometry);
+ BindUniformBlocksIfNotNull(Current.Fragment);
+ }
+
+ private void BindTextureLocations(int programHandle)
+ {
+ int index = 0;
+
+ void BindTexturesIfNotNull(OglShaderStage stage)
+ {
+ if (stage != null)
+ {
+ foreach (ShaderDeclInfo decl in stage.TextureUsage)
+ {
+ int location = GL.GetUniformLocation(programHandle, decl.Name);
+
+ GL.Uniform1(location, index);
+
+ index++;
+ }
+ }
+ }
+
+ GL.UseProgram(programHandle);
+
+ BindTexturesIfNotNull(Current.Vertex);
+ BindTexturesIfNotNull(Current.TessControl);
+ BindTexturesIfNotNull(Current.TessEvaluation);
+ BindTexturesIfNotNull(Current.Geometry);
+ BindTexturesIfNotNull(Current.Fragment);
+ }
+
+ private static void CheckProgramLink(int handle)
+ {
+ int status = 0;
+
+ GL.GetProgram(handle, GetProgramParameterName.LinkStatus, out status);
+
+ if (status == 0)
+ {
+ throw new ShaderException(GL.GetProgramInfoLog(handle));
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglShaderProgram.cs b/Ryujinx.Graphics/Gal/OpenGL/OglShaderProgram.cs
new file mode 100644
index 00000000..9e68a8e6
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglShaderProgram.cs
@@ -0,0 +1,86 @@
+using OpenTK.Graphics.OpenGL;
+using System;
+using System.Collections.Generic;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ struct OglShaderProgram
+ {
+ public OglShaderStage Vertex;
+ public OglShaderStage TessControl;
+ public OglShaderStage TessEvaluation;
+ public OglShaderStage Geometry;
+ public OglShaderStage Fragment;
+ }
+
+ class OglShaderStage : IDisposable
+ {
+ public int Handle { get; private set; }
+
+ public bool IsCompiled { get; private set; }
+
+ public GalShaderType Type { get; private set; }
+
+ public string Code { get; private set; }
+
+ public IEnumerable<ShaderDeclInfo> ConstBufferUsage { get; private set; }
+ public IEnumerable<ShaderDeclInfo> TextureUsage { get; private set; }
+
+ public OglShaderStage(
+ GalShaderType type,
+ string code,
+ IEnumerable<ShaderDeclInfo> constBufferUsage,
+ IEnumerable<ShaderDeclInfo> textureUsage)
+ {
+ Type = type;
+ Code = code;
+ ConstBufferUsage = constBufferUsage;
+ TextureUsage = textureUsage;
+ }
+
+ public void Compile()
+ {
+ if (Handle == 0)
+ {
+ Handle = GL.CreateShader(OglEnumConverter.GetShaderType(Type));
+
+ CompileAndCheck(Handle, Code);
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposing && Handle != 0)
+ {
+ GL.DeleteShader(Handle);
+
+ Handle = 0;
+ }
+ }
+
+ public static void CompileAndCheck(int handle, string code)
+ {
+ GL.ShaderSource(handle, code);
+ GL.CompileShader(handle);
+
+ CheckCompilation(handle);
+ }
+
+ private static void CheckCompilation(int handle)
+ {
+ int status = 0;
+
+ GL.GetShader(handle, ShaderParameter.CompileStatus, out status);
+
+ if (status == 0)
+ {
+ throw new ShaderException(GL.GetShaderInfoLog(handle));
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLStreamBuffer.cs b/Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs
index 411d33aa..58b3ace5 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLStreamBuffer.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs
@@ -3,7 +3,7 @@ using System;
namespace Ryujinx.Graphics.Gal.OpenGL
{
- class OGLStreamBuffer : IDisposable
+ class OglStreamBuffer : IDisposable
{
public int Handle { get; protected set; }
@@ -11,30 +11,30 @@ namespace Ryujinx.Graphics.Gal.OpenGL
protected BufferTarget Target { get; private set; }
- public OGLStreamBuffer(BufferTarget Target, long Size)
+ public OglStreamBuffer(BufferTarget target, long size)
{
- this.Target = Target;
- this.Size = Size;
+ Target = target;
+ Size = size;
Handle = GL.GenBuffer();
- GL.BindBuffer(Target, Handle);
+ GL.BindBuffer(target, Handle);
- GL.BufferData(Target, (IntPtr)Size, IntPtr.Zero, BufferUsageHint.StreamDraw);
+ GL.BufferData(target, (IntPtr)size, IntPtr.Zero, BufferUsageHint.StreamDraw);
}
- public void SetData(long Size, IntPtr HostAddress)
+ public void SetData(long size, IntPtr hostAddress)
{
GL.BindBuffer(Target, Handle);
- GL.BufferSubData(Target, IntPtr.Zero, (IntPtr)Size, HostAddress);
+ GL.BufferSubData(Target, IntPtr.Zero, (IntPtr)size, hostAddress);
}
- public void SetData(byte[] Data)
+ public void SetData(byte[] data)
{
GL.BindBuffer(Target, Handle);
- GL.BufferSubData(Target, IntPtr.Zero, (IntPtr)Data.Length, Data);
+ GL.BufferSubData(Target, IntPtr.Zero, (IntPtr)data.Length, data);
}
public void Dispose()
@@ -42,9 +42,9 @@ namespace Ryujinx.Graphics.Gal.OpenGL
Dispose(true);
}
- protected virtual void Dispose(bool Disposing)
+ protected virtual void Dispose(bool disposing)
{
- if (Disposing && Handle != 0)
+ if (disposing && Handle != 0)
{
GL.DeleteBuffer(Handle);
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglTexture.cs b/Ryujinx.Graphics/Gal/OpenGL/OglTexture.cs
new file mode 100644
index 00000000..f836702f
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglTexture.cs
@@ -0,0 +1,381 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.Texture;
+using System;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ class OglTexture : IGalTexture
+ {
+ private const long MaxTextureCacheSize = 768 * 1024 * 1024;
+
+ private OglCachedResource<ImageHandler> _textureCache;
+
+ public EventHandler<int> TextureDeleted { get; set; }
+
+ public OglTexture()
+ {
+ _textureCache = new OglCachedResource<ImageHandler>(DeleteTexture, MaxTextureCacheSize);
+ }
+
+ public void LockCache()
+ {
+ _textureCache.Lock();
+ }
+
+ public void UnlockCache()
+ {
+ _textureCache.Unlock();
+ }
+
+ private void DeleteTexture(ImageHandler cachedImage)
+ {
+ TextureDeleted?.Invoke(this, cachedImage.Handle);
+
+ GL.DeleteTexture(cachedImage.Handle);
+ }
+
+ public void Create(long key, int size, GalImage image)
+ {
+ int handle = GL.GenTexture();
+
+ TextureTarget target = ImageUtils.GetTextureTarget(image.TextureTarget);
+
+ GL.BindTexture(target, handle);
+
+ const int level = 0; //TODO: Support mipmap textures.
+ const int border = 0;
+
+ _textureCache.AddOrUpdate(key, new ImageHandler(handle, image), (uint)size);
+
+ if (ImageUtils.IsCompressed(image.Format))
+ {
+ throw new InvalidOperationException("Surfaces with compressed formats are not supported!");
+ }
+
+ (PixelInternalFormat internalFmt,
+ PixelFormat format,
+ PixelType type) = OglEnumConverter.GetImageFormat(image.Format);
+
+ switch (target)
+ {
+ case TextureTarget.Texture1D:
+ GL.TexImage1D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ border,
+ format,
+ type,
+ IntPtr.Zero);
+ break;
+
+ case TextureTarget.Texture2D:
+ GL.TexImage2D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ border,
+ format,
+ type,
+ IntPtr.Zero);
+ break;
+ case TextureTarget.Texture3D:
+ GL.TexImage3D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ image.Depth,
+ border,
+ format,
+ type,
+ IntPtr.Zero);
+ break;
+ case TextureTarget.Texture2DArray:
+ GL.TexImage3D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ image.LayerCount,
+ border,
+ format,
+ type,
+ IntPtr.Zero);
+ break;
+ default:
+ throw new NotImplementedException($"Unsupported texture target type: {target}");
+ }
+ }
+
+ public void Create(long key, byte[] data, GalImage image)
+ {
+ int handle = GL.GenTexture();
+
+ TextureTarget target = ImageUtils.GetTextureTarget(image.TextureTarget);
+
+ GL.BindTexture(target, handle);
+
+ const int level = 0; //TODO: Support mipmap textures.
+ const int border = 0;
+
+ _textureCache.AddOrUpdate(key, new ImageHandler(handle, image), (uint)data.Length);
+
+ if (ImageUtils.IsCompressed(image.Format) && !IsAstc(image.Format))
+ {
+ InternalFormat internalFmt = OglEnumConverter.GetCompressedImageFormat(image.Format);
+
+ switch (target)
+ {
+ case TextureTarget.Texture1D:
+ GL.CompressedTexImage1D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ border,
+ data.Length,
+ data);
+ break;
+ case TextureTarget.Texture2D:
+ GL.CompressedTexImage2D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ border,
+ data.Length,
+ data);
+ break;
+ case TextureTarget.Texture3D:
+ GL.CompressedTexImage3D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ image.Depth,
+ border,
+ data.Length,
+ data);
+ break;
+ case TextureTarget.Texture2DArray:
+ GL.CompressedTexImage3D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ image.LayerCount,
+ border,
+ data.Length,
+ data);
+ break;
+ default:
+ throw new NotImplementedException($"Unsupported texture target type: {target}");
+ }
+ }
+ else
+ {
+ //TODO: Use KHR_texture_compression_astc_hdr when available
+ if (IsAstc(image.Format))
+ {
+ int textureBlockWidth = ImageUtils.GetBlockWidth(image.Format);
+ int textureBlockHeight = ImageUtils.GetBlockHeight(image.Format);
+ int textureBlockDepth = ImageUtils.GetBlockDepth(image.Format);
+
+ data = AstcDecoder.DecodeToRgba8888(
+ data,
+ textureBlockWidth,
+ textureBlockHeight,
+ textureBlockDepth,
+ image.Width,
+ image.Height,
+ image.Depth);
+
+ image.Format = GalImageFormat.Rgba8 | (image.Format & GalImageFormat.TypeMask);
+ }
+
+ (PixelInternalFormat internalFmt,
+ PixelFormat format,
+ PixelType type) = OglEnumConverter.GetImageFormat(image.Format);
+
+
+ switch (target)
+ {
+ case TextureTarget.Texture1D:
+ GL.TexImage1D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ border,
+ format,
+ type,
+ data);
+ break;
+ case TextureTarget.Texture2D:
+ GL.TexImage2D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ border,
+ format,
+ type,
+ data);
+ break;
+ case TextureTarget.Texture3D:
+ GL.TexImage3D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ image.Depth,
+ border,
+ format,
+ type,
+ data);
+ break;
+ case TextureTarget.Texture2DArray:
+ GL.TexImage3D(
+ target,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ image.LayerCount,
+ border,
+ format,
+ type,
+ data);
+ break;
+ case TextureTarget.TextureCubeMap:
+ Span<byte> array = new Span<byte>(data);
+
+ int faceSize = ImageUtils.GetSize(image) / 6;
+
+ for (int face = 0; face < 6; face++)
+ {
+ GL.TexImage2D(
+ TextureTarget.TextureCubeMapPositiveX + face,
+ level,
+ internalFmt,
+ image.Width,
+ image.Height,
+ border,
+ format,
+ type,
+ array.Slice(face * faceSize, faceSize).ToArray());
+ }
+ break;
+ default:
+ throw new NotImplementedException($"Unsupported texture target type: {target}");
+ }
+ }
+ }
+
+ private static bool IsAstc(GalImageFormat format)
+ {
+ format &= GalImageFormat.FormatMask;
+
+ return format > GalImageFormat.Astc2DStart && format < GalImageFormat.Astc2DEnd;
+ }
+
+ public bool TryGetImage(long key, out GalImage image)
+ {
+ if (_textureCache.TryGetValue(key, out ImageHandler cachedImage))
+ {
+ image = cachedImage.Image;
+
+ return true;
+ }
+
+ image = default(GalImage);
+
+ return false;
+ }
+
+ public bool TryGetImageHandler(long key, out ImageHandler cachedImage)
+ {
+ if (_textureCache.TryGetValue(key, out cachedImage))
+ {
+ return true;
+ }
+
+ cachedImage = null;
+
+ return false;
+ }
+
+ public void Bind(long key, int index, GalImage image)
+ {
+ if (_textureCache.TryGetValue(key, out ImageHandler cachedImage))
+ {
+ GL.ActiveTexture(TextureUnit.Texture0 + index);
+
+ TextureTarget target = ImageUtils.GetTextureTarget(image.TextureTarget);
+
+ GL.BindTexture(target, cachedImage.Handle);
+
+ int[] swizzleRgba = new int[]
+ {
+ (int)OglEnumConverter.GetTextureSwizzle(image.XSource),
+ (int)OglEnumConverter.GetTextureSwizzle(image.YSource),
+ (int)OglEnumConverter.GetTextureSwizzle(image.ZSource),
+ (int)OglEnumConverter.GetTextureSwizzle(image.WSource)
+ };
+
+ GL.TexParameter(target, TextureParameterName.TextureSwizzleRgba, swizzleRgba);
+ }
+ }
+
+ public void SetSampler(GalImage image, GalTextureSampler sampler)
+ {
+ int wrapS = (int)OglEnumConverter.GetTextureWrapMode(sampler.AddressU);
+ int wrapT = (int)OglEnumConverter.GetTextureWrapMode(sampler.AddressV);
+ int wrapR = (int)OglEnumConverter.GetTextureWrapMode(sampler.AddressP);
+
+ int minFilter = (int)OglEnumConverter.GetTextureMinFilter(sampler.MinFilter, sampler.MipFilter);
+ int magFilter = (int)OglEnumConverter.GetTextureMagFilter(sampler.MagFilter);
+
+ TextureTarget target = ImageUtils.GetTextureTarget(image.TextureTarget);
+
+ GL.TexParameter(target, TextureParameterName.TextureWrapS, wrapS);
+ GL.TexParameter(target, TextureParameterName.TextureWrapT, wrapT);
+ GL.TexParameter(target, TextureParameterName.TextureWrapR, wrapR);
+
+ GL.TexParameter(target, TextureParameterName.TextureMinFilter, minFilter);
+ GL.TexParameter(target, TextureParameterName.TextureMagFilter, magFilter);
+
+ float[] color = new float[]
+ {
+ sampler.BorderColor.Red,
+ sampler.BorderColor.Green,
+ sampler.BorderColor.Blue,
+ sampler.BorderColor.Alpha
+ };
+
+ GL.TexParameter(target, TextureParameterName.TextureBorderColor, color);
+
+ if (sampler.DepthCompare)
+ {
+ GL.TexParameter(target, TextureParameterName.TextureCompareMode, (int)All.CompareRToTexture);
+ GL.TexParameter(target, TextureParameterName.TextureCompareFunc, (int)OglEnumConverter.GetDepthCompareFunc(sampler.DepthCompareFunc));
+ }
+ else
+ {
+ GL.TexParameter(target, TextureParameterName.TextureCompareMode, (int)All.None);
+ GL.TexParameter(target, TextureParameterName.TextureCompareFunc, (int)All.Never);
+ }
+ }
+ }
+}
diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
index f7ae34fa..73426762 100644
--- a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
+++ b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
@@ -1,4 +1,3 @@
-using Ryujinx.Graphics.Gal.OpenGL;
using Ryujinx.Graphics.Texture;
using System;
using System.Collections.Generic;
@@ -51,9 +50,9 @@ namespace Ryujinx.Graphics.Gal.Shader
public const string SsyStackName = "ssy_stack";
public const string SsyCursorName = "ssy_cursor";
- private string[] StagePrefixes = new string[] { "vp", "tcp", "tep", "gp", "fp" };
+ private string[] _stagePrefixes = new string[] { "vp", "tcp", "tep", "gp", "fp" };
- private string StagePrefix;
+ private string _stagePrefix;
private Dictionary<ShaderIrOp, ShaderDeclInfo> m_CbTextures;
@@ -83,9 +82,9 @@ namespace Ryujinx.Graphics.Gal.Shader
public GalShaderType ShaderType { get; private set; }
- private GlslDecl(GalShaderType ShaderType)
+ private GlslDecl(GalShaderType shaderType)
{
- this.ShaderType = ShaderType;
+ ShaderType = shaderType;
m_CbTextures = new Dictionary<ShaderIrOp, ShaderDeclInfo>();
@@ -101,187 +100,187 @@ namespace Ryujinx.Graphics.Gal.Shader
m_Preds = new Dictionary<int, ShaderDeclInfo>();
}
- public GlslDecl(ShaderIrBlock[] Blocks, GalShaderType ShaderType, ShaderHeader Header) : this(ShaderType)
+ public GlslDecl(ShaderIrBlock[] blocks, GalShaderType shaderType, ShaderHeader header) : this(shaderType)
{
- StagePrefix = StagePrefixes[(int)ShaderType] + "_";
+ _stagePrefix = _stagePrefixes[(int)shaderType] + "_";
- if (ShaderType == GalShaderType.Fragment)
+ if (shaderType == GalShaderType.Fragment)
{
- int Index = 0;
+ int index = 0;
- for (int Attachment = 0; Attachment < 8; Attachment++)
+ for (int attachment = 0; attachment < 8; attachment++)
{
- for (int Component = 0; Component < 4; Component++)
+ for (int component = 0; component < 4; component++)
{
- if (Header.OmapTargets[Attachment].ComponentEnabled(Component))
+ if (header.OmapTargets[attachment].ComponentEnabled(component))
{
- m_Gprs.TryAdd(Index, new ShaderDeclInfo(GetGprName(Index), Index));
+ m_Gprs.TryAdd(index, new ShaderDeclInfo(GetGprName(index), index));
- Index++;
+ index++;
}
}
}
- if (Header.OmapDepth)
+ if (header.OmapDepth)
{
- Index = Header.DepthRegister;
+ index = header.DepthRegister;
- m_Gprs.TryAdd(Index, new ShaderDeclInfo(GetGprName(Index), Index));
+ m_Gprs.TryAdd(index, new ShaderDeclInfo(GetGprName(index), index));
}
}
- foreach (ShaderIrBlock Block in Blocks)
+ foreach (ShaderIrBlock block in blocks)
{
- ShaderIrNode[] Nodes = Block.GetNodes();
+ ShaderIrNode[] nodes = block.GetNodes();
- foreach (ShaderIrNode Node in Nodes)
+ foreach (ShaderIrNode node in nodes)
{
- Traverse(Nodes, null, Node);
+ Traverse(nodes, null, node);
}
}
}
- public static GlslDecl Merge(GlslDecl VpA, GlslDecl VpB)
+ public static GlslDecl Merge(GlslDecl vpA, GlslDecl vpB)
{
- GlslDecl Combined = new GlslDecl(GalShaderType.Vertex);
+ GlslDecl combined = new GlslDecl(GalShaderType.Vertex);
- Merge(Combined.m_Textures, VpA.m_Textures, VpB.m_Textures);
- Merge(Combined.m_Uniforms, VpA.m_Uniforms, VpB.m_Uniforms);
+ Merge(combined.m_Textures, vpA.m_Textures, vpB.m_Textures);
+ Merge(combined.m_Uniforms, vpA.m_Uniforms, vpB.m_Uniforms);
- Merge(Combined.m_Attributes, VpA.m_Attributes, VpB.m_Attributes);
- Merge(Combined.m_OutAttributes, VpA.m_OutAttributes, VpB.m_OutAttributes);
+ Merge(combined.m_Attributes, vpA.m_Attributes, vpB.m_Attributes);
+ Merge(combined.m_OutAttributes, vpA.m_OutAttributes, vpB.m_OutAttributes);
- Merge(Combined.m_Gprs, VpA.m_Gprs, VpB.m_Gprs);
- Merge(Combined.m_GprsHalf, VpA.m_GprsHalf, VpB.m_GprsHalf);
- Merge(Combined.m_Preds, VpA.m_Preds, VpB.m_Preds);
+ Merge(combined.m_Gprs, vpA.m_Gprs, vpB.m_Gprs);
+ Merge(combined.m_GprsHalf, vpA.m_GprsHalf, vpB.m_GprsHalf);
+ Merge(combined.m_Preds, vpA.m_Preds, vpB.m_Preds);
//Merge input attributes.
- foreach (KeyValuePair<int, ShaderDeclInfo> KV in VpA.m_InAttributes)
+ foreach (KeyValuePair<int, ShaderDeclInfo> kv in vpA.m_InAttributes)
{
- Combined.m_InAttributes.TryAdd(KV.Key, KV.Value);
+ combined.m_InAttributes.TryAdd(kv.Key, kv.Value);
}
- foreach (KeyValuePair<int, ShaderDeclInfo> KV in VpB.m_InAttributes)
+ foreach (KeyValuePair<int, ShaderDeclInfo> kv in vpB.m_InAttributes)
{
//If Vertex Program A already writes to this attribute,
//then we don't need to add it as an input attribute since
//Vertex Program A will already have written to it anyway,
//and there's no guarantee that there is an input attribute
//for this slot.
- if (!VpA.m_OutAttributes.ContainsKey(KV.Key))
+ if (!vpA.m_OutAttributes.ContainsKey(kv.Key))
{
- Combined.m_InAttributes.TryAdd(KV.Key, KV.Value);
+ combined.m_InAttributes.TryAdd(kv.Key, kv.Value);
}
}
- return Combined;
+ return combined;
}
- public static string GetGprName(int Index)
+ public static string GetGprName(int index)
{
- return GprName + Index;
+ return GprName + index;
}
private static void Merge(
- Dictionary<int, ShaderDeclInfo> C,
- Dictionary<int, ShaderDeclInfo> A,
- Dictionary<int, ShaderDeclInfo> B)
+ Dictionary<int, ShaderDeclInfo> c,
+ Dictionary<int, ShaderDeclInfo> a,
+ Dictionary<int, ShaderDeclInfo> b)
{
- foreach (KeyValuePair<int, ShaderDeclInfo> KV in A)
+ foreach (KeyValuePair<int, ShaderDeclInfo> kv in a)
{
- C.TryAdd(KV.Key, KV.Value);
+ c.TryAdd(kv.Key, kv.Value);
}
- foreach (KeyValuePair<int, ShaderDeclInfo> KV in B)
+ foreach (KeyValuePair<int, ShaderDeclInfo> kv in b)
{
- C.TryAdd(KV.Key, KV.Value);
+ c.TryAdd(kv.Key, kv.Value);
}
}
- private void Traverse(ShaderIrNode[] Nodes, ShaderIrNode Parent, ShaderIrNode Node)
+ private void Traverse(ShaderIrNode[] nodes, ShaderIrNode parent, ShaderIrNode node)
{
- switch (Node)
+ switch (node)
{
- case ShaderIrAsg Asg:
+ case ShaderIrAsg asg:
{
- Traverse(Nodes, Asg, Asg.Dst);
- Traverse(Nodes, Asg, Asg.Src);
+ Traverse(nodes, asg, asg.Dst);
+ Traverse(nodes, asg, asg.Src);
break;
}
- case ShaderIrCond Cond:
+ case ShaderIrCond cond:
{
- Traverse(Nodes, Cond, Cond.Pred);
- Traverse(Nodes, Cond, Cond.Child);
+ Traverse(nodes, cond, cond.Pred);
+ Traverse(nodes, cond, cond.Child);
break;
}
- case ShaderIrOp Op:
+ case ShaderIrOp op:
{
- Traverse(Nodes, Op, Op.OperandA);
- Traverse(Nodes, Op, Op.OperandB);
- Traverse(Nodes, Op, Op.OperandC);
-
- if (Op.Inst == ShaderIrInst.Texq ||
- Op.Inst == ShaderIrInst.Texs ||
- Op.Inst == ShaderIrInst.Tld4 ||
- Op.Inst == ShaderIrInst.Txlf)
+ Traverse(nodes, op, op.OperandA);
+ Traverse(nodes, op, op.OperandB);
+ Traverse(nodes, op, op.OperandC);
+
+ if (op.Inst == ShaderIrInst.Texq ||
+ op.Inst == ShaderIrInst.Texs ||
+ op.Inst == ShaderIrInst.Tld4 ||
+ op.Inst == ShaderIrInst.Txlf)
{
- int Handle = ((ShaderIrOperImm)Op.OperandC).Value;
+ int handle = ((ShaderIrOperImm)op.OperandC).Value;
- int Index = Handle - TexStartIndex;
+ int index = handle - TexStartIndex;
- string Name = StagePrefix + TextureName + Index;
+ string name = _stagePrefix + TextureName + index;
- GalTextureTarget TextureTarget;
+ GalTextureTarget textureTarget;
- TextureInstructionSuffix TextureInstructionSuffix;
+ TextureInstructionSuffix textureInstructionSuffix;
// TODO: Non 2D texture type for TEXQ?
- if (Op.Inst == ShaderIrInst.Texq)
+ if (op.Inst == ShaderIrInst.Texq)
{
- TextureTarget = GalTextureTarget.TwoD;
- TextureInstructionSuffix = TextureInstructionSuffix.None;
+ textureTarget = GalTextureTarget.TwoD;
+ textureInstructionSuffix = TextureInstructionSuffix.None;
}
else
{
- ShaderIrMetaTex Meta = ((ShaderIrMetaTex)Op.MetaData);
+ ShaderIrMetaTex meta = ((ShaderIrMetaTex)op.MetaData);
- TextureTarget = Meta.TextureTarget;
- TextureInstructionSuffix = Meta.TextureInstructionSuffix;
+ textureTarget = meta.TextureTarget;
+ textureInstructionSuffix = meta.TextureInstructionSuffix;
}
- m_Textures.TryAdd(Handle, new ShaderDeclInfo(Name, Handle, false, 0, 1, TextureTarget, TextureInstructionSuffix));
+ m_Textures.TryAdd(handle, new ShaderDeclInfo(name, handle, false, 0, 1, textureTarget, textureInstructionSuffix));
}
- else if (Op.Inst == ShaderIrInst.Texb)
+ else if (op.Inst == ShaderIrInst.Texb)
{
- ShaderIrNode HandleSrc = null;
+ ShaderIrNode handleSrc = null;
- int Index = Array.IndexOf(Nodes, Parent) - 1;
+ int index = Array.IndexOf(nodes, parent) - 1;
- for (; Index >= 0; Index--)
+ for (; index >= 0; index--)
{
- ShaderIrNode Curr = Nodes[Index];
+ ShaderIrNode curr = nodes[index];
- if (Curr is ShaderIrAsg Asg && Asg.Dst is ShaderIrOperGpr Gpr)
+ if (curr is ShaderIrAsg asg && asg.Dst is ShaderIrOperGpr gpr)
{
- if (Gpr.Index == ((ShaderIrOperGpr)Op.OperandC).Index)
+ if (gpr.Index == ((ShaderIrOperGpr)op.OperandC).Index)
{
- HandleSrc = Asg.Src;
+ handleSrc = asg.Src;
break;
}
}
}
- if (HandleSrc != null && HandleSrc is ShaderIrOperCbuf Cbuf)
+ if (handleSrc != null && handleSrc is ShaderIrOperCbuf cbuf)
{
- ShaderIrMetaTex Meta = ((ShaderIrMetaTex)Op.MetaData);
- string Name = StagePrefix + TextureName + "_cb" + Cbuf.Index + "_" + Cbuf.Pos;
+ ShaderIrMetaTex meta = ((ShaderIrMetaTex)op.MetaData);
+ string name = _stagePrefix + TextureName + "_cb" + cbuf.Index + "_" + cbuf.Pos;
- m_CbTextures.Add(Op, new ShaderDeclInfo(Name, Cbuf.Pos, true, Cbuf.Index, 1, Meta.TextureTarget, Meta.TextureInstructionSuffix));
+ m_CbTextures.Add(op, new ShaderDeclInfo(name, cbuf.Pos, true, cbuf.Index, 1, meta.TextureTarget, meta.TextureInstructionSuffix));
}
else
{
@@ -291,93 +290,93 @@ namespace Ryujinx.Graphics.Gal.Shader
break;
}
- case ShaderIrOperCbuf Cbuf:
+ case ShaderIrOperCbuf cbuf:
{
- if (!m_Uniforms.ContainsKey(Cbuf.Index))
+ if (!m_Uniforms.ContainsKey(cbuf.Index))
{
- string Name = StagePrefix + UniformName + Cbuf.Index;
+ string name = _stagePrefix + UniformName + cbuf.Index;
- ShaderDeclInfo DeclInfo = new ShaderDeclInfo(Name, Cbuf.Pos, true, Cbuf.Index);
+ ShaderDeclInfo declInfo = new ShaderDeclInfo(name, cbuf.Pos, true, cbuf.Index);
- m_Uniforms.Add(Cbuf.Index, DeclInfo);
+ m_Uniforms.Add(cbuf.Index, declInfo);
}
break;
}
- case ShaderIrOperAbuf Abuf:
+ case ShaderIrOperAbuf abuf:
{
//This is a built-in variable.
- if (Abuf.Offs == LayerAttr ||
- Abuf.Offs == PointSizeAttr ||
- Abuf.Offs == PointCoordAttrX ||
- Abuf.Offs == PointCoordAttrY ||
- Abuf.Offs == VertexIdAttr ||
- Abuf.Offs == InstanceIdAttr ||
- Abuf.Offs == FaceAttr)
+ if (abuf.Offs == LayerAttr ||
+ abuf.Offs == PointSizeAttr ||
+ abuf.Offs == PointCoordAttrX ||
+ abuf.Offs == PointCoordAttrY ||
+ abuf.Offs == VertexIdAttr ||
+ abuf.Offs == InstanceIdAttr ||
+ abuf.Offs == FaceAttr)
{
break;
}
- int Index = Abuf.Offs >> 4;
- int Elem = (Abuf.Offs >> 2) & 3;
+ int index = abuf.Offs >> 4;
+ int elem = (abuf.Offs >> 2) & 3;
- int GlslIndex = Index - AttrStartIndex;
+ int glslIndex = index - AttrStartIndex;
- if (GlslIndex < 0)
+ if (glslIndex < 0)
{
return;
}
- ShaderDeclInfo DeclInfo;
+ ShaderDeclInfo declInfo;
- if (Parent is ShaderIrAsg Asg && Asg.Dst == Node)
+ if (parent is ShaderIrAsg asg && asg.Dst == node)
{
- if (!m_OutAttributes.TryGetValue(Index, out DeclInfo))
+ if (!m_OutAttributes.TryGetValue(index, out declInfo))
{
- DeclInfo = new ShaderDeclInfo(OutAttrName + GlslIndex, GlslIndex);
+ declInfo = new ShaderDeclInfo(OutAttrName + glslIndex, glslIndex);
- m_OutAttributes.Add(Index, DeclInfo);
+ m_OutAttributes.Add(index, declInfo);
}
}
else
{
- if (!m_InAttributes.TryGetValue(Index, out DeclInfo))
+ if (!m_InAttributes.TryGetValue(index, out declInfo))
{
- DeclInfo = new ShaderDeclInfo(InAttrName + GlslIndex, GlslIndex);
+ declInfo = new ShaderDeclInfo(InAttrName + glslIndex, glslIndex);
- m_InAttributes.Add(Index, DeclInfo);
+ m_InAttributes.Add(index, declInfo);
}
}
- DeclInfo.Enlarge(Elem + 1);
+ declInfo.Enlarge(elem + 1);
- if (!m_Attributes.ContainsKey(Index))
+ if (!m_Attributes.ContainsKey(index))
{
- DeclInfo = new ShaderDeclInfo(AttrName + GlslIndex, GlslIndex, false, 0, 4);
+ declInfo = new ShaderDeclInfo(AttrName + glslIndex, glslIndex, false, 0, 4);
- m_Attributes.Add(Index, DeclInfo);
+ m_Attributes.Add(index, declInfo);
}
- Traverse(Nodes, Abuf, Abuf.Vertex);
+ Traverse(nodes, abuf, abuf.Vertex);
break;
}
- case ShaderIrOperGpr Gpr:
+ case ShaderIrOperGpr gpr:
{
- if (!Gpr.IsConst)
+ if (!gpr.IsConst)
{
- string Name = GetGprName(Gpr.Index);
+ string name = GetGprName(gpr.Index);
- if (Gpr.RegisterSize == ShaderRegisterSize.Single)
+ if (gpr.RegisterSize == ShaderRegisterSize.Single)
{
- m_Gprs.TryAdd(Gpr.Index, new ShaderDeclInfo(Name, Gpr.Index));
+ m_Gprs.TryAdd(gpr.Index, new ShaderDeclInfo(name, gpr.Index));
}
- else if (Gpr.RegisterSize == ShaderRegisterSize.Half)
+ else if (gpr.RegisterSize == ShaderRegisterSize.Half)
{
- Name += "_h" + Gpr.HalfPart;
+ name += "_h" + gpr.HalfPart;
- m_GprsHalf.TryAdd((Gpr.Index << 1) | Gpr.HalfPart, new ShaderDeclInfo(Name, Gpr.Index));
+ m_GprsHalf.TryAdd((gpr.Index << 1) | gpr.HalfPart, new ShaderDeclInfo(name, gpr.Index));
}
else /* if (Gpr.RegisterSize == ShaderRegisterSize.Double) */
{
@@ -387,35 +386,35 @@ namespace Ryujinx.Graphics.Gal.Shader
break;
}
- case ShaderIrOperPred Pred:
+ case ShaderIrOperPred pred:
{
- if (!Pred.IsConst && !HasName(m_Preds, Pred.Index))
+ if (!pred.IsConst && !HasName(m_Preds, pred.Index))
{
- string Name = PredName + Pred.Index;
+ string name = PredName + pred.Index;
- m_Preds.TryAdd(Pred.Index, new ShaderDeclInfo(Name, Pred.Index));
+ m_Preds.TryAdd(pred.Index, new ShaderDeclInfo(name, pred.Index));
}
break;
}
}
}
- private bool HasName(Dictionary<int, ShaderDeclInfo> Decls, int Index)
+ private bool HasName(Dictionary<int, ShaderDeclInfo> decls, int index)
{
//This is used to check if the dictionary already contains
//a entry for a vector at a given index position.
//Used to enable turning gprs into vectors.
- int VecIndex = Index & ~3;
+ int vecIndex = index & ~3;
- if (Decls.TryGetValue(VecIndex, out ShaderDeclInfo DeclInfo))
+ if (decls.TryGetValue(vecIndex, out ShaderDeclInfo declInfo))
{
- if (DeclInfo.Size > 1 && Index < VecIndex + DeclInfo.Size)
+ if (declInfo.Size > 1 && index < vecIndex + declInfo.Size)
{
return true;
}
}
- return Decls.ContainsKey(Index);
+ return decls.ContainsKey(index);
}
}
}
diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
index 5f809525..228a9018 100644
--- a/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
+++ b/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
@@ -10,9 +10,9 @@ namespace Ryujinx.Graphics.Gal.Shader
{
public class GlslDecompiler
{
- private delegate string GetInstExpr(ShaderIrOp Op);
+ private delegate string GetInstExpr(ShaderIrOp op);
- private Dictionary<ShaderIrInst, GetInstExpr> InstsExpr;
+ private Dictionary<ShaderIrInst, GetInstExpr> _instsExpr;
private enum OperType
{
@@ -25,21 +25,21 @@ namespace Ryujinx.Graphics.Gal.Shader
private const int MaxVertexInput = 3;
- private GlslDecl Decl;
+ private GlslDecl _decl;
- private ShaderHeader Header, HeaderB;
+ private ShaderHeader _header, _headerB;
- private ShaderIrBlock[] Blocks, BlocksB;
+ private ShaderIrBlock[] _blocks, _blocksB;
- private StringBuilder SB;
+ private StringBuilder _sb;
public int MaxUboSize { get; }
- private bool IsNvidiaDriver;
+ private bool _isNvidiaDriver;
- public GlslDecompiler(int MaxUboSize, bool IsNvidiaDriver)
+ public GlslDecompiler(int maxUboSize, bool isNvidiaDriver)
{
- InstsExpr = new Dictionary<ShaderIrInst, GetInstExpr>()
+ _instsExpr = new Dictionary<ShaderIrInst, GetInstExpr>()
{
{ ShaderIrInst.Abs, GetAbsExpr },
{ ShaderIrInst.Add, GetAddExpr },
@@ -114,48 +114,48 @@ namespace Ryujinx.Graphics.Gal.Shader
{ ShaderIrInst.Xor, GetXorExpr }
};
- this.MaxUboSize = MaxUboSize / 16;
- this.IsNvidiaDriver = IsNvidiaDriver;
+ MaxUboSize = maxUboSize / 16;
+ _isNvidiaDriver = isNvidiaDriver;
}
public GlslProgram Decompile(
- IGalMemory Memory,
- long VpAPosition,
- long VpBPosition,
- GalShaderType ShaderType)
+ IGalMemory memory,
+ long vpAPosition,
+ long vpBPosition,
+ GalShaderType shaderType)
{
- Header = new ShaderHeader(Memory, VpAPosition);
- HeaderB = new ShaderHeader(Memory, VpBPosition);
+ _header = new ShaderHeader(memory, vpAPosition);
+ _headerB = new ShaderHeader(memory, vpBPosition);
- Blocks = ShaderDecoder.Decode(Memory, VpAPosition);
- BlocksB = ShaderDecoder.Decode(Memory, VpBPosition);
+ _blocks = ShaderDecoder.Decode(memory, vpAPosition);
+ _blocksB = ShaderDecoder.Decode(memory, vpBPosition);
- GlslDecl DeclVpA = new GlslDecl(Blocks, ShaderType, Header);
- GlslDecl DeclVpB = new GlslDecl(BlocksB, ShaderType, HeaderB);
+ GlslDecl declVpA = new GlslDecl(_blocks, shaderType, _header);
+ GlslDecl declVpB = new GlslDecl(_blocksB, shaderType, _headerB);
- Decl = GlslDecl.Merge(DeclVpA, DeclVpB);
+ _decl = GlslDecl.Merge(declVpA, declVpB);
return Decompile();
}
- public GlslProgram Decompile(IGalMemory Memory, long Position, GalShaderType ShaderType)
+ public GlslProgram Decompile(IGalMemory memory, long position, GalShaderType shaderType)
{
- Header = new ShaderHeader(Memory, Position);
- HeaderB = null;
+ _header = new ShaderHeader(memory, position);
+ _headerB = null;
- Blocks = ShaderDecoder.Decode(Memory, Position);
- BlocksB = null;
+ _blocks = ShaderDecoder.Decode(memory, position);
+ _blocksB = null;
- Decl = new GlslDecl(Blocks, ShaderType, Header);
+ _decl = new GlslDecl(_blocks, shaderType, _header);
return Decompile();
}
private GlslProgram Decompile()
{
- SB = new StringBuilder();
+ _sb = new StringBuilder();
- SB.AppendLine("#version 410 core");
+ _sb.AppendLine("#version 410 core");
PrintDeclHeader();
PrintDeclTextures();
@@ -167,599 +167,599 @@ namespace Ryujinx.Graphics.Gal.Shader
PrintDeclPreds();
PrintDeclSsy();
- if (BlocksB != null)
+ if (_blocksB != null)
{
- PrintBlockScope(Blocks, GlslDecl.BasicBlockAName);
+ PrintBlockScope(_blocks, GlslDecl.BasicBlockAName);
- SB.AppendLine();
+ _sb.AppendLine();
- PrintBlockScope(BlocksB, GlslDecl.BasicBlockBName);
+ PrintBlockScope(_blocksB, GlslDecl.BasicBlockBName);
}
else
{
- PrintBlockScope(Blocks, GlslDecl.BasicBlockName);
+ PrintBlockScope(_blocks, GlslDecl.BasicBlockName);
}
- SB.AppendLine();
+ _sb.AppendLine();
PrintMain();
- string GlslCode = SB.ToString();
+ string glslCode = _sb.ToString();
- List<ShaderDeclInfo> TextureInfo = new List<ShaderDeclInfo>();
+ List<ShaderDeclInfo> textureInfo = new List<ShaderDeclInfo>();
- TextureInfo.AddRange(Decl.Textures.Values);
- TextureInfo.AddRange(IterateCbTextures());
+ textureInfo.AddRange(_decl.Textures.Values);
+ textureInfo.AddRange(IterateCbTextures());
- return new GlslProgram(GlslCode, TextureInfo, Decl.Uniforms.Values);
+ return new GlslProgram(glslCode, textureInfo, _decl.Uniforms.Values);
}
private void PrintDeclHeader()
{
- if (Decl.ShaderType == GalShaderType.Geometry)
+ if (_decl.ShaderType == GalShaderType.Geometry)
{
- int MaxVertices = Header.MaxOutputVertexCount;
+ int maxVertices = _header.MaxOutputVertexCount;
- string OutputTopology;
+ string outputTopology;
- switch (Header.OutputTopology)
+ switch (_header.OutputTopology)
{
- case ShaderHeader.PointList: OutputTopology = "points"; break;
- case ShaderHeader.LineStrip: OutputTopology = "line_strip"; break;
- case ShaderHeader.TriangleStrip: OutputTopology = "triangle_strip"; break;
+ case ShaderHeader.PointList: outputTopology = "points"; break;
+ case ShaderHeader.LineStrip: outputTopology = "line_strip"; break;
+ case ShaderHeader.TriangleStrip: outputTopology = "triangle_strip"; break;
default: throw new InvalidOperationException();
}
- SB.AppendLine("#extension GL_ARB_enhanced_layouts : require");
+ _sb.AppendLine("#extension GL_ARB_enhanced_layouts : require");
- SB.AppendLine();
+ _sb.AppendLine();
- SB.AppendLine("// Stubbed. Maxwell geometry shaders don't inform input geometry type");
+ _sb.AppendLine("// Stubbed. Maxwell geometry shaders don't inform input geometry type");
- SB.AppendLine("layout(triangles) in;" + Environment.NewLine);
+ _sb.AppendLine("layout(triangles) in;" + Environment.NewLine);
- SB.AppendLine($"layout({OutputTopology}, max_vertices = {MaxVertices}) out;");
+ _sb.AppendLine($"layout({outputTopology}, max_vertices = {maxVertices}) out;");
- SB.AppendLine();
+ _sb.AppendLine();
}
}
- private string GetSamplerType(TextureTarget TextureTarget, bool HasShadow)
+ private string GetSamplerType(TextureTarget textureTarget, bool hasShadow)
{
- string Result;
+ string result;
- switch (TextureTarget)
+ switch (textureTarget)
{
case TextureTarget.Texture1D:
- Result = "sampler1D";
+ result = "sampler1D";
break;
case TextureTarget.Texture2D:
- Result = "sampler2D";
+ result = "sampler2D";
break;
case TextureTarget.Texture3D:
- Result = "sampler3D";
+ result = "sampler3D";
break;
case TextureTarget.TextureCubeMap:
- Result = "samplerCube";
+ result = "samplerCube";
break;
case TextureTarget.TextureRectangle:
- Result = "sampler2DRect";
+ result = "sampler2DRect";
break;
case TextureTarget.Texture1DArray:
- Result = "sampler1DArray";
+ result = "sampler1DArray";
break;
case TextureTarget.Texture2DArray:
- Result = "sampler2DArray";
+ result = "sampler2DArray";
break;
case TextureTarget.TextureCubeMapArray:
- Result = "samplerCubeArray";
+ result = "samplerCubeArray";
break;
case TextureTarget.TextureBuffer:
- Result = "samplerBuffer";
+ result = "samplerBuffer";
break;
case TextureTarget.Texture2DMultisample:
- Result = "sampler2DMS";
+ result = "sampler2DMS";
break;
case TextureTarget.Texture2DMultisampleArray:
- Result = "sampler2DMSArray";
+ result = "sampler2DMSArray";
break;
default:
throw new NotSupportedException();
}
- if (HasShadow)
- Result += "Shadow";
+ if (hasShadow)
+ result += "Shadow";
- return Result;
+ return result;
}
private void PrintDeclTextures()
{
- foreach (ShaderDeclInfo DeclInfo in IterateCbTextures())
+ foreach (ShaderDeclInfo declInfo in IterateCbTextures())
{
- TextureTarget Target = ImageUtils.GetTextureTarget(DeclInfo.TextureTarget);
- SB.AppendLine($"// {DeclInfo.TextureSuffix}");
- SB.AppendLine("uniform " + GetSamplerType(Target, (DeclInfo.TextureSuffix & TextureInstructionSuffix.DC) != 0) + " " + DeclInfo.Name + ";");
+ TextureTarget target = ImageUtils.GetTextureTarget(declInfo.TextureTarget);
+ _sb.AppendLine($"// {declInfo.TextureSuffix}");
+ _sb.AppendLine("uniform " + GetSamplerType(target, (declInfo.TextureSuffix & TextureInstructionSuffix.Dc) != 0) + " " + declInfo.Name + ";");
}
- foreach (ShaderDeclInfo DeclInfo in Decl.Textures.Values.OrderBy(DeclKeySelector))
+ foreach (ShaderDeclInfo declInfo in _decl.Textures.Values.OrderBy(DeclKeySelector))
{
- TextureTarget Target = ImageUtils.GetTextureTarget(DeclInfo.TextureTarget);
- SB.AppendLine($"// {DeclInfo.TextureSuffix}");
- SB.AppendLine("uniform " + GetSamplerType(Target, (DeclInfo.TextureSuffix & TextureInstructionSuffix.DC) != 0) + " " + DeclInfo.Name + ";");
+ TextureTarget target = ImageUtils.GetTextureTarget(declInfo.TextureTarget);
+ _sb.AppendLine($"// {declInfo.TextureSuffix}");
+ _sb.AppendLine("uniform " + GetSamplerType(target, (declInfo.TextureSuffix & TextureInstructionSuffix.Dc) != 0) + " " + declInfo.Name + ";");
}
}
private IEnumerable<ShaderDeclInfo> IterateCbTextures()
{
- HashSet<string> Names = new HashSet<string>();
+ HashSet<string> names = new HashSet<string>();
- foreach (ShaderDeclInfo DeclInfo in Decl.CbTextures.Values.OrderBy(DeclKeySelector))
+ foreach (ShaderDeclInfo declInfo in _decl.CbTextures.Values.OrderBy(DeclKeySelector))
{
- if (Names.Add(DeclInfo.Name))
+ if (names.Add(declInfo.Name))
{
- yield return DeclInfo;
+ yield return declInfo;
}
}
}
private void PrintDeclUniforms()
{
- if (Decl.ShaderType == GalShaderType.Vertex)
+ if (_decl.ShaderType == GalShaderType.Vertex)
{
//Memory layout here is [flip_x, flip_y, instance, unused]
//It's using 4 bytes, not 8
- SB.AppendLine("layout (std140) uniform " + GlslDecl.ExtraUniformBlockName + " {");
+ _sb.AppendLine("layout (std140) uniform " + GlslDecl.ExtraUniformBlockName + " {");
- SB.AppendLine(IdentationStr + "vec2 " + GlslDecl.FlipUniformName + ";");
+ _sb.AppendLine(IdentationStr + "vec2 " + GlslDecl.FlipUniformName + ";");
- SB.AppendLine(IdentationStr + "int " + GlslDecl.InstanceUniformName + ";");
+ _sb.AppendLine(IdentationStr + "int " + GlslDecl.InstanceUniformName + ";");
- SB.AppendLine("};");
- SB.AppendLine();
+ _sb.AppendLine("};");
+ _sb.AppendLine();
}
- foreach (ShaderDeclInfo DeclInfo in Decl.Uniforms.Values.OrderBy(DeclKeySelector))
+ foreach (ShaderDeclInfo declInfo in _decl.Uniforms.Values.OrderBy(DeclKeySelector))
{
- SB.AppendLine($"layout (std140) uniform {DeclInfo.Name} {{");
+ _sb.AppendLine($"layout (std140) uniform {declInfo.Name} {{");
- SB.AppendLine($"{IdentationStr}vec4 {DeclInfo.Name}_data[{MaxUboSize}];");
+ _sb.AppendLine($"{IdentationStr}vec4 {declInfo.Name}_data[{MaxUboSize}];");
- SB.AppendLine("};");
+ _sb.AppendLine("};");
}
- if (Decl.Uniforms.Count > 0)
+ if (_decl.Uniforms.Count > 0)
{
- SB.AppendLine();
+ _sb.AppendLine();
}
}
private void PrintDeclAttributes()
{
- string GeometryArray = (Decl.ShaderType == GalShaderType.Geometry) ? "[" + MaxVertexInput + "]" : "";
+ string geometryArray = (_decl.ShaderType == GalShaderType.Geometry) ? "[" + MaxVertexInput + "]" : "";
- PrintDecls(Decl.Attributes, Suffix: GeometryArray);
+ PrintDecls(_decl.Attributes, suffix: geometryArray);
}
private void PrintDeclInAttributes()
{
- if (Decl.ShaderType == GalShaderType.Fragment)
+ if (_decl.ShaderType == GalShaderType.Fragment)
{
- SB.AppendLine("layout (location = " + GlslDecl.PositionOutAttrLocation + ") in vec4 " + GlslDecl.PositionOutAttrName + ";");
+ _sb.AppendLine("layout (location = " + GlslDecl.PositionOutAttrLocation + ") in vec4 " + GlslDecl.PositionOutAttrName + ";");
}
- if (Decl.ShaderType == GalShaderType.Geometry)
+ if (_decl.ShaderType == GalShaderType.Geometry)
{
- if (Decl.InAttributes.Count > 0)
+ if (_decl.InAttributes.Count > 0)
{
- SB.AppendLine("in Vertex {");
+ _sb.AppendLine("in Vertex {");
- foreach (ShaderDeclInfo DeclInfo in Decl.InAttributes.Values.OrderBy(DeclKeySelector))
+ foreach (ShaderDeclInfo declInfo in _decl.InAttributes.Values.OrderBy(DeclKeySelector))
{
- if (DeclInfo.Index >= 0)
+ if (declInfo.Index >= 0)
{
- SB.AppendLine(IdentationStr + "layout (location = " + DeclInfo.Index + ") vec4 " + DeclInfo.Name + "; ");
+ _sb.AppendLine(IdentationStr + "layout (location = " + declInfo.Index + ") vec4 " + declInfo.Name + "; ");
}
}
- SB.AppendLine("} block_in[];" + Environment.NewLine);
+ _sb.AppendLine("} block_in[];" + Environment.NewLine);
}
}
else
{
- PrintDeclAttributes(Decl.InAttributes.Values, "in");
+ PrintDeclAttributes(_decl.InAttributes.Values, "in");
}
}
private void PrintDeclOutAttributes()
{
- if (Decl.ShaderType == GalShaderType.Fragment)
+ if (_decl.ShaderType == GalShaderType.Fragment)
{
- int Count = 0;
+ int count = 0;
- for (int Attachment = 0; Attachment < 8; Attachment++)
+ for (int attachment = 0; attachment < 8; attachment++)
{
- if (Header.OmapTargets[Attachment].Enabled)
+ if (_header.OmapTargets[attachment].Enabled)
{
- SB.AppendLine("layout (location = " + Attachment + ") out vec4 " + GlslDecl.FragmentOutputName + Attachment + ";");
+ _sb.AppendLine("layout (location = " + attachment + ") out vec4 " + GlslDecl.FragmentOutputName + attachment + ";");
- Count++;
+ count++;
}
}
- if (Count > 0)
+ if (count > 0)
{
- SB.AppendLine();
+ _sb.AppendLine();
}
}
else
{
- SB.AppendLine("layout (location = " + GlslDecl.PositionOutAttrLocation + ") out vec4 " + GlslDecl.PositionOutAttrName + ";");
- SB.AppendLine();
+ _sb.AppendLine("layout (location = " + GlslDecl.PositionOutAttrLocation + ") out vec4 " + GlslDecl.PositionOutAttrName + ";");
+ _sb.AppendLine();
}
- PrintDeclAttributes(Decl.OutAttributes.Values, "out");
+ PrintDeclAttributes(_decl.OutAttributes.Values, "out");
}
- private void PrintDeclAttributes(IEnumerable<ShaderDeclInfo> Decls, string InOut)
+ private void PrintDeclAttributes(IEnumerable<ShaderDeclInfo> decls, string inOut)
{
- int Count = 0;
+ int count = 0;
- foreach (ShaderDeclInfo DeclInfo in Decls.OrderBy(DeclKeySelector))
+ foreach (ShaderDeclInfo declInfo in decls.OrderBy(DeclKeySelector))
{
- if (DeclInfo.Index >= 0)
+ if (declInfo.Index >= 0)
{
- SB.AppendLine("layout (location = " + DeclInfo.Index + ") " + InOut + " vec4 " + DeclInfo.Name + ";");
+ _sb.AppendLine("layout (location = " + declInfo.Index + ") " + inOut + " vec4 " + declInfo.Name + ";");
- Count++;
+ count++;
}
}
- if (Count > 0)
+ if (count > 0)
{
- SB.AppendLine();
+ _sb.AppendLine();
}
}
private void PrintDeclGprs()
{
- PrintDecls(Decl.Gprs);
- PrintDecls(Decl.GprsHalf);
+ PrintDecls(_decl.Gprs);
+ PrintDecls(_decl.GprsHalf);
}
private void PrintDeclPreds()
{
- PrintDecls(Decl.Preds, "bool");
+ PrintDecls(_decl.Preds, "bool");
}
private void PrintDeclSsy()
{
- SB.AppendLine("uint " + GlslDecl.SsyCursorName + " = 0;");
+ _sb.AppendLine("uint " + GlslDecl.SsyCursorName + " = 0;");
- SB.AppendLine("uint " + GlslDecl.SsyStackName + "[" + GlslDecl.SsyStackSize + "];" + Environment.NewLine);
+ _sb.AppendLine("uint " + GlslDecl.SsyStackName + "[" + GlslDecl.SsyStackSize + "];" + Environment.NewLine);
}
- private void PrintDecls(IReadOnlyDictionary<int, ShaderDeclInfo> Dict, string CustomType = null, string Suffix = "")
+ private void PrintDecls(IReadOnlyDictionary<int, ShaderDeclInfo> dict, string customType = null, string suffix = "")
{
- foreach (ShaderDeclInfo DeclInfo in Dict.Values.OrderBy(DeclKeySelector))
+ foreach (ShaderDeclInfo declInfo in dict.Values.OrderBy(DeclKeySelector))
{
- string Name;
+ string name;
- if (CustomType != null)
+ if (customType != null)
{
- Name = CustomType + " " + DeclInfo.Name + Suffix + ";";
+ name = customType + " " + declInfo.Name + suffix + ";";
}
- else if (DeclInfo.Name.Contains(GlslDecl.FragmentOutputName))
+ else if (declInfo.Name.Contains(GlslDecl.FragmentOutputName))
{
- Name = "layout (location = " + DeclInfo.Index / 4 + ") out vec4 " + DeclInfo.Name + Suffix + ";";
+ name = "layout (location = " + declInfo.Index / 4 + ") out vec4 " + declInfo.Name + suffix + ";";
}
else
{
- Name = GetDecl(DeclInfo) + Suffix + ";";
+ name = GetDecl(declInfo) + suffix + ";";
}
- SB.AppendLine(Name);
+ _sb.AppendLine(name);
}
- if (Dict.Count > 0)
+ if (dict.Count > 0)
{
- SB.AppendLine();
+ _sb.AppendLine();
}
}
- private int DeclKeySelector(ShaderDeclInfo DeclInfo)
+ private int DeclKeySelector(ShaderDeclInfo declInfo)
{
- return DeclInfo.Cbuf << 24 | DeclInfo.Index;
+ return declInfo.Cbuf << 24 | declInfo.Index;
}
- private string GetDecl(ShaderDeclInfo DeclInfo)
+ private string GetDecl(ShaderDeclInfo declInfo)
{
- if (DeclInfo.Size == 4)
+ if (declInfo.Size == 4)
{
- return "vec4 " + DeclInfo.Name;
+ return "vec4 " + declInfo.Name;
}
else
{
- return "float " + DeclInfo.Name;
+ return "float " + declInfo.Name;
}
}
private void PrintMain()
{
- SB.AppendLine("void main() {");
+ _sb.AppendLine("void main() {");
- foreach (KeyValuePair<int, ShaderDeclInfo> KV in Decl.InAttributes)
+ foreach (KeyValuePair<int, ShaderDeclInfo> kv in _decl.InAttributes)
{
- if (!Decl.Attributes.TryGetValue(KV.Key, out ShaderDeclInfo Attr))
+ if (!_decl.Attributes.TryGetValue(kv.Key, out ShaderDeclInfo attr))
{
continue;
}
- ShaderDeclInfo DeclInfo = KV.Value;
+ ShaderDeclInfo declInfo = kv.Value;
- if (Decl.ShaderType == GalShaderType.Geometry)
+ if (_decl.ShaderType == GalShaderType.Geometry)
{
- for (int Vertex = 0; Vertex < MaxVertexInput; Vertex++)
+ for (int vertex = 0; vertex < MaxVertexInput; vertex++)
{
- string Dst = Attr.Name + "[" + Vertex + "]";
+ string dst = attr.Name + "[" + vertex + "]";
- string Src = "block_in[" + Vertex + "]." + DeclInfo.Name;
+ string src = "block_in[" + vertex + "]." + declInfo.Name;
- SB.AppendLine(IdentationStr + Dst + " = " + Src + ";");
+ _sb.AppendLine(IdentationStr + dst + " = " + src + ";");
}
}
else
{
- SB.AppendLine(IdentationStr + Attr.Name + " = " + DeclInfo.Name + ";");
+ _sb.AppendLine(IdentationStr + attr.Name + " = " + declInfo.Name + ";");
}
}
- SB.AppendLine(IdentationStr + "uint pc;");
+ _sb.AppendLine(IdentationStr + "uint pc;");
- if (BlocksB != null)
+ if (_blocksB != null)
{
- PrintProgram(Blocks, GlslDecl.BasicBlockAName);
- PrintProgram(BlocksB, GlslDecl.BasicBlockBName);
+ PrintProgram(_blocks, GlslDecl.BasicBlockAName);
+ PrintProgram(_blocksB, GlslDecl.BasicBlockBName);
}
else
{
- PrintProgram(Blocks, GlslDecl.BasicBlockName);
+ PrintProgram(_blocks, GlslDecl.BasicBlockName);
}
- if (Decl.ShaderType != GalShaderType.Geometry)
+ if (_decl.ShaderType != GalShaderType.Geometry)
{
PrintAttrToOutput();
}
- if (Decl.ShaderType == GalShaderType.Fragment)
+ if (_decl.ShaderType == GalShaderType.Fragment)
{
- if (Header.OmapDepth)
+ if (_header.OmapDepth)
{
- SB.AppendLine(IdentationStr + "gl_FragDepth = " + GlslDecl.GetGprName(Header.DepthRegister) + ";");
+ _sb.AppendLine(IdentationStr + "gl_FragDepth = " + GlslDecl.GetGprName(_header.DepthRegister) + ";");
}
- int GprIndex = 0;
+ int gprIndex = 0;
- for (int Attachment = 0; Attachment < 8; Attachment++)
+ for (int attachment = 0; attachment < 8; attachment++)
{
- string Output = GlslDecl.FragmentOutputName + Attachment;
+ string output = GlslDecl.FragmentOutputName + attachment;
- OmapTarget Target = Header.OmapTargets[Attachment];
+ OmapTarget target = _header.OmapTargets[attachment];
- for (int Component = 0; Component < 4; Component++)
+ for (int component = 0; component < 4; component++)
{
- if (Target.ComponentEnabled(Component))
+ if (target.ComponentEnabled(component))
{
- SB.AppendLine(IdentationStr + Output + "[" + Component + "] = " + GlslDecl.GetGprName(GprIndex) + ";");
+ _sb.AppendLine(IdentationStr + output + "[" + component + "] = " + GlslDecl.GetGprName(gprIndex) + ";");
- GprIndex++;
+ gprIndex++;
}
}
}
}
- SB.AppendLine("}");
+ _sb.AppendLine("}");
}
- private void PrintProgram(ShaderIrBlock[] Blocks, string Name)
+ private void PrintProgram(ShaderIrBlock[] blocks, string name)
{
- const string Ident1 = IdentationStr;
- const string Ident2 = Ident1 + IdentationStr;
- const string Ident3 = Ident2 + IdentationStr;
- const string Ident4 = Ident3 + IdentationStr;
+ const string ident1 = IdentationStr;
+ const string ident2 = ident1 + IdentationStr;
+ const string ident3 = ident2 + IdentationStr;
+ const string ident4 = ident3 + IdentationStr;
- SB.AppendLine(Ident1 + "pc = " + GetBlockPosition(Blocks[0]) + ";");
- SB.AppendLine(Ident1 + "do {");
- SB.AppendLine(Ident2 + "switch (pc) {");
+ _sb.AppendLine(ident1 + "pc = " + GetBlockPosition(blocks[0]) + ";");
+ _sb.AppendLine(ident1 + "do {");
+ _sb.AppendLine(ident2 + "switch (pc) {");
- foreach (ShaderIrBlock Block in Blocks)
+ foreach (ShaderIrBlock block in blocks)
{
- string FunctionName = Block.Position.ToString("x8");
+ string functionName = block.Position.ToString("x8");
- SB.AppendLine(Ident3 + "case 0x" + FunctionName + ": pc = " + Name + "_" + FunctionName + "(); break;");
+ _sb.AppendLine(ident3 + "case 0x" + functionName + ": pc = " + name + "_" + functionName + "(); break;");
}
- SB.AppendLine(Ident3 + "default:");
- SB.AppendLine(Ident4 + "pc = 0;");
- SB.AppendLine(Ident4 + "break;");
+ _sb.AppendLine(ident3 + "default:");
+ _sb.AppendLine(ident4 + "pc = 0;");
+ _sb.AppendLine(ident4 + "break;");
- SB.AppendLine(Ident2 + "}");
- SB.AppendLine(Ident1 + "} while (pc != 0);");
+ _sb.AppendLine(ident2 + "}");
+ _sb.AppendLine(ident1 + "} while (pc != 0);");
}
- private void PrintAttrToOutput(string Identation = IdentationStr)
+ private void PrintAttrToOutput(string identation = IdentationStr)
{
- foreach (KeyValuePair<int, ShaderDeclInfo> KV in Decl.OutAttributes)
+ foreach (KeyValuePair<int, ShaderDeclInfo> kv in _decl.OutAttributes)
{
- if (!Decl.Attributes.TryGetValue(KV.Key, out ShaderDeclInfo Attr))
+ if (!_decl.Attributes.TryGetValue(kv.Key, out ShaderDeclInfo attr))
{
continue;
}
- ShaderDeclInfo DeclInfo = KV.Value;
+ ShaderDeclInfo declInfo = kv.Value;
- string Name = Attr.Name;
+ string name = attr.Name;
- if (Decl.ShaderType == GalShaderType.Geometry)
+ if (_decl.ShaderType == GalShaderType.Geometry)
{
- Name += "[0]";
+ name += "[0]";
}
- SB.AppendLine(Identation + DeclInfo.Name + " = " + Name + ";");
+ _sb.AppendLine(identation + declInfo.Name + " = " + name + ";");
}
- if (Decl.ShaderType == GalShaderType.Vertex)
+ if (_decl.ShaderType == GalShaderType.Vertex)
{
- SB.AppendLine(Identation + "gl_Position.xy *= " + GlslDecl.FlipUniformName + ";");
+ _sb.AppendLine(identation + "gl_Position.xy *= " + GlslDecl.FlipUniformName + ";");
}
- if (Decl.ShaderType != GalShaderType.Fragment)
+ if (_decl.ShaderType != GalShaderType.Fragment)
{
- SB.AppendLine(Identation + GlslDecl.PositionOutAttrName + " = gl_Position;");
- SB.AppendLine(Identation + GlslDecl.PositionOutAttrName + ".w = 1;");
+ _sb.AppendLine(identation + GlslDecl.PositionOutAttrName + " = gl_Position;");
+ _sb.AppendLine(identation + GlslDecl.PositionOutAttrName + ".w = 1;");
}
}
- private void PrintBlockScope(ShaderIrBlock[] Blocks, string Name)
+ private void PrintBlockScope(ShaderIrBlock[] blocks, string name)
{
- foreach (ShaderIrBlock Block in Blocks)
+ foreach (ShaderIrBlock block in blocks)
{
- SB.AppendLine("uint " + Name + "_" + Block.Position.ToString("x8") + "() {");
+ _sb.AppendLine("uint " + name + "_" + block.Position.ToString("x8") + "() {");
- PrintNodes(Block, Block.GetNodes());
+ PrintNodes(block, block.GetNodes());
- SB.AppendLine("}" + Environment.NewLine);
+ _sb.AppendLine("}" + Environment.NewLine);
}
}
- private void PrintNodes(ShaderIrBlock Block, ShaderIrNode[] Nodes)
+ private void PrintNodes(ShaderIrBlock block, ShaderIrNode[] nodes)
{
- foreach (ShaderIrNode Node in Nodes)
+ foreach (ShaderIrNode node in nodes)
{
- PrintNode(Block, Node, IdentationStr);
+ PrintNode(block, node, IdentationStr);
}
- if (Nodes.Length == 0)
+ if (nodes.Length == 0)
{
- SB.AppendLine(IdentationStr + "return 0u;");
+ _sb.AppendLine(IdentationStr + "return 0u;");
return;
}
- ShaderIrNode Last = Nodes[Nodes.Length - 1];
+ ShaderIrNode last = nodes[nodes.Length - 1];
- bool UnconditionalFlowChange = false;
+ bool unconditionalFlowChange = false;
- if (Last is ShaderIrOp Op)
+ if (last is ShaderIrOp op)
{
- switch (Op.Inst)
+ switch (op.Inst)
{
case ShaderIrInst.Bra:
case ShaderIrInst.Exit:
case ShaderIrInst.Sync:
- UnconditionalFlowChange = true;
+ unconditionalFlowChange = true;
break;
}
}
- if (!UnconditionalFlowChange)
+ if (!unconditionalFlowChange)
{
- if (Block.Next != null)
+ if (block.Next != null)
{
- SB.AppendLine(IdentationStr + "return " + GetBlockPosition(Block.Next) + ";");
+ _sb.AppendLine(IdentationStr + "return " + GetBlockPosition(block.Next) + ";");
}
else
{
- SB.AppendLine(IdentationStr + "return 0u;");
+ _sb.AppendLine(IdentationStr + "return 0u;");
}
}
}
- private void PrintNode(ShaderIrBlock Block, ShaderIrNode Node, string Identation)
+ private void PrintNode(ShaderIrBlock block, ShaderIrNode node, string identation)
{
- if (Node is ShaderIrCond Cond)
+ if (node is ShaderIrCond cond)
{
- string IfExpr = GetSrcExpr(Cond.Pred, true);
+ string ifExpr = GetSrcExpr(cond.Pred, true);
- if (Cond.Not)
+ if (cond.Not)
{
- IfExpr = "!(" + IfExpr + ")";
+ ifExpr = "!(" + ifExpr + ")";
}
- SB.AppendLine(Identation + "if (" + IfExpr + ") {");
+ _sb.AppendLine(identation + "if (" + ifExpr + ") {");
- PrintNode(Block, Cond.Child, Identation + IdentationStr);
+ PrintNode(block, cond.Child, identation + IdentationStr);
- SB.AppendLine(Identation + "}");
+ _sb.AppendLine(identation + "}");
}
- else if (Node is ShaderIrAsg Asg)
+ else if (node is ShaderIrAsg asg)
{
- if (IsValidOutOper(Asg.Dst))
+ if (IsValidOutOper(asg.Dst))
{
- string Expr = GetSrcExpr(Asg.Src, true);
+ string expr = GetSrcExpr(asg.Src, true);
- Expr = GetExprWithCast(Asg.Dst, Asg.Src, Expr);
+ expr = GetExprWithCast(asg.Dst, asg.Src, expr);
- SB.AppendLine(Identation + GetDstOperName(Asg.Dst) + " = " + Expr + ";");
+ _sb.AppendLine(identation + GetDstOperName(asg.Dst) + " = " + expr + ";");
}
}
- else if (Node is ShaderIrOp Op)
+ else if (node is ShaderIrOp op)
{
- switch (Op.Inst)
+ switch (op.Inst)
{
case ShaderIrInst.Bra:
{
- SB.AppendLine(Identation + "return " + GetBlockPosition(Block.Branch) + ";");
+ _sb.AppendLine(identation + "return " + GetBlockPosition(block.Branch) + ";");
break;
}
case ShaderIrInst.Emit:
{
- PrintAttrToOutput(Identation);
+ PrintAttrToOutput(identation);
- SB.AppendLine(Identation + "EmitVertex();");
+ _sb.AppendLine(identation + "EmitVertex();");
break;
}
case ShaderIrInst.Ssy:
{
- string StackIndex = GlslDecl.SsyStackName + "[" + GlslDecl.SsyCursorName + "]";
+ string stackIndex = GlslDecl.SsyStackName + "[" + GlslDecl.SsyCursorName + "]";
- int TargetPosition = (Op.OperandA as ShaderIrOperImm).Value;
+ int targetPosition = (op.OperandA as ShaderIrOperImm).Value;
- string Target = "0x" + TargetPosition.ToString("x8") + "u";
+ string target = "0x" + targetPosition.ToString("x8") + "u";
- SB.AppendLine(Identation + StackIndex + " = " + Target + ";");
+ _sb.AppendLine(identation + stackIndex + " = " + target + ";");
- SB.AppendLine(Identation + GlslDecl.SsyCursorName + "++;");
+ _sb.AppendLine(identation + GlslDecl.SsyCursorName + "++;");
break;
}
case ShaderIrInst.Sync:
{
- SB.AppendLine(Identation + GlslDecl.SsyCursorName + "--;");
+ _sb.AppendLine(identation + GlslDecl.SsyCursorName + "--;");
- string Target = GlslDecl.SsyStackName + "[" + GlslDecl.SsyCursorName + "]";
+ string target = GlslDecl.SsyStackName + "[" + GlslDecl.SsyCursorName + "]";
- SB.AppendLine(Identation + "return " + Target + ";");
+ _sb.AppendLine(identation + "return " + target + ";");
break;
}
default:
- SB.AppendLine(Identation + GetSrcExpr(Op, true) + ";");
+ _sb.AppendLine(identation + GetSrcExpr(op, true) + ";");
break;
}
}
- else if (Node is ShaderIrCmnt Cmnt)
+ else if (node is ShaderIrCmnt cmnt)
{
- SB.AppendLine(Identation + "// " + Cmnt.Comment);
+ _sb.AppendLine(identation + "// " + cmnt.Comment);
}
else
{
@@ -767,13 +767,13 @@ namespace Ryujinx.Graphics.Gal.Shader
}
}
- private bool IsValidOutOper(ShaderIrNode Node)
+ private bool IsValidOutOper(ShaderIrNode node)
{
- if (Node is ShaderIrOperGpr Gpr && Gpr.IsConst)
+ if (node is ShaderIrOperGpr gpr && gpr.IsConst)
{
return false;
}
- else if (Node is ShaderIrOperPred Pred && Pred.IsConst)
+ else if (node is ShaderIrOperPred pred && pred.IsConst)
{
return false;
}
@@ -781,61 +781,61 @@ namespace Ryujinx.Graphics.Gal.Shader
return true;
}
- private string GetDstOperName(ShaderIrNode Node)
+ private string GetDstOperName(ShaderIrNode node)
{
- if (Node is ShaderIrOperAbuf Abuf)
+ if (node is ShaderIrOperAbuf abuf)
{
- return GetOutAbufName(Abuf);
+ return GetOutAbufName(abuf);
}
- else if (Node is ShaderIrOperGpr Gpr)
+ else if (node is ShaderIrOperGpr gpr)
{
- return GetName(Gpr);
+ return GetName(gpr);
}
- else if (Node is ShaderIrOperPred Pred)
+ else if (node is ShaderIrOperPred pred)
{
- return GetName(Pred);
+ return GetName(pred);
}
- throw new ArgumentException(nameof(Node));
+ throw new ArgumentException(nameof(node));
}
- private string GetSrcExpr(ShaderIrNode Node, bool Entry = false)
+ private string GetSrcExpr(ShaderIrNode node, bool entry = false)
{
- switch (Node)
+ switch (node)
{
- case ShaderIrOperAbuf Abuf: return GetName (Abuf);
- case ShaderIrOperCbuf Cbuf: return GetName (Cbuf);
- case ShaderIrOperGpr Gpr: return GetName (Gpr);
- case ShaderIrOperImm Imm: return GetValue(Imm);
- case ShaderIrOperImmf Immf: return GetValue(Immf);
- case ShaderIrOperPred Pred: return GetName (Pred);
+ case ShaderIrOperAbuf abuf: return GetName (abuf);
+ case ShaderIrOperCbuf cbuf: return GetName (cbuf);
+ case ShaderIrOperGpr gpr: return GetName (gpr);
+ case ShaderIrOperImm imm: return GetValue(imm);
+ case ShaderIrOperImmf immf: return GetValue(immf);
+ case ShaderIrOperPred pred: return GetName (pred);
- case ShaderIrOp Op:
- string Expr;
+ case ShaderIrOp op:
+ string expr;
- if (InstsExpr.TryGetValue(Op.Inst, out GetInstExpr GetExpr))
+ if (_instsExpr.TryGetValue(op.Inst, out GetInstExpr getExpr))
{
- Expr = GetExpr(Op);
+ expr = getExpr(op);
}
else
{
- throw new NotImplementedException(Op.Inst.ToString());
+ throw new NotImplementedException(op.Inst.ToString());
}
- if (!Entry && NeedsParentheses(Op))
+ if (!entry && NeedsParentheses(op))
{
- Expr = "(" + Expr + ")";
+ expr = "(" + expr + ")";
}
- return Expr;
+ return expr;
- default: throw new ArgumentException(nameof(Node));
+ default: throw new ArgumentException(nameof(node));
}
}
- private static bool NeedsParentheses(ShaderIrOp Op)
+ private static bool NeedsParentheses(ShaderIrOp op)
{
- switch (Op.Inst)
+ switch (op.Inst)
{
case ShaderIrInst.Ipa:
case ShaderIrInst.Texq:
@@ -848,63 +848,63 @@ namespace Ryujinx.Graphics.Gal.Shader
return true;
}
- private string GetName(ShaderIrOperCbuf Cbuf)
+ private string GetName(ShaderIrOperCbuf cbuf)
{
- if (!Decl.Uniforms.TryGetValue(Cbuf.Index, out ShaderDeclInfo DeclInfo))
+ if (!_decl.Uniforms.TryGetValue(cbuf.Index, out ShaderDeclInfo declInfo))
{
throw new InvalidOperationException();
}
- if (Cbuf.Offs != null)
+ if (cbuf.Offs != null)
{
- string Offset = "floatBitsToInt(" + GetSrcExpr(Cbuf.Offs) + ")";
+ string offset = "floatBitsToInt(" + GetSrcExpr(cbuf.Offs) + ")";
- string Index = "(" + Cbuf.Pos * 4 + " + " + Offset + ")";
+ string index = "(" + cbuf.Pos * 4 + " + " + offset + ")";
- return $"{DeclInfo.Name}_data[{Index} / 16][({Index} / 4) % 4]";
+ return $"{declInfo.Name}_data[{index} / 16][({index} / 4) % 4]";
}
else
{
- return $"{DeclInfo.Name}_data[{Cbuf.Pos / 4}][{Cbuf.Pos % 4}]";
+ return $"{declInfo.Name}_data[{cbuf.Pos / 4}][{cbuf.Pos % 4}]";
}
}
- private string GetOutAbufName(ShaderIrOperAbuf Abuf)
+ private string GetOutAbufName(ShaderIrOperAbuf abuf)
{
- if (Decl.ShaderType == GalShaderType.Geometry)
+ if (_decl.ShaderType == GalShaderType.Geometry)
{
- switch (Abuf.Offs)
+ switch (abuf.Offs)
{
case GlslDecl.LayerAttr: return "gl_Layer";
}
}
- return GetAttrTempName(Abuf);
+ return GetAttrTempName(abuf);
}
- private string GetName(ShaderIrOperAbuf Abuf)
+ private string GetName(ShaderIrOperAbuf abuf)
{
//Handle special scalar read-only attributes here.
- if (Decl.ShaderType == GalShaderType.Vertex)
+ if (_decl.ShaderType == GalShaderType.Vertex)
{
- switch (Abuf.Offs)
+ switch (abuf.Offs)
{
case GlslDecl.VertexIdAttr: return "gl_VertexID";
case GlslDecl.InstanceIdAttr: return GlslDecl.InstanceUniformName;
}
}
- else if (Decl.ShaderType == GalShaderType.TessEvaluation)
+ else if (_decl.ShaderType == GalShaderType.TessEvaluation)
{
- switch (Abuf.Offs)
+ switch (abuf.Offs)
{
case GlslDecl.TessCoordAttrX: return "gl_TessCoord.x";
case GlslDecl.TessCoordAttrY: return "gl_TessCoord.y";
case GlslDecl.TessCoordAttrZ: return "gl_TessCoord.z";
}
}
- else if (Decl.ShaderType == GalShaderType.Fragment)
+ else if (_decl.ShaderType == GalShaderType.Fragment)
{
- switch (Abuf.Offs)
+ switch (abuf.Offs)
{
case GlslDecl.PointCoordAttrX: return "gl_PointCoord.x";
case GlslDecl.PointCoordAttrY: return "gl_PointCoord.y";
@@ -912,65 +912,65 @@ namespace Ryujinx.Graphics.Gal.Shader
}
}
- return GetAttrTempName(Abuf);
+ return GetAttrTempName(abuf);
}
- private string GetAttrTempName(ShaderIrOperAbuf Abuf)
+ private string GetAttrTempName(ShaderIrOperAbuf abuf)
{
- int Index = Abuf.Offs >> 4;
- int Elem = (Abuf.Offs >> 2) & 3;
+ int index = abuf.Offs >> 4;
+ int elem = (abuf.Offs >> 2) & 3;
- string Swizzle = "." + GetAttrSwizzle(Elem);
+ string swizzle = "." + GetAttrSwizzle(elem);
- if (!Decl.Attributes.TryGetValue(Index, out ShaderDeclInfo DeclInfo))
+ if (!_decl.Attributes.TryGetValue(index, out ShaderDeclInfo declInfo))
{
//Handle special vec4 attributes here
//(for example, index 7 is always gl_Position).
- if (Index == GlslDecl.GlPositionVec4Index)
+ if (index == GlslDecl.GlPositionVec4Index)
{
- string Name =
- Decl.ShaderType != GalShaderType.Vertex &&
- Decl.ShaderType != GalShaderType.Geometry ? GlslDecl.PositionOutAttrName : "gl_Position";
+ string name =
+ _decl.ShaderType != GalShaderType.Vertex &&
+ _decl.ShaderType != GalShaderType.Geometry ? GlslDecl.PositionOutAttrName : "gl_Position";
- return Name + Swizzle;
+ return name + swizzle;
}
- else if (Abuf.Offs == GlslDecl.PointSizeAttr)
+ else if (abuf.Offs == GlslDecl.PointSizeAttr)
{
return "gl_PointSize";
}
}
- if (DeclInfo.Index >= 32)
+ if (declInfo.Index >= 32)
{
- throw new InvalidOperationException($"Shader attribute offset {Abuf.Offs} is invalid.");
+ throw new InvalidOperationException($"Shader attribute offset {abuf.Offs} is invalid.");
}
- if (Decl.ShaderType == GalShaderType.Geometry)
+ if (_decl.ShaderType == GalShaderType.Geometry)
{
- string Vertex = "floatBitsToInt(" + GetSrcExpr(Abuf.Vertex) + ")";
+ string vertex = "floatBitsToInt(" + GetSrcExpr(abuf.Vertex) + ")";
- return DeclInfo.Name + "[" + Vertex + "]" + Swizzle;
+ return declInfo.Name + "[" + vertex + "]" + swizzle;
}
else
{
- return DeclInfo.Name + Swizzle;
+ return declInfo.Name + swizzle;
}
}
- private string GetName(ShaderIrOperGpr Gpr)
+ private string GetName(ShaderIrOperGpr gpr)
{
- if (Gpr.IsConst)
+ if (gpr.IsConst)
{
return "0";
}
- if (Gpr.RegisterSize == ShaderRegisterSize.Single)
+ if (gpr.RegisterSize == ShaderRegisterSize.Single)
{
- return GetNameWithSwizzle(Decl.Gprs, Gpr.Index);
+ return GetNameWithSwizzle(_decl.Gprs, gpr.Index);
}
- else if (Gpr.RegisterSize == ShaderRegisterSize.Half)
+ else if (gpr.RegisterSize == ShaderRegisterSize.Half)
{
- return GetNameWithSwizzle(Decl.GprsHalf, (Gpr.Index << 1) | Gpr.HalfPart);
+ return GetNameWithSwizzle(_decl.GprsHalf, (gpr.Index << 1) | gpr.HalfPart);
}
else /* if (Gpr.RegisterSize == ShaderRegisterSize.Double) */
{
@@ -978,163 +978,163 @@ namespace Ryujinx.Graphics.Gal.Shader
}
}
- private string GetValue(ShaderIrOperImm Imm)
+ private string GetValue(ShaderIrOperImm imm)
{
//Only use hex is the value is too big and would likely be hard to read as int.
- if (Imm.Value > 0xfff ||
- Imm.Value < -0xfff)
+ if (imm.Value > 0xfff ||
+ imm.Value < -0xfff)
{
- return "0x" + Imm.Value.ToString("x8", CultureInfo.InvariantCulture);
+ return "0x" + imm.Value.ToString("x8", CultureInfo.InvariantCulture);
}
else
{
- return GetIntConst(Imm.Value);
+ return GetIntConst(imm.Value);
}
}
- private string GetValue(ShaderIrOperImmf Immf)
+ private string GetValue(ShaderIrOperImmf immf)
{
- return GetFloatConst(Immf.Value);
+ return GetFloatConst(immf.Value);
}
- private string GetName(ShaderIrOperPred Pred)
+ private string GetName(ShaderIrOperPred pred)
{
- return Pred.IsConst ? "true" : GetNameWithSwizzle(Decl.Preds, Pred.Index);
+ return pred.IsConst ? "true" : GetNameWithSwizzle(_decl.Preds, pred.Index);
}
- private string GetNameWithSwizzle(IReadOnlyDictionary<int, ShaderDeclInfo> Dict, int Index)
+ private string GetNameWithSwizzle(IReadOnlyDictionary<int, ShaderDeclInfo> dict, int index)
{
- int VecIndex = Index & ~3;
+ int vecIndex = index & ~3;
- if (Dict.TryGetValue(VecIndex, out ShaderDeclInfo DeclInfo))
+ if (dict.TryGetValue(vecIndex, out ShaderDeclInfo declInfo))
{
- if (DeclInfo.Size > 1 && Index < VecIndex + DeclInfo.Size)
+ if (declInfo.Size > 1 && index < vecIndex + declInfo.Size)
{
- return DeclInfo.Name + "." + GetAttrSwizzle(Index & 3);
+ return declInfo.Name + "." + GetAttrSwizzle(index & 3);
}
}
- if (!Dict.TryGetValue(Index, out DeclInfo))
+ if (!dict.TryGetValue(index, out declInfo))
{
throw new InvalidOperationException();
}
- return DeclInfo.Name;
+ return declInfo.Name;
}
- private string GetAttrSwizzle(int Elem)
+ private string GetAttrSwizzle(int elem)
{
- return "xyzw".Substring(Elem, 1);
+ return "xyzw".Substring(elem, 1);
}
- private string GetAbsExpr(ShaderIrOp Op) => GetUnaryCall(Op, "abs");
+ private string GetAbsExpr(ShaderIrOp op) => GetUnaryCall(op, "abs");
- private string GetAddExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "+");
+ private string GetAddExpr(ShaderIrOp op) => GetBinaryExpr(op, "+");
- private string GetAndExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "&");
+ private string GetAndExpr(ShaderIrOp op) => GetBinaryExpr(op, "&");
- private string GetAsrExpr(ShaderIrOp Op) => GetBinaryExpr(Op, ">>");
+ private string GetAsrExpr(ShaderIrOp op) => GetBinaryExpr(op, ">>");
- private string GetBandExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "&&");
+ private string GetBandExpr(ShaderIrOp op) => GetBinaryExpr(op, "&&");
- private string GetBnotExpr(ShaderIrOp Op) => GetUnaryExpr(Op, "!");
+ private string GetBnotExpr(ShaderIrOp op) => GetUnaryExpr(op, "!");
- private string GetBorExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "||");
+ private string GetBorExpr(ShaderIrOp op) => GetBinaryExpr(op, "||");
- private string GetBxorExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "^^");
+ private string GetBxorExpr(ShaderIrOp op) => GetBinaryExpr(op, "^^");
- private string GetCeilExpr(ShaderIrOp Op) => GetUnaryCall(Op, "ceil");
+ private string GetCeilExpr(ShaderIrOp op) => GetUnaryCall(op, "ceil");
- private string GetClampsExpr(ShaderIrOp Op)
+ private string GetClampsExpr(ShaderIrOp op)
{
- return "clamp(" + GetOperExpr(Op, Op.OperandA) + ", " +
- GetOperExpr(Op, Op.OperandB) + ", " +
- GetOperExpr(Op, Op.OperandC) + ")";
+ return "clamp(" + GetOperExpr(op, op.OperandA) + ", " +
+ GetOperExpr(op, op.OperandB) + ", " +
+ GetOperExpr(op, op.OperandC) + ")";
}
- private string GetClampuExpr(ShaderIrOp Op)
+ private string GetClampuExpr(ShaderIrOp op)
{
- return "int(clamp(uint(" + GetOperExpr(Op, Op.OperandA) + "), " +
- "uint(" + GetOperExpr(Op, Op.OperandB) + "), " +
- "uint(" + GetOperExpr(Op, Op.OperandC) + ")))";
+ return "int(clamp(uint(" + GetOperExpr(op, op.OperandA) + "), " +
+ "uint(" + GetOperExpr(op, op.OperandB) + "), " +
+ "uint(" + GetOperExpr(op, op.OperandC) + ")))";
}
- private string GetCeqExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "==");
+ private string GetCeqExpr(ShaderIrOp op) => GetBinaryExpr(op, "==");
- private string GetCequExpr(ShaderIrOp Op) => GetBinaryExprWithNaN(Op, "==");
+ private string GetCequExpr(ShaderIrOp op) => GetBinaryExprWithNaN(op, "==");
- private string GetCgeExpr(ShaderIrOp Op) => GetBinaryExpr(Op, ">=");
+ private string GetCgeExpr(ShaderIrOp op) => GetBinaryExpr(op, ">=");
- private string GetCgeuExpr(ShaderIrOp Op) => GetBinaryExprWithNaN(Op, ">=");
+ private string GetCgeuExpr(ShaderIrOp op) => GetBinaryExprWithNaN(op, ">=");
- private string GetCgtExpr(ShaderIrOp Op) => GetBinaryExpr(Op, ">");
+ private string GetCgtExpr(ShaderIrOp op) => GetBinaryExpr(op, ">");
- private string GetCgtuExpr(ShaderIrOp Op) => GetBinaryExprWithNaN(Op, ">");
+ private string GetCgtuExpr(ShaderIrOp op) => GetBinaryExprWithNaN(op, ">");
- private string GetCleExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "<=");
+ private string GetCleExpr(ShaderIrOp op) => GetBinaryExpr(op, "<=");
- private string GetCleuExpr(ShaderIrOp Op) => GetBinaryExprWithNaN(Op, "<=");
+ private string GetCleuExpr(ShaderIrOp op) => GetBinaryExprWithNaN(op, "<=");
- private string GetCltExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "<");
+ private string GetCltExpr(ShaderIrOp op) => GetBinaryExpr(op, "<");
- private string GetCltuExpr(ShaderIrOp Op) => GetBinaryExprWithNaN(Op, "<");
+ private string GetCltuExpr(ShaderIrOp op) => GetBinaryExprWithNaN(op, "<");
- private string GetCnanExpr(ShaderIrOp Op) => GetUnaryCall(Op, "isnan");
+ private string GetCnanExpr(ShaderIrOp op) => GetUnaryCall(op, "isnan");
- private string GetCneExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "!=");
+ private string GetCneExpr(ShaderIrOp op) => GetBinaryExpr(op, "!=");
- private string GetCutExpr(ShaderIrOp Op) => "EndPrimitive()";
+ private string GetCutExpr(ShaderIrOp op) => "EndPrimitive()";
- private string GetCneuExpr(ShaderIrOp Op) => GetBinaryExprWithNaN(Op, "!=");
+ private string GetCneuExpr(ShaderIrOp op) => GetBinaryExprWithNaN(op, "!=");
- private string GetCnumExpr(ShaderIrOp Op) => GetUnaryCall(Op, "!isnan");
+ private string GetCnumExpr(ShaderIrOp op) => GetUnaryCall(op, "!isnan");
- private string GetExitExpr(ShaderIrOp Op) => "return 0u";
+ private string GetExitExpr(ShaderIrOp op) => "return 0u";
- private string GetFcosExpr(ShaderIrOp Op) => GetUnaryCall(Op, "cos");
+ private string GetFcosExpr(ShaderIrOp op) => GetUnaryCall(op, "cos");
- private string GetFex2Expr(ShaderIrOp Op) => GetUnaryCall(Op, "exp2");
+ private string GetFex2Expr(ShaderIrOp op) => GetUnaryCall(op, "exp2");
- private string GetFfmaExpr(ShaderIrOp Op) => GetTernaryExpr(Op, "*", "+");
+ private string GetFfmaExpr(ShaderIrOp op) => GetTernaryExpr(op, "*", "+");
- private string GetFclampExpr(ShaderIrOp Op) => GetTernaryCall(Op, "clamp");
+ private string GetFclampExpr(ShaderIrOp op) => GetTernaryCall(op, "clamp");
- private string GetFlg2Expr(ShaderIrOp Op) => GetUnaryCall(Op, "log2");
+ private string GetFlg2Expr(ShaderIrOp op) => GetUnaryCall(op, "log2");
- private string GetFloorExpr(ShaderIrOp Op) => GetUnaryCall(Op, "floor");
+ private string GetFloorExpr(ShaderIrOp op) => GetUnaryCall(op, "floor");
- private string GetFrcpExpr(ShaderIrOp Op) => GetUnaryExpr(Op, "1 / ");
+ private string GetFrcpExpr(ShaderIrOp op) => GetUnaryExpr(op, "1 / ");
- private string GetFrsqExpr(ShaderIrOp Op) => GetUnaryCall(Op, "inversesqrt");
+ private string GetFrsqExpr(ShaderIrOp op) => GetUnaryCall(op, "inversesqrt");
- private string GetFsinExpr(ShaderIrOp Op) => GetUnaryCall(Op, "sin");
+ private string GetFsinExpr(ShaderIrOp op) => GetUnaryCall(op, "sin");
- private string GetFsqrtExpr(ShaderIrOp Op) => GetUnaryCall(Op, "sqrt");
+ private string GetFsqrtExpr(ShaderIrOp op) => GetUnaryCall(op, "sqrt");
- private string GetFtosExpr(ShaderIrOp Op)
+ private string GetFtosExpr(ShaderIrOp op)
{
- return "int(" + GetOperExpr(Op, Op.OperandA) + ")";
+ return "int(" + GetOperExpr(op, op.OperandA) + ")";
}
- private string GetFtouExpr(ShaderIrOp Op)
+ private string GetFtouExpr(ShaderIrOp op)
{
- return "int(uint(" + GetOperExpr(Op, Op.OperandA) + "))";
+ return "int(uint(" + GetOperExpr(op, op.OperandA) + "))";
}
- private string GetIpaExpr(ShaderIrOp Op)
+ private string GetIpaExpr(ShaderIrOp op)
{
- ShaderIrMetaIpa Meta = (ShaderIrMetaIpa)Op.MetaData;
+ ShaderIrMetaIpa meta = (ShaderIrMetaIpa)op.MetaData;
- ShaderIrOperAbuf Abuf = (ShaderIrOperAbuf)Op.OperandA;
+ ShaderIrOperAbuf abuf = (ShaderIrOperAbuf)op.OperandA;
- if (Meta.Mode == ShaderIpaMode.Pass)
+ if (meta.Mode == ShaderIpaMode.Pass)
{
- int Index = Abuf.Offs >> 4;
- int Elem = (Abuf.Offs >> 2) & 3;
+ int index = abuf.Offs >> 4;
+ int elem = (abuf.Offs >> 2) & 3;
- if (Decl.ShaderType == GalShaderType.Fragment && Index == GlslDecl.GlPositionVec4Index)
+ if (_decl.ShaderType == GalShaderType.Fragment && index == GlslDecl.GlPositionVec4Index)
{
- switch (Elem)
+ switch (elem)
{
case 0: return "gl_FragCoord.x";
case 1: return "gl_FragCoord.y";
@@ -1144,433 +1144,433 @@ namespace Ryujinx.Graphics.Gal.Shader
}
}
- return GetSrcExpr(Op.OperandA);
+ return GetSrcExpr(op.OperandA);
}
- private string GetKilExpr(ShaderIrOp Op) => "discard";
+ private string GetKilExpr(ShaderIrOp op) => "discard";
- private string GetLslExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "<<");
- private string GetLsrExpr(ShaderIrOp Op)
+ private string GetLslExpr(ShaderIrOp op) => GetBinaryExpr(op, "<<");
+ private string GetLsrExpr(ShaderIrOp op)
{
- return "int(uint(" + GetOperExpr(Op, Op.OperandA) + ") >> " +
- GetOperExpr(Op, Op.OperandB) + ")";
+ return "int(uint(" + GetOperExpr(op, op.OperandA) + ") >> " +
+ GetOperExpr(op, op.OperandB) + ")";
}
- private string GetMaxExpr(ShaderIrOp Op) => GetBinaryCall(Op, "max");
- private string GetMinExpr(ShaderIrOp Op) => GetBinaryCall(Op, "min");
+ private string GetMaxExpr(ShaderIrOp op) => GetBinaryCall(op, "max");
+ private string GetMinExpr(ShaderIrOp op) => GetBinaryCall(op, "min");
- private string GetMulExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "*");
+ private string GetMulExpr(ShaderIrOp op) => GetBinaryExpr(op, "*");
- private string GetNegExpr(ShaderIrOp Op) => GetUnaryExpr(Op, "-");
+ private string GetNegExpr(ShaderIrOp op) => GetUnaryExpr(op, "-");
- private string GetNotExpr(ShaderIrOp Op) => GetUnaryExpr(Op, "~");
+ private string GetNotExpr(ShaderIrOp op) => GetUnaryExpr(op, "~");
- private string GetOrExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "|");
+ private string GetOrExpr(ShaderIrOp op) => GetBinaryExpr(op, "|");
- private string GetStofExpr(ShaderIrOp Op)
+ private string GetStofExpr(ShaderIrOp op)
{
- return "float(" + GetOperExpr(Op, Op.OperandA) + ")";
+ return "float(" + GetOperExpr(op, op.OperandA) + ")";
}
- private string GetSubExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "-");
+ private string GetSubExpr(ShaderIrOp op) => GetBinaryExpr(op, "-");
- private string GetTexbExpr(ShaderIrOp Op)
+ private string GetTexbExpr(ShaderIrOp op)
{
- ShaderIrMetaTex Meta = (ShaderIrMetaTex)Op.MetaData;
+ ShaderIrMetaTex meta = (ShaderIrMetaTex)op.MetaData;
- if (!Decl.CbTextures.TryGetValue(Op, out ShaderDeclInfo DeclInfo))
+ if (!_decl.CbTextures.TryGetValue(op, out ShaderDeclInfo declInfo))
{
throw new InvalidOperationException();
}
- string Coords = GetTexSamplerCoords(Op);
+ string coords = GetTexSamplerCoords(op);
- string Ch = "rgba".Substring(Meta.Elem, 1);
+ string ch = "rgba".Substring(meta.Elem, 1);
- return GetTextureOperation(Op, DeclInfo.Name, Coords, Ch);
+ return GetTextureOperation(op, declInfo.Name, coords, ch);
}
- private string GetTexqExpr(ShaderIrOp Op)
+ private string GetTexqExpr(ShaderIrOp op)
{
- ShaderIrMetaTexq Meta = (ShaderIrMetaTexq)Op.MetaData;
+ ShaderIrMetaTexq meta = (ShaderIrMetaTexq)op.MetaData;
- string Ch = "xyzw".Substring(Meta.Elem, 1);
+ string ch = "xyzw".Substring(meta.Elem, 1);
- if (Meta.Info == ShaderTexqInfo.Dimension)
+ if (meta.Info == ShaderTexqInfo.Dimension)
{
- string Sampler = GetTexSamplerName(Op);
+ string sampler = GetTexSamplerName(op);
- string Lod = GetOperExpr(Op, Op.OperandA); //???
+ string lod = GetOperExpr(op, op.OperandA); //???
- return "textureSize(" + Sampler + ", " + Lod + ")." + Ch;
+ return "textureSize(" + sampler + ", " + lod + ")." + ch;
}
else
{
- throw new NotImplementedException(Meta.Info.ToString());
+ throw new NotImplementedException(meta.Info.ToString());
}
}
- private string GetTexsExpr(ShaderIrOp Op)
+ private string GetTexsExpr(ShaderIrOp op)
{
- ShaderIrMetaTex Meta = (ShaderIrMetaTex)Op.MetaData;
+ ShaderIrMetaTex meta = (ShaderIrMetaTex)op.MetaData;
- string Sampler = GetTexSamplerName(Op);
+ string sampler = GetTexSamplerName(op);
- string Coords = GetTexSamplerCoords(Op);
+ string coords = GetTexSamplerCoords(op);
- string Ch = "rgba".Substring(Meta.Elem, 1);
+ string ch = "rgba".Substring(meta.Elem, 1);
- return GetTextureOperation(Op, Sampler, Coords, Ch);
+ return GetTextureOperation(op, sampler, coords, ch);
}
- private string GetTld4Expr(ShaderIrOp Op)
+ private string GetTld4Expr(ShaderIrOp op)
{
- ShaderIrMetaTex Meta = (ShaderIrMetaTex)Op.MetaData;
+ ShaderIrMetaTex meta = (ShaderIrMetaTex)op.MetaData;
- string Sampler = GetTexSamplerName(Op);
+ string sampler = GetTexSamplerName(op);
- string Coords = GetTexSamplerCoords(Op);
+ string coords = GetTexSamplerCoords(op);
- string Ch = "rgba".Substring(Meta.Elem, 1);
+ string ch = "rgba".Substring(meta.Elem, 1);
- return GetTextureGatherOperation(Op, Sampler, Coords, Ch);
+ return GetTextureGatherOperation(op, sampler, coords, ch);
}
// TODO: support AOFFI on non nvidia drivers
- private string GetTxlfExpr(ShaderIrOp Op)
+ private string GetTxlfExpr(ShaderIrOp op)
{
// TODO: Support all suffixes
- ShaderIrMetaTex Meta = (ShaderIrMetaTex)Op.MetaData;
+ ShaderIrMetaTex meta = (ShaderIrMetaTex)op.MetaData;
- TextureInstructionSuffix Suffix = Meta.TextureInstructionSuffix;
+ TextureInstructionSuffix suffix = meta.TextureInstructionSuffix;
- string Sampler = GetTexSamplerName(Op);
+ string sampler = GetTexSamplerName(op);
- string Coords = GetITexSamplerCoords(Op);
+ string coords = GetITexSamplerCoords(op);
- string Ch = "rgba".Substring(Meta.Elem, 1);
+ string ch = "rgba".Substring(meta.Elem, 1);
- string Lod = "0";
+ string lod = "0";
- if (Meta.LevelOfDetail != null)
+ if (meta.LevelOfDetail != null)
{
- Lod = GetOperExpr(Op, Meta.LevelOfDetail);
+ lod = GetOperExpr(op, meta.LevelOfDetail);
}
- if ((Suffix & TextureInstructionSuffix.AOffI) != 0 && IsNvidiaDriver)
+ if ((suffix & TextureInstructionSuffix.AOffI) != 0 && _isNvidiaDriver)
{
- string Offset = GetTextureOffset(Meta, GetOperExpr(Op, Meta.Offset));
- return "texelFetchOffset(" + Sampler + ", " + Coords + ", " + Lod + ", " + Offset + ")." + Ch;
+ string offset = GetTextureOffset(meta, GetOperExpr(op, meta.Offset));
+ return "texelFetchOffset(" + sampler + ", " + coords + ", " + lod + ", " + offset + ")." + ch;
}
- return "texelFetch(" + Sampler + ", " + Coords + ", " + Lod + ")." + Ch;
+ return "texelFetch(" + sampler + ", " + coords + ", " + lod + ")." + ch;
}
- private string GetTruncExpr(ShaderIrOp Op) => GetUnaryCall(Op, "trunc");
+ private string GetTruncExpr(ShaderIrOp op) => GetUnaryCall(op, "trunc");
- private string GetUtofExpr(ShaderIrOp Op)
+ private string GetUtofExpr(ShaderIrOp op)
{
- return "float(uint(" + GetOperExpr(Op, Op.OperandA) + "))";
+ return "float(uint(" + GetOperExpr(op, op.OperandA) + "))";
}
- private string GetXorExpr(ShaderIrOp Op) => GetBinaryExpr(Op, "^");
+ private string GetXorExpr(ShaderIrOp op) => GetBinaryExpr(op, "^");
- private string GetUnaryCall(ShaderIrOp Op, string FuncName)
+ private string GetUnaryCall(ShaderIrOp op, string funcName)
{
- return FuncName + "(" + GetOperExpr(Op, Op.OperandA) + ")";
+ return funcName + "(" + GetOperExpr(op, op.OperandA) + ")";
}
- private string GetBinaryCall(ShaderIrOp Op, string FuncName)
+ private string GetBinaryCall(ShaderIrOp op, string funcName)
{
- return FuncName + "(" + GetOperExpr(Op, Op.OperandA) + ", " +
- GetOperExpr(Op, Op.OperandB) + ")";
+ return funcName + "(" + GetOperExpr(op, op.OperandA) + ", " +
+ GetOperExpr(op, op.OperandB) + ")";
}
- private string GetTernaryCall(ShaderIrOp Op, string FuncName)
+ private string GetTernaryCall(ShaderIrOp op, string funcName)
{
- return FuncName + "(" + GetOperExpr(Op, Op.OperandA) + ", " +
- GetOperExpr(Op, Op.OperandB) + ", " +
- GetOperExpr(Op, Op.OperandC) + ")";
+ return funcName + "(" + GetOperExpr(op, op.OperandA) + ", " +
+ GetOperExpr(op, op.OperandB) + ", " +
+ GetOperExpr(op, op.OperandC) + ")";
}
- private string GetUnaryExpr(ShaderIrOp Op, string Opr)
+ private string GetUnaryExpr(ShaderIrOp op, string opr)
{
- return Opr + GetOperExpr(Op, Op.OperandA);
+ return opr + GetOperExpr(op, op.OperandA);
}
- private string GetBinaryExpr(ShaderIrOp Op, string Opr)
+ private string GetBinaryExpr(ShaderIrOp op, string opr)
{
- return GetOperExpr(Op, Op.OperandA) + " " + Opr + " " +
- GetOperExpr(Op, Op.OperandB);
+ return GetOperExpr(op, op.OperandA) + " " + opr + " " +
+ GetOperExpr(op, op.OperandB);
}
- private string GetBinaryExprWithNaN(ShaderIrOp Op, string Opr)
+ private string GetBinaryExprWithNaN(ShaderIrOp op, string opr)
{
- string A = GetOperExpr(Op, Op.OperandA);
- string B = GetOperExpr(Op, Op.OperandB);
+ string a = GetOperExpr(op, op.OperandA);
+ string b = GetOperExpr(op, op.OperandB);
- string NaNCheck =
- " || isnan(" + A + ")" +
- " || isnan(" + B + ")";
+ string nanCheck =
+ " || isnan(" + a + ")" +
+ " || isnan(" + b + ")";
- return A + " " + Opr + " " + B + NaNCheck;
+ return a + " " + opr + " " + b + nanCheck;
}
- private string GetTernaryExpr(ShaderIrOp Op, string Opr1, string Opr2)
+ private string GetTernaryExpr(ShaderIrOp op, string opr1, string opr2)
{
- return GetOperExpr(Op, Op.OperandA) + " " + Opr1 + " " +
- GetOperExpr(Op, Op.OperandB) + " " + Opr2 + " " +
- GetOperExpr(Op, Op.OperandC);
+ return GetOperExpr(op, op.OperandA) + " " + opr1 + " " +
+ GetOperExpr(op, op.OperandB) + " " + opr2 + " " +
+ GetOperExpr(op, op.OperandC);
}
- private string GetTexSamplerName(ShaderIrOp Op)
+ private string GetTexSamplerName(ShaderIrOp op)
{
- ShaderIrOperImm Node = (ShaderIrOperImm)Op.OperandC;
+ ShaderIrOperImm node = (ShaderIrOperImm)op.OperandC;
- int Handle = ((ShaderIrOperImm)Op.OperandC).Value;
+ int handle = ((ShaderIrOperImm)op.OperandC).Value;
- if (!Decl.Textures.TryGetValue(Handle, out ShaderDeclInfo DeclInfo))
+ if (!_decl.Textures.TryGetValue(handle, out ShaderDeclInfo declInfo))
{
throw new InvalidOperationException();
}
- return DeclInfo.Name;
+ return declInfo.Name;
}
- private string GetTexSamplerCoords(ShaderIrOp Op)
+ private string GetTexSamplerCoords(ShaderIrOp op)
{
- ShaderIrMetaTex Meta = (ShaderIrMetaTex)Op.MetaData;
+ ShaderIrMetaTex meta = (ShaderIrMetaTex)op.MetaData;
- bool HasDepth = (Meta.TextureInstructionSuffix & TextureInstructionSuffix.DC) != 0;
+ bool hasDepth = (meta.TextureInstructionSuffix & TextureInstructionSuffix.Dc) != 0;
- int Coords = ImageUtils.GetCoordsCountTextureTarget(Meta.TextureTarget);
+ int coords = ImageUtils.GetCoordsCountTextureTarget(meta.TextureTarget);
- bool IsArray = ImageUtils.IsArray(Meta.TextureTarget);
+ bool isArray = ImageUtils.IsArray(meta.TextureTarget);
- string GetLastArgument(ShaderIrNode Node)
+ string GetLastArgument(ShaderIrNode node)
{
- string Result = GetOperExpr(Op, Node);
+ string result = GetOperExpr(op, node);
// array index is actually an integer so we need to pass it correctly
- if (IsArray)
+ if (isArray)
{
- Result = "float(floatBitsToInt(" + Result + "))";
+ result = "float(floatBitsToInt(" + result + "))";
}
- return Result;
+ return result;
}
- string LastArgument;
- string DepthArgument = "";
+ string lastArgument;
+ string depthArgument = "";
- int VecSize = Coords;
- if (HasDepth && Op.Inst != ShaderIrInst.Tld4)
+ int vecSize = coords;
+ if (hasDepth && op.Inst != ShaderIrInst.Tld4)
{
- VecSize++;
- DepthArgument = $", {GetOperExpr(Op, Meta.DepthCompare)}";
+ vecSize++;
+ depthArgument = $", {GetOperExpr(op, meta.DepthCompare)}";
}
- switch (Coords)
+ switch (coords)
{
case 1:
- if (HasDepth)
+ if (hasDepth)
{
- return $"vec3({GetOperExpr(Op, Meta.Coordinates[0])}, 0.0{DepthArgument})";
+ return $"vec3({GetOperExpr(op, meta.Coordinates[0])}, 0.0{depthArgument})";
}
- return GetOperExpr(Op, Meta.Coordinates[0]);
+ return GetOperExpr(op, meta.Coordinates[0]);
case 2:
- LastArgument = GetLastArgument(Meta.Coordinates[1]);
+ lastArgument = GetLastArgument(meta.Coordinates[1]);
- return $"vec{VecSize}({GetOperExpr(Op, Meta.Coordinates[0])}, {LastArgument}{DepthArgument})";
+ return $"vec{vecSize}({GetOperExpr(op, meta.Coordinates[0])}, {lastArgument}{depthArgument})";
case 3:
- LastArgument = GetLastArgument(Meta.Coordinates[2]);
+ lastArgument = GetLastArgument(meta.Coordinates[2]);
- return $"vec{VecSize}({GetOperExpr(Op, Meta.Coordinates[0])}, {GetOperExpr(Op, Meta.Coordinates[1])}, {LastArgument}{DepthArgument})";
+ return $"vec{vecSize}({GetOperExpr(op, meta.Coordinates[0])}, {GetOperExpr(op, meta.Coordinates[1])}, {lastArgument}{depthArgument})";
case 4:
- LastArgument = GetLastArgument(Meta.Coordinates[3]);
+ lastArgument = GetLastArgument(meta.Coordinates[3]);
- return $"vec4({GetOperExpr(Op, Meta.Coordinates[0])}, {GetOperExpr(Op, Meta.Coordinates[1])}, {GetOperExpr(Op, Meta.Coordinates[2])}, {LastArgument}){DepthArgument}";
+ return $"vec4({GetOperExpr(op, meta.Coordinates[0])}, {GetOperExpr(op, meta.Coordinates[1])}, {GetOperExpr(op, meta.Coordinates[2])}, {lastArgument}){depthArgument}";
default:
throw new InvalidOperationException();
}
}
- private string GetTextureOffset(ShaderIrMetaTex Meta, string Oper, int Shift = 4, int Mask = 0xF)
+ private string GetTextureOffset(ShaderIrMetaTex meta, string oper, int shift = 4, int mask = 0xF)
{
- string GetOffset(string Operation, int Index)
+ string GetOffset(string operation, int index)
{
- return $"({Operation} >> {Index * Shift}) & 0x{Mask:x}";
+ return $"({operation} >> {index * shift}) & 0x{mask:x}";
}
- int Coords = ImageUtils.GetCoordsCountTextureTarget(Meta.TextureTarget);
+ int coords = ImageUtils.GetCoordsCountTextureTarget(meta.TextureTarget);
- if (ImageUtils.IsArray(Meta.TextureTarget))
- Coords -= 1;
+ if (ImageUtils.IsArray(meta.TextureTarget))
+ coords -= 1;
- switch (Coords)
+ switch (coords)
{
case 1:
- return GetOffset(Oper, 0);
+ return GetOffset(oper, 0);
case 2:
- return "ivec2(" + GetOffset(Oper, 0) + ", " + GetOffset(Oper, 1) + ")";
+ return "ivec2(" + GetOffset(oper, 0) + ", " + GetOffset(oper, 1) + ")";
case 3:
- return "ivec3(" + GetOffset(Oper, 0) + ", " + GetOffset(Oper, 1) + ", " + GetOffset(Oper, 2) + ")";
+ return "ivec3(" + GetOffset(oper, 0) + ", " + GetOffset(oper, 1) + ", " + GetOffset(oper, 2) + ")";
case 4:
- return "ivec4(" + GetOffset(Oper, 0) + ", " + GetOffset(Oper, 1) + ", " + GetOffset(Oper, 2) + ", " + GetOffset(Oper, 3) + ")";
+ return "ivec4(" + GetOffset(oper, 0) + ", " + GetOffset(oper, 1) + ", " + GetOffset(oper, 2) + ", " + GetOffset(oper, 3) + ")";
default:
throw new InvalidOperationException();
}
}
// TODO: support AOFFI on non nvidia drivers
- private string GetTextureGatherOperation(ShaderIrOp Op, string Sampler, string Coords, string Ch)
+ private string GetTextureGatherOperation(ShaderIrOp op, string sampler, string coords, string ch)
{
- ShaderIrMetaTex Meta = (ShaderIrMetaTex)Op.MetaData;
+ ShaderIrMetaTex meta = (ShaderIrMetaTex)op.MetaData;
- TextureInstructionSuffix Suffix = Meta.TextureInstructionSuffix;
+ TextureInstructionSuffix suffix = meta.TextureInstructionSuffix;
- string ChString = "." + Ch;
+ string chString = "." + ch;
- string Comp = Meta.Component.ToString();
+ string comp = meta.Component.ToString();
- if ((Suffix & TextureInstructionSuffix.DC) != 0)
+ if ((suffix & TextureInstructionSuffix.Dc) != 0)
{
- Comp = GetOperExpr(Op, Meta.DepthCompare);
+ comp = GetOperExpr(op, meta.DepthCompare);
}
- if ((Suffix & TextureInstructionSuffix.AOffI) != 0 && IsNvidiaDriver)
+ if ((suffix & TextureInstructionSuffix.AOffI) != 0 && _isNvidiaDriver)
{
- string Offset = GetTextureOffset(Meta, "floatBitsToInt((" + GetOperExpr(Op, Meta.Offset) + "))", 8, 0x3F);
+ string offset = GetTextureOffset(meta, "floatBitsToInt((" + GetOperExpr(op, meta.Offset) + "))", 8, 0x3F);
- if ((Suffix & TextureInstructionSuffix.DC) != 0)
+ if ((suffix & TextureInstructionSuffix.Dc) != 0)
{
- return "textureGatherOffset(" + Sampler + ", " + Coords + ", " + Comp + ", " + Offset + ")" + ChString;
+ return "textureGatherOffset(" + sampler + ", " + coords + ", " + comp + ", " + offset + ")" + chString;
}
- return "textureGatherOffset(" + Sampler + ", " + Coords + ", " + Offset + ", " + Comp + ")" + ChString;
+ return "textureGatherOffset(" + sampler + ", " + coords + ", " + offset + ", " + comp + ")" + chString;
}
// TODO: Support PTP
- else if ((Suffix & TextureInstructionSuffix.PTP) != 0)
+ else if ((suffix & TextureInstructionSuffix.Ptp) != 0)
{
throw new NotImplementedException();
}
- return "textureGather(" + Sampler + ", " + Coords + ", " + Comp + ")" + ChString;
+ return "textureGather(" + sampler + ", " + coords + ", " + comp + ")" + chString;
}
// TODO: support AOFFI on non nvidia drivers
- private string GetTextureOperation(ShaderIrOp Op, string Sampler, string Coords, string Ch)
+ private string GetTextureOperation(ShaderIrOp op, string sampler, string coords, string ch)
{
- ShaderIrMetaTex Meta = (ShaderIrMetaTex)Op.MetaData;
+ ShaderIrMetaTex meta = (ShaderIrMetaTex)op.MetaData;
- TextureInstructionSuffix Suffix = Meta.TextureInstructionSuffix;
+ TextureInstructionSuffix suffix = meta.TextureInstructionSuffix;
- string ChString = "." + Ch;
+ string chString = "." + ch;
- if ((Suffix & TextureInstructionSuffix.DC) != 0)
+ if ((suffix & TextureInstructionSuffix.Dc) != 0)
{
- ChString = "";
+ chString = "";
}
// TODO: Support LBA and LLA
- if ((Suffix & TextureInstructionSuffix.LZ) != 0)
+ if ((suffix & TextureInstructionSuffix.Lz) != 0)
{
- if ((Suffix & TextureInstructionSuffix.AOffI) != 0 && IsNvidiaDriver)
+ if ((suffix & TextureInstructionSuffix.AOffI) != 0 && _isNvidiaDriver)
{
- string Offset = GetTextureOffset(Meta, "floatBitsToInt((" + GetOperExpr(Op, Meta.Offset) + "))");
+ string offset = GetTextureOffset(meta, "floatBitsToInt((" + GetOperExpr(op, meta.Offset) + "))");
- return "textureLodOffset(" + Sampler + ", " + Coords + ", 0.0, " + Offset + ")" + ChString;
+ return "textureLodOffset(" + sampler + ", " + coords + ", 0.0, " + offset + ")" + chString;
}
- return "textureLod(" + Sampler + ", " + Coords + ", 0.0)" + ChString;
+ return "textureLod(" + sampler + ", " + coords + ", 0.0)" + chString;
}
- else if ((Suffix & TextureInstructionSuffix.LB) != 0)
+ else if ((suffix & TextureInstructionSuffix.Lb) != 0)
{
- if ((Suffix & TextureInstructionSuffix.AOffI) != 0 && IsNvidiaDriver)
+ if ((suffix & TextureInstructionSuffix.AOffI) != 0 && _isNvidiaDriver)
{
- string Offset = GetTextureOffset(Meta, "floatBitsToInt((" + GetOperExpr(Op, Meta.Offset) + "))");
+ string offset = GetTextureOffset(meta, "floatBitsToInt((" + GetOperExpr(op, meta.Offset) + "))");
- return "textureOffset(" + Sampler + ", " + Coords + ", " + Offset + ", " + GetOperExpr(Op, Meta.LevelOfDetail) + ")" + ChString;
+ return "textureOffset(" + sampler + ", " + coords + ", " + offset + ", " + GetOperExpr(op, meta.LevelOfDetail) + ")" + chString;
}
- return "texture(" + Sampler + ", " + Coords + ", " + GetOperExpr(Op, Meta.LevelOfDetail) + ")" + ChString;
+ return "texture(" + sampler + ", " + coords + ", " + GetOperExpr(op, meta.LevelOfDetail) + ")" + chString;
}
- else if ((Suffix & TextureInstructionSuffix.LL) != 0)
+ else if ((suffix & TextureInstructionSuffix.Ll) != 0)
{
- if ((Suffix & TextureInstructionSuffix.AOffI) != 0 && IsNvidiaDriver)
+ if ((suffix & TextureInstructionSuffix.AOffI) != 0 && _isNvidiaDriver)
{
- string Offset = GetTextureOffset(Meta, "floatBitsToInt((" + GetOperExpr(Op, Meta.Offset) + "))");
+ string offset = GetTextureOffset(meta, "floatBitsToInt((" + GetOperExpr(op, meta.Offset) + "))");
- return "textureLodOffset(" + Sampler + ", " + Coords + ", " + GetOperExpr(Op, Meta.LevelOfDetail) + ", " + Offset + ")" + ChString;
+ return "textureLodOffset(" + sampler + ", " + coords + ", " + GetOperExpr(op, meta.LevelOfDetail) + ", " + offset + ")" + chString;
}
- return "textureLod(" + Sampler + ", " + Coords + ", " + GetOperExpr(Op, Meta.LevelOfDetail) + ")" + ChString;
+ return "textureLod(" + sampler + ", " + coords + ", " + GetOperExpr(op, meta.LevelOfDetail) + ")" + chString;
}
- else if ((Suffix & TextureInstructionSuffix.AOffI) != 0 && IsNvidiaDriver)
+ else if ((suffix & TextureInstructionSuffix.AOffI) != 0 && _isNvidiaDriver)
{
- string Offset = GetTextureOffset(Meta, "floatBitsToInt((" + GetOperExpr(Op, Meta.Offset) + "))");
+ string offset = GetTextureOffset(meta, "floatBitsToInt((" + GetOperExpr(op, meta.Offset) + "))");
- return "textureOffset(" + Sampler + ", " + Coords + ", " + Offset + ")" + ChString;
+ return "textureOffset(" + sampler + ", " + coords + ", " + offset + ")" + chString;
}
else
{
- return "texture(" + Sampler + ", " + Coords + ")" + ChString;
+ return "texture(" + sampler + ", " + coords + ")" + chString;
}
- throw new NotImplementedException($"Texture Suffix {Meta.TextureInstructionSuffix} is not implemented");
+ throw new NotImplementedException($"Texture Suffix {meta.TextureInstructionSuffix} is not implemented");
}
- private string GetITexSamplerCoords(ShaderIrOp Op)
+ private string GetITexSamplerCoords(ShaderIrOp op)
{
- ShaderIrMetaTex Meta = (ShaderIrMetaTex)Op.MetaData;
+ ShaderIrMetaTex meta = (ShaderIrMetaTex)op.MetaData;
- switch (ImageUtils.GetCoordsCountTextureTarget(Meta.TextureTarget))
+ switch (ImageUtils.GetCoordsCountTextureTarget(meta.TextureTarget))
{
case 1:
- return GetOperExpr(Op, Meta.Coordinates[0]);
+ return GetOperExpr(op, meta.Coordinates[0]);
case 2:
- return "ivec2(" + GetOperExpr(Op, Meta.Coordinates[0]) + ", " + GetOperExpr(Op, Meta.Coordinates[1]) + ")";
+ return "ivec2(" + GetOperExpr(op, meta.Coordinates[0]) + ", " + GetOperExpr(op, meta.Coordinates[1]) + ")";
case 3:
- return "ivec3(" + GetOperExpr(Op, Meta.Coordinates[0]) + ", " + GetOperExpr(Op, Meta.Coordinates[1]) + ", " + GetOperExpr(Op, Meta.Coordinates[2]) + ")";
+ return "ivec3(" + GetOperExpr(op, meta.Coordinates[0]) + ", " + GetOperExpr(op, meta.Coordinates[1]) + ", " + GetOperExpr(op, meta.Coordinates[2]) + ")";
default:
throw new InvalidOperationException();
}
}
- private string GetOperExpr(ShaderIrOp Op, ShaderIrNode Oper)
+ private string GetOperExpr(ShaderIrOp op, ShaderIrNode oper)
{
- return GetExprWithCast(Op, Oper, GetSrcExpr(Oper));
+ return GetExprWithCast(op, oper, GetSrcExpr(oper));
}
- private static string GetExprWithCast(ShaderIrNode Dst, ShaderIrNode Src, string Expr)
+ private static string GetExprWithCast(ShaderIrNode dst, ShaderIrNode src, string expr)
{
//Note: The "DstType" (of the cast) is the type that the operation
//uses on the source operands, while the "SrcType" is the destination
//type of the operand result (if it is a operation) or just the type
//of the variable for registers/uniforms/attributes.
- OperType DstType = GetSrcNodeType(Dst);
- OperType SrcType = GetDstNodeType(Src);
+ OperType dstType = GetSrcNodeType(dst);
+ OperType srcType = GetDstNodeType(src);
- if (DstType != SrcType)
+ if (dstType != srcType)
{
//Check for invalid casts
//(like bool to int/float and others).
- if (SrcType != OperType.F32 &&
- SrcType != OperType.I32)
+ if (srcType != OperType.F32 &&
+ srcType != OperType.I32)
{
throw new InvalidOperationException();
}
- switch (Src)
+ switch (src)
{
- case ShaderIrOperGpr Gpr:
+ case ShaderIrOperGpr gpr:
{
//When the Gpr is ZR, just return the 0 value directly,
//since the float encoding for 0 is 0.
- if (Gpr.IsConst)
+ if (gpr.IsConst)
{
return "0";
}
@@ -1578,37 +1578,37 @@ namespace Ryujinx.Graphics.Gal.Shader
}
}
- switch (DstType)
+ switch (dstType)
{
- case OperType.F32: Expr = "intBitsToFloat(" + Expr + ")"; break;
- case OperType.I32: Expr = "floatBitsToInt(" + Expr + ")"; break;
+ case OperType.F32: expr = "intBitsToFloat(" + expr + ")"; break;
+ case OperType.I32: expr = "floatBitsToInt(" + expr + ")"; break;
}
}
- return Expr;
+ return expr;
}
- private static string GetIntConst(int Value)
+ private static string GetIntConst(int value)
{
- string Expr = Value.ToString(CultureInfo.InvariantCulture);
+ string expr = value.ToString(CultureInfo.InvariantCulture);
- return Value < 0 ? "(" + Expr + ")" : Expr;
+ return value < 0 ? "(" + expr + ")" : expr;
}
- private static string GetFloatConst(float Value)
+ private static string GetFloatConst(float value)
{
- string Expr = Value.ToString(CultureInfo.InvariantCulture);
+ string expr = value.ToString(CultureInfo.InvariantCulture);
- return Value < 0 ? "(" + Expr + ")" : Expr;
+ return value < 0 ? "(" + expr + ")" : expr;
}
- private static OperType GetDstNodeType(ShaderIrNode Node)
+ private static OperType GetDstNodeType(ShaderIrNode node)
{
//Special case instructions with the result type different
//from the input types (like integer <-> float conversion) here.
- if (Node is ShaderIrOp Op)
+ if (node is ShaderIrOp op)
{
- switch (Op.Inst)
+ switch (op.Inst)
{
case ShaderIrInst.Stof:
case ShaderIrInst.Txlf:
@@ -1621,54 +1621,54 @@ namespace Ryujinx.Graphics.Gal.Shader
}
}
- return GetSrcNodeType(Node);
+ return GetSrcNodeType(node);
}
- private static OperType GetSrcNodeType(ShaderIrNode Node)
+ private static OperType GetSrcNodeType(ShaderIrNode node)
{
- switch (Node)
+ switch (node)
{
- case ShaderIrOperAbuf Abuf:
- return Abuf.Offs == GlslDecl.LayerAttr ||
- Abuf.Offs == GlslDecl.InstanceIdAttr ||
- Abuf.Offs == GlslDecl.VertexIdAttr ||
- Abuf.Offs == GlslDecl.FaceAttr
+ case ShaderIrOperAbuf abuf:
+ return abuf.Offs == GlslDecl.LayerAttr ||
+ abuf.Offs == GlslDecl.InstanceIdAttr ||
+ abuf.Offs == GlslDecl.VertexIdAttr ||
+ abuf.Offs == GlslDecl.FaceAttr
? OperType.I32
: OperType.F32;
- case ShaderIrOperCbuf Cbuf: return OperType.F32;
- case ShaderIrOperGpr Gpr: return OperType.F32;
- case ShaderIrOperImm Imm: return OperType.I32;
- case ShaderIrOperImmf Immf: return OperType.F32;
- case ShaderIrOperPred Pred: return OperType.Bool;
+ case ShaderIrOperCbuf cbuf: return OperType.F32;
+ case ShaderIrOperGpr gpr: return OperType.F32;
+ case ShaderIrOperImm imm: return OperType.I32;
+ case ShaderIrOperImmf immf: return OperType.F32;
+ case ShaderIrOperPred pred: return OperType.Bool;
- case ShaderIrOp Op:
- if (Op.Inst > ShaderIrInst.B_Start &&
- Op.Inst < ShaderIrInst.B_End)
+ case ShaderIrOp op:
+ if (op.Inst > ShaderIrInst.B_Start &&
+ op.Inst < ShaderIrInst.B_End)
{
return OperType.Bool;
}
- else if (Op.Inst > ShaderIrInst.F_Start &&
- Op.Inst < ShaderIrInst.F_End)
+ else if (op.Inst > ShaderIrInst.F_Start &&
+ op.Inst < ShaderIrInst.F_End)
{
return OperType.F32;
}
- else if (Op.Inst > ShaderIrInst.I_Start &&
- Op.Inst < ShaderIrInst.I_End)
+ else if (op.Inst > ShaderIrInst.I_Start &&
+ op.Inst < ShaderIrInst.I_End)
{
return OperType.I32;
}
break;
}
- throw new ArgumentException(nameof(Node));
+ throw new ArgumentException(nameof(node));
}
- private static string GetBlockPosition(ShaderIrBlock Block)
+ private static string GetBlockPosition(ShaderIrBlock block)
{
- if (Block != null)
+ if (block != null)
{
- return "0x" + Block.Position.ToString("x8") + "u";
+ return "0x" + block.Position.ToString("x8") + "u";
}
else
{
diff --git a/Ryujinx.Graphics/Gal/Shader/GlslProgram.cs b/Ryujinx.Graphics/Gal/Shader/GlslProgram.cs
index a7af05ae..be8555d5 100644
--- a/Ryujinx.Graphics/Gal/Shader/GlslProgram.cs
+++ b/Ryujinx.Graphics/Gal/Shader/GlslProgram.cs
@@ -10,13 +10,13 @@ namespace Ryujinx.Graphics.Gal.Shader
public IEnumerable<ShaderDeclInfo> Uniforms { get; private set; }
public GlslProgram(
- string Code,
- IEnumerable<ShaderDeclInfo> Textures,
- IEnumerable<ShaderDeclInfo> Uniforms)
+ string code,
+ IEnumerable<ShaderDeclInfo> textures,
+ IEnumerable<ShaderDeclInfo> uniforms)
{
- this.Code = Code;
- this.Textures = Textures;
- this.Uniforms = Uniforms;
+ Code = code;
+ Textures = textures;
+ Uniforms = uniforms;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeAlu.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeAlu.cs
index 469092a2..f935be74 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeAlu.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeAlu.cs
@@ -14,1138 +14,1138 @@ namespace Ryujinx.Graphics.Gal.Shader
MergeH1
}
- public static void Bfe_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Bfe_C(ShaderIrBlock block, long opCode, int position)
{
- EmitBfe(Block, OpCode, ShaderOper.CR);
+ EmitBfe(block, opCode, ShaderOper.Cr);
}
- public static void Bfe_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Bfe_I(ShaderIrBlock block, long opCode, int position)
{
- EmitBfe(Block, OpCode, ShaderOper.Imm);
+ EmitBfe(block, opCode, ShaderOper.Imm);
}
- public static void Bfe_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Bfe_R(ShaderIrBlock block, long opCode, int position)
{
- EmitBfe(Block, OpCode, ShaderOper.RR);
+ EmitBfe(block, opCode, ShaderOper.Rr);
}
- public static void Fadd_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fadd_C(ShaderIrBlock block, long opCode, int position)
{
- EmitFadd(Block, OpCode, ShaderOper.CR);
+ EmitFadd(block, opCode, ShaderOper.Cr);
}
- public static void Fadd_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fadd_I(ShaderIrBlock block, long opCode, int position)
{
- EmitFadd(Block, OpCode, ShaderOper.Immf);
+ EmitFadd(block, opCode, ShaderOper.Immf);
}
- public static void Fadd_I32(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fadd_I32(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrNode OperA = OpCode.Gpr8();
- ShaderIrNode OperB = OpCode.Immf32_20();
+ ShaderIrNode operA = opCode.Gpr8();
+ ShaderIrNode operB = opCode.Immf32_20();
- bool NegB = OpCode.Read(53);
- bool AbsA = OpCode.Read(54);
- bool NegA = OpCode.Read(56);
- bool AbsB = OpCode.Read(57);
+ bool negB = opCode.Read(53);
+ bool absA = opCode.Read(54);
+ bool negA = opCode.Read(56);
+ bool absB = opCode.Read(57);
- OperA = GetAluFabsFneg(OperA, AbsA, NegA);
- OperB = GetAluFabsFneg(OperB, AbsB, NegB);
+ operA = GetAluFabsFneg(operA, absA, negA);
+ operB = GetAluFabsFneg(operB, absB, negB);
- ShaderIrOp Op = new ShaderIrOp(ShaderIrInst.Fadd, OperA, OperB);
+ ShaderIrOp op = new ShaderIrOp(ShaderIrInst.Fadd, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- public static void Fadd_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fadd_R(ShaderIrBlock block, long opCode, int position)
{
- EmitFadd(Block, OpCode, ShaderOper.RR);
+ EmitFadd(block, opCode, ShaderOper.Rr);
}
- public static void Ffma_CR(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Ffma_CR(ShaderIrBlock block, long opCode, int position)
{
- EmitFfma(Block, OpCode, ShaderOper.CR);
+ EmitFfma(block, opCode, ShaderOper.Cr);
}
- public static void Ffma_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Ffma_I(ShaderIrBlock block, long opCode, int position)
{
- EmitFfma(Block, OpCode, ShaderOper.Immf);
+ EmitFfma(block, opCode, ShaderOper.Immf);
}
- public static void Ffma_RC(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Ffma_RC(ShaderIrBlock block, long opCode, int position)
{
- EmitFfma(Block, OpCode, ShaderOper.RC);
+ EmitFfma(block, opCode, ShaderOper.Rc);
}
- public static void Ffma_RR(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Ffma_RR(ShaderIrBlock block, long opCode, int position)
{
- EmitFfma(Block, OpCode, ShaderOper.RR);
+ EmitFfma(block, opCode, ShaderOper.Rr);
}
- public static void Fmnmx_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fmnmx_C(ShaderIrBlock block, long opCode, int position)
{
- EmitFmnmx(Block, OpCode, ShaderOper.CR);
+ EmitFmnmx(block, opCode, ShaderOper.Cr);
}
- public static void Fmnmx_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fmnmx_I(ShaderIrBlock block, long opCode, int position)
{
- EmitFmnmx(Block, OpCode, ShaderOper.Immf);
+ EmitFmnmx(block, opCode, ShaderOper.Immf);
}
- public static void Fmnmx_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fmnmx_R(ShaderIrBlock block, long opCode, int position)
{
- EmitFmnmx(Block, OpCode, ShaderOper.RR);
+ EmitFmnmx(block, opCode, ShaderOper.Rr);
}
- public static void Fmul_I32(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fmul_I32(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrNode OperA = OpCode.Gpr8();
- ShaderIrNode OperB = OpCode.Immf32_20();
+ ShaderIrNode operA = opCode.Gpr8();
+ ShaderIrNode operB = opCode.Immf32_20();
- ShaderIrOp Op = new ShaderIrOp(ShaderIrInst.Fmul, OperA, OperB);
+ ShaderIrOp op = new ShaderIrOp(ShaderIrInst.Fmul, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- public static void Fmul_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fmul_C(ShaderIrBlock block, long opCode, int position)
{
- EmitFmul(Block, OpCode, ShaderOper.CR);
+ EmitFmul(block, opCode, ShaderOper.Cr);
}
- public static void Fmul_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fmul_I(ShaderIrBlock block, long opCode, int position)
{
- EmitFmul(Block, OpCode, ShaderOper.Immf);
+ EmitFmul(block, opCode, ShaderOper.Immf);
}
- public static void Fmul_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fmul_R(ShaderIrBlock block, long opCode, int position)
{
- EmitFmul(Block, OpCode, ShaderOper.RR);
+ EmitFmul(block, opCode, ShaderOper.Rr);
}
- public static void Fset_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fset_C(ShaderIrBlock block, long opCode, int position)
{
- EmitFset(Block, OpCode, ShaderOper.CR);
+ EmitFset(block, opCode, ShaderOper.Cr);
}
- public static void Fset_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fset_I(ShaderIrBlock block, long opCode, int position)
{
- EmitFset(Block, OpCode, ShaderOper.Immf);
+ EmitFset(block, opCode, ShaderOper.Immf);
}
- public static void Fset_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fset_R(ShaderIrBlock block, long opCode, int position)
{
- EmitFset(Block, OpCode, ShaderOper.RR);
+ EmitFset(block, opCode, ShaderOper.Rr);
}
- public static void Fsetp_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fsetp_C(ShaderIrBlock block, long opCode, int position)
{
- EmitFsetp(Block, OpCode, ShaderOper.CR);
+ EmitFsetp(block, opCode, ShaderOper.Cr);
}
- public static void Fsetp_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fsetp_I(ShaderIrBlock block, long opCode, int position)
{
- EmitFsetp(Block, OpCode, ShaderOper.Immf);
+ EmitFsetp(block, opCode, ShaderOper.Immf);
}
- public static void Fsetp_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Fsetp_R(ShaderIrBlock block, long opCode, int position)
{
- EmitFsetp(Block, OpCode, ShaderOper.RR);
+ EmitFsetp(block, opCode, ShaderOper.Rr);
}
- public static void Hadd2_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Hadd2_R(ShaderIrBlock block, long opCode, int position)
{
- EmitBinaryHalfOp(Block, OpCode, ShaderIrInst.Fadd);
+ EmitBinaryHalfOp(block, opCode, ShaderIrInst.Fadd);
}
- public static void Hmul2_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Hmul2_R(ShaderIrBlock block, long opCode, int position)
{
- EmitBinaryHalfOp(Block, OpCode, ShaderIrInst.Fmul);
+ EmitBinaryHalfOp(block, opCode, ShaderIrInst.Fmul);
}
- public static void Iadd_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iadd_C(ShaderIrBlock block, long opCode, int position)
{
- EmitIadd(Block, OpCode, ShaderOper.CR);
+ EmitIadd(block, opCode, ShaderOper.Cr);
}
- public static void Iadd_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iadd_I(ShaderIrBlock block, long opCode, int position)
{
- EmitIadd(Block, OpCode, ShaderOper.Imm);
+ EmitIadd(block, opCode, ShaderOper.Imm);
}
- public static void Iadd_I32(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iadd_I32(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrNode OperA = OpCode.Gpr8();
- ShaderIrNode OperB = OpCode.Imm32_20();
+ ShaderIrNode operA = opCode.Gpr8();
+ ShaderIrNode operB = opCode.Imm32_20();
- bool NegA = OpCode.Read(56);
+ bool negA = opCode.Read(56);
- OperA = GetAluIneg(OperA, NegA);
+ operA = GetAluIneg(operA, negA);
- ShaderIrOp Op = new ShaderIrOp(ShaderIrInst.Add, OperA, OperB);
+ ShaderIrOp op = new ShaderIrOp(ShaderIrInst.Add, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- public static void Iadd_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iadd_R(ShaderIrBlock block, long opCode, int position)
{
- EmitIadd(Block, OpCode, ShaderOper.RR);
+ EmitIadd(block, opCode, ShaderOper.Rr);
}
- public static void Iadd3_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iadd3_C(ShaderIrBlock block, long opCode, int position)
{
- EmitIadd3(Block, OpCode, ShaderOper.CR);
+ EmitIadd3(block, opCode, ShaderOper.Cr);
}
- public static void Iadd3_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iadd3_I(ShaderIrBlock block, long opCode, int position)
{
- EmitIadd3(Block, OpCode, ShaderOper.Imm);
+ EmitIadd3(block, opCode, ShaderOper.Imm);
}
- public static void Iadd3_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iadd3_R(ShaderIrBlock block, long opCode, int position)
{
- EmitIadd3(Block, OpCode, ShaderOper.RR);
+ EmitIadd3(block, opCode, ShaderOper.Rr);
}
- public static void Imnmx_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Imnmx_C(ShaderIrBlock block, long opCode, int position)
{
- EmitImnmx(Block, OpCode, ShaderOper.CR);
+ EmitImnmx(block, opCode, ShaderOper.Cr);
}
- public static void Imnmx_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Imnmx_I(ShaderIrBlock block, long opCode, int position)
{
- EmitImnmx(Block, OpCode, ShaderOper.Imm);
+ EmitImnmx(block, opCode, ShaderOper.Imm);
}
- public static void Imnmx_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Imnmx_R(ShaderIrBlock block, long opCode, int position)
{
- EmitImnmx(Block, OpCode, ShaderOper.RR);
+ EmitImnmx(block, opCode, ShaderOper.Rr);
}
- public static void Ipa(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Ipa(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrNode OperA = OpCode.Abuf28();
- ShaderIrNode OperB = OpCode.Gpr20();
+ ShaderIrNode operA = opCode.Abuf28();
+ ShaderIrNode operB = opCode.Gpr20();
- ShaderIpaMode Mode = (ShaderIpaMode)(OpCode.Read(54, 3));
+ ShaderIpaMode mode = (ShaderIpaMode)(opCode.Read(54, 3));
- ShaderIrMetaIpa Meta = new ShaderIrMetaIpa(Mode);
+ ShaderIrMetaIpa meta = new ShaderIrMetaIpa(mode);
- ShaderIrOp Op = new ShaderIrOp(ShaderIrInst.Ipa, OperA, OperB, null, Meta);
+ ShaderIrOp op = new ShaderIrOp(ShaderIrInst.Ipa, operA, operB, null, meta);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- public static void Iscadd_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iscadd_C(ShaderIrBlock block, long opCode, int position)
{
- EmitIscadd(Block, OpCode, ShaderOper.CR);
+ EmitIscadd(block, opCode, ShaderOper.Cr);
}
- public static void Iscadd_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iscadd_I(ShaderIrBlock block, long opCode, int position)
{
- EmitIscadd(Block, OpCode, ShaderOper.Imm);
+ EmitIscadd(block, opCode, ShaderOper.Imm);
}
- public static void Iscadd_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iscadd_R(ShaderIrBlock block, long opCode, int position)
{
- EmitIscadd(Block, OpCode, ShaderOper.RR);
+ EmitIscadd(block, opCode, ShaderOper.Rr);
}
- public static void Iset_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iset_C(ShaderIrBlock block, long opCode, int position)
{
- EmitIset(Block, OpCode, ShaderOper.CR);
+ EmitIset(block, opCode, ShaderOper.Cr);
}
- public static void Iset_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iset_I(ShaderIrBlock block, long opCode, int position)
{
- EmitIset(Block, OpCode, ShaderOper.Imm);
+ EmitIset(block, opCode, ShaderOper.Imm);
}
- public static void Iset_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Iset_R(ShaderIrBlock block, long opCode, int position)
{
- EmitIset(Block, OpCode, ShaderOper.RR);
+ EmitIset(block, opCode, ShaderOper.Rr);
}
- public static void Isetp_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Isetp_C(ShaderIrBlock block, long opCode, int position)
{
- EmitIsetp(Block, OpCode, ShaderOper.CR);
+ EmitIsetp(block, opCode, ShaderOper.Cr);
}
- public static void Isetp_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Isetp_I(ShaderIrBlock block, long opCode, int position)
{
- EmitIsetp(Block, OpCode, ShaderOper.Imm);
+ EmitIsetp(block, opCode, ShaderOper.Imm);
}
- public static void Isetp_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Isetp_R(ShaderIrBlock block, long opCode, int position)
{
- EmitIsetp(Block, OpCode, ShaderOper.RR);
+ EmitIsetp(block, opCode, ShaderOper.Rr);
}
- public static void Lop_I32(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Lop_I32(ShaderIrBlock block, long opCode, int position)
{
- int SubOp = OpCode.Read(53, 3);
+ int subOp = opCode.Read(53, 3);
- bool InvA = OpCode.Read(55);
- bool InvB = OpCode.Read(56);
+ bool invA = opCode.Read(55);
+ bool invB = opCode.Read(56);
- ShaderIrInst Inst = 0;
+ ShaderIrInst inst = 0;
- switch (SubOp)
+ switch (subOp)
{
- case 0: Inst = ShaderIrInst.And; break;
- case 1: Inst = ShaderIrInst.Or; break;
- case 2: Inst = ShaderIrInst.Xor; break;
+ case 0: inst = ShaderIrInst.And; break;
+ case 1: inst = ShaderIrInst.Or; break;
+ case 2: inst = ShaderIrInst.Xor; break;
}
- ShaderIrNode OperB = GetAluNot(OpCode.Imm32_20(), InvB);
+ ShaderIrNode operB = GetAluNot(opCode.Imm32_20(), invB);
//SubOp == 3 is pass, used by the not instruction
//which just moves the inverted register value.
- if (SubOp < 3)
+ if (subOp < 3)
{
- ShaderIrNode OperA = GetAluNot(OpCode.Gpr8(), InvA);
+ ShaderIrNode operA = GetAluNot(opCode.Gpr8(), invA);
- ShaderIrOp Op = new ShaderIrOp(Inst, OperA, OperB);
+ ShaderIrOp op = new ShaderIrOp(inst, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
else
{
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), OperB)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), operB)));
}
}
- public static void Lop_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Lop_C(ShaderIrBlock block, long opCode, int position)
{
- EmitLop(Block, OpCode, ShaderOper.CR);
+ EmitLop(block, opCode, ShaderOper.Cr);
}
- public static void Lop_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Lop_I(ShaderIrBlock block, long opCode, int position)
{
- EmitLop(Block, OpCode, ShaderOper.Imm);
+ EmitLop(block, opCode, ShaderOper.Imm);
}
- public static void Lop_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Lop_R(ShaderIrBlock block, long opCode, int position)
{
- EmitLop(Block, OpCode, ShaderOper.RR);
+ EmitLop(block, opCode, ShaderOper.Rr);
}
- public static void Mufu(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Mufu(ShaderIrBlock block, long opCode, int position)
{
- int SubOp = OpCode.Read(20, 0xf);
+ int subOp = opCode.Read(20, 0xf);
- bool AbsA = OpCode.Read(46);
- bool NegA = OpCode.Read(48);
+ bool absA = opCode.Read(46);
+ bool negA = opCode.Read(48);
- ShaderIrInst Inst = 0;
+ ShaderIrInst inst = 0;
- switch (SubOp)
+ switch (subOp)
{
- case 0: Inst = ShaderIrInst.Fcos; break;
- case 1: Inst = ShaderIrInst.Fsin; break;
- case 2: Inst = ShaderIrInst.Fex2; break;
- case 3: Inst = ShaderIrInst.Flg2; break;
- case 4: Inst = ShaderIrInst.Frcp; break;
- case 5: Inst = ShaderIrInst.Frsq; break;
- case 8: Inst = ShaderIrInst.Fsqrt; break;
-
- default: throw new NotImplementedException(SubOp.ToString());
+ case 0: inst = ShaderIrInst.Fcos; break;
+ case 1: inst = ShaderIrInst.Fsin; break;
+ case 2: inst = ShaderIrInst.Fex2; break;
+ case 3: inst = ShaderIrInst.Flg2; break;
+ case 4: inst = ShaderIrInst.Frcp; break;
+ case 5: inst = ShaderIrInst.Frsq; break;
+ case 8: inst = ShaderIrInst.Fsqrt; break;
+
+ default: throw new NotImplementedException(subOp.ToString());
}
- ShaderIrNode OperA = OpCode.Gpr8();
+ ShaderIrNode operA = opCode.Gpr8();
- ShaderIrOp Op = new ShaderIrOp(Inst, GetAluFabsFneg(OperA, AbsA, NegA));
+ ShaderIrOp op = new ShaderIrOp(inst, GetAluFabsFneg(operA, absA, negA));
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- public static void Psetp(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Psetp(ShaderIrBlock block, long opCode, int position)
{
- bool NegA = OpCode.Read(15);
- bool NegB = OpCode.Read(32);
- bool NegP = OpCode.Read(42);
+ bool negA = opCode.Read(15);
+ bool negB = opCode.Read(32);
+ bool negP = opCode.Read(42);
- ShaderIrInst LopInst = OpCode.BLop24();
+ ShaderIrInst lopInst = opCode.BLop24();
- ShaderIrNode OperA = OpCode.Pred12();
- ShaderIrNode OperB = OpCode.Pred29();
+ ShaderIrNode operA = opCode.Pred12();
+ ShaderIrNode operB = opCode.Pred29();
- if (NegA)
+ if (negA)
{
- OperA = new ShaderIrOp(ShaderIrInst.Bnot, OperA);
+ operA = new ShaderIrOp(ShaderIrInst.Bnot, operA);
}
- if (NegB)
+ if (negB)
{
- OperB = new ShaderIrOp(ShaderIrInst.Bnot, OperB);
+ operB = new ShaderIrOp(ShaderIrInst.Bnot, operB);
}
- ShaderIrOp Op = new ShaderIrOp(LopInst, OperA, OperB);
+ ShaderIrOp op = new ShaderIrOp(lopInst, operA, operB);
- ShaderIrOperPred P0Node = OpCode.Pred3();
- ShaderIrOperPred P1Node = OpCode.Pred0();
- ShaderIrOperPred P2Node = OpCode.Pred39();
+ ShaderIrOperPred p0Node = opCode.Pred3();
+ ShaderIrOperPred p1Node = opCode.Pred0();
+ ShaderIrOperPred p2Node = opCode.Pred39();
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(P0Node, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(p0Node, op)));
- LopInst = OpCode.BLop45();
+ lopInst = opCode.BLop45();
- if (LopInst == ShaderIrInst.Band && P1Node.IsConst && P2Node.IsConst)
+ if (lopInst == ShaderIrInst.Band && p1Node.IsConst && p2Node.IsConst)
{
return;
}
- ShaderIrNode P2NNode = P2Node;
+ ShaderIrNode p2NNode = p2Node;
- if (NegP)
+ if (negP)
{
- P2NNode = new ShaderIrOp(ShaderIrInst.Bnot, P2NNode);
+ p2NNode = new ShaderIrOp(ShaderIrInst.Bnot, p2NNode);
}
- Op = new ShaderIrOp(ShaderIrInst.Bnot, P0Node);
+ op = new ShaderIrOp(ShaderIrInst.Bnot, p0Node);
- Op = new ShaderIrOp(LopInst, Op, P2NNode);
+ op = new ShaderIrOp(lopInst, op, p2NNode);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(P1Node, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(p1Node, op)));
- Op = new ShaderIrOp(LopInst, P0Node, P2NNode);
+ op = new ShaderIrOp(lopInst, p0Node, p2NNode);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(P0Node, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(p0Node, op)));
}
- public static void Rro_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Rro_C(ShaderIrBlock block, long opCode, int position)
{
- EmitRro(Block, OpCode, ShaderOper.CR);
+ EmitRro(block, opCode, ShaderOper.Cr);
}
- public static void Rro_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Rro_I(ShaderIrBlock block, long opCode, int position)
{
- EmitRro(Block, OpCode, ShaderOper.Immf);
+ EmitRro(block, opCode, ShaderOper.Immf);
}
- public static void Rro_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Rro_R(ShaderIrBlock block, long opCode, int position)
{
- EmitRro(Block, OpCode, ShaderOper.RR);
+ EmitRro(block, opCode, ShaderOper.Rr);
}
- public static void Shl_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Shl_C(ShaderIrBlock block, long opCode, int position)
{
- EmitAluBinary(Block, OpCode, ShaderOper.CR, ShaderIrInst.Lsl);
+ EmitAluBinary(block, opCode, ShaderOper.Cr, ShaderIrInst.Lsl);
}
- public static void Shl_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Shl_I(ShaderIrBlock block, long opCode, int position)
{
- EmitAluBinary(Block, OpCode, ShaderOper.Imm, ShaderIrInst.Lsl);
+ EmitAluBinary(block, opCode, ShaderOper.Imm, ShaderIrInst.Lsl);
}
- public static void Shl_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Shl_R(ShaderIrBlock block, long opCode, int position)
{
- EmitAluBinary(Block, OpCode, ShaderOper.RR, ShaderIrInst.Lsl);
+ EmitAluBinary(block, opCode, ShaderOper.Rr, ShaderIrInst.Lsl);
}
- public static void Shr_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Shr_C(ShaderIrBlock block, long opCode, int position)
{
- EmitAluBinary(Block, OpCode, ShaderOper.CR, GetShrInst(OpCode));
+ EmitAluBinary(block, opCode, ShaderOper.Cr, GetShrInst(opCode));
}
- public static void Shr_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Shr_I(ShaderIrBlock block, long opCode, int position)
{
- EmitAluBinary(Block, OpCode, ShaderOper.Imm, GetShrInst(OpCode));
+ EmitAluBinary(block, opCode, ShaderOper.Imm, GetShrInst(opCode));
}
- public static void Shr_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Shr_R(ShaderIrBlock block, long opCode, int position)
{
- EmitAluBinary(Block, OpCode, ShaderOper.RR, GetShrInst(OpCode));
+ EmitAluBinary(block, opCode, ShaderOper.Rr, GetShrInst(opCode));
}
- private static ShaderIrInst GetShrInst(long OpCode)
+ private static ShaderIrInst GetShrInst(long opCode)
{
- bool Signed = OpCode.Read(48);
+ bool signed = opCode.Read(48);
- return Signed ? ShaderIrInst.Asr : ShaderIrInst.Lsr;
+ return signed ? ShaderIrInst.Asr : ShaderIrInst.Lsr;
}
- public static void Vmad(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Vmad(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrNode OperA = OpCode.Gpr8();
+ ShaderIrNode operA = opCode.Gpr8();
- ShaderIrNode OperB;
+ ShaderIrNode operB;
- if (OpCode.Read(50))
+ if (opCode.Read(50))
{
- OperB = OpCode.Gpr20();
+ operB = opCode.Gpr20();
}
else
{
- OperB = OpCode.Imm19_20();
+ operB = opCode.Imm19_20();
}
- ShaderIrOperGpr OperC = OpCode.Gpr39();
+ ShaderIrOperGpr operC = opCode.Gpr39();
- ShaderIrNode Tmp = new ShaderIrOp(ShaderIrInst.Mul, OperA, OperB);
+ ShaderIrNode tmp = new ShaderIrOp(ShaderIrInst.Mul, operA, operB);
- ShaderIrNode Final = new ShaderIrOp(ShaderIrInst.Add, Tmp, OperC);
+ ShaderIrNode final = new ShaderIrOp(ShaderIrInst.Add, tmp, operC);
- int Shr = OpCode.Read(51, 3);
+ int shr = opCode.Read(51, 3);
- if (Shr != 0)
+ if (shr != 0)
{
- int Shift = (Shr == 2) ? 15 : 7;
+ int shift = (shr == 2) ? 15 : 7;
- Final = new ShaderIrOp(ShaderIrInst.Lsr, Final, new ShaderIrOperImm(Shift));
+ final = new ShaderIrOp(ShaderIrInst.Lsr, final, new ShaderIrOperImm(shift));
}
- Block.AddNode(new ShaderIrCmnt("Stubbed. Instruction is reduced to a * b + c"));
+ block.AddNode(new ShaderIrCmnt("Stubbed. Instruction is reduced to a * b + c"));
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Final)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), final)));
}
- public static void Xmad_CR(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Xmad_CR(ShaderIrBlock block, long opCode, int position)
{
- EmitXmad(Block, OpCode, ShaderOper.CR);
+ EmitXmad(block, opCode, ShaderOper.Cr);
}
- public static void Xmad_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Xmad_I(ShaderIrBlock block, long opCode, int position)
{
- EmitXmad(Block, OpCode, ShaderOper.Imm);
+ EmitXmad(block, opCode, ShaderOper.Imm);
}
- public static void Xmad_RC(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Xmad_RC(ShaderIrBlock block, long opCode, int position)
{
- EmitXmad(Block, OpCode, ShaderOper.RC);
+ EmitXmad(block, opCode, ShaderOper.Rc);
}
- public static void Xmad_RR(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Xmad_RR(ShaderIrBlock block, long opCode, int position)
{
- EmitXmad(Block, OpCode, ShaderOper.RR);
+ EmitXmad(block, opCode, ShaderOper.Rr);
}
private static void EmitAluBinary(
- ShaderIrBlock Block,
- long OpCode,
- ShaderOper Oper,
- ShaderIrInst Inst)
+ ShaderIrBlock block,
+ long opCode,
+ ShaderOper oper,
+ ShaderIrInst inst)
{
- ShaderIrNode OperA = OpCode.Gpr8(), OperB;
+ ShaderIrNode operA = opCode.Gpr8(), operB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- ShaderIrNode Op = new ShaderIrOp(Inst, OperA, OperB);
+ ShaderIrNode op = new ShaderIrOp(inst, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- private static void EmitBfe(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitBfe(ShaderIrBlock block, long opCode, ShaderOper oper)
{
//TODO: Handle the case where position + length
//is greater than the word size, in this case the sign bit
//needs to be replicated to fill the remaining space.
- bool NegB = OpCode.Read(48);
- bool NegA = OpCode.Read(49);
+ bool negB = opCode.Read(48);
+ bool negA = opCode.Read(49);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB;
+ ShaderIrNode operA = opCode.Gpr8(), operB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- ShaderIrNode Op;
+ ShaderIrNode op;
- bool Signed = OpCode.Read(48); //?
+ bool signed = opCode.Read(48); //?
- if (OperB is ShaderIrOperImm PosLen)
+ if (operB is ShaderIrOperImm posLen)
{
- int Position = (PosLen.Value >> 0) & 0xff;
- int Length = (PosLen.Value >> 8) & 0xff;
+ int position = (posLen.Value >> 0) & 0xff;
+ int length = (posLen.Value >> 8) & 0xff;
- int LSh = 32 - (Position + Length);
+ int lSh = 32 - (position + length);
- ShaderIrInst RightShift = Signed
+ ShaderIrInst rightShift = signed
? ShaderIrInst.Asr
: ShaderIrInst.Lsr;
- Op = new ShaderIrOp(ShaderIrInst.Lsl, OperA, new ShaderIrOperImm(LSh));
- Op = new ShaderIrOp(RightShift, Op, new ShaderIrOperImm(LSh + Position));
+ op = new ShaderIrOp(ShaderIrInst.Lsl, operA, new ShaderIrOperImm(lSh));
+ op = new ShaderIrOp(rightShift, op, new ShaderIrOperImm(lSh + position));
}
else
{
- ShaderIrOperImm Shift = new ShaderIrOperImm(8);
- ShaderIrOperImm Mask = new ShaderIrOperImm(0xff);
+ ShaderIrOperImm shift = new ShaderIrOperImm(8);
+ ShaderIrOperImm mask = new ShaderIrOperImm(0xff);
- ShaderIrNode OpPos, OpLen;
+ ShaderIrNode opPos, opLen;
- OpPos = new ShaderIrOp(ShaderIrInst.And, OperB, Mask);
- OpLen = new ShaderIrOp(ShaderIrInst.Lsr, OperB, Shift);
- OpLen = new ShaderIrOp(ShaderIrInst.And, OpLen, Mask);
+ opPos = new ShaderIrOp(ShaderIrInst.And, operB, mask);
+ opLen = new ShaderIrOp(ShaderIrInst.Lsr, operB, shift);
+ opLen = new ShaderIrOp(ShaderIrInst.And, opLen, mask);
- Op = new ShaderIrOp(ShaderIrInst.Lsr, OperA, OpPos);
+ op = new ShaderIrOp(ShaderIrInst.Lsr, operA, opPos);
- Op = ExtendTo32(Op, Signed, OpLen);
+ op = ExtendTo32(op, signed, opLen);
}
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- private static void EmitFadd(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitFadd(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- bool NegB = OpCode.Read(45);
- bool AbsA = OpCode.Read(46);
- bool NegA = OpCode.Read(48);
- bool AbsB = OpCode.Read(49);
- bool Sat = OpCode.Read(50);
+ bool negB = opCode.Read(45);
+ bool absA = opCode.Read(46);
+ bool negA = opCode.Read(48);
+ bool absB = opCode.Read(49);
+ bool sat = opCode.Read(50);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB;
+ ShaderIrNode operA = opCode.Gpr8(), operB;
- OperA = GetAluFabsFneg(OperA, AbsA, NegA);
+ operA = GetAluFabsFneg(operA, absA, negA);
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Immf: OperB = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Immf: operB = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperB = GetAluFabsFneg(OperB, AbsB, NegB);
+ operB = GetAluFabsFneg(operB, absB, negB);
- ShaderIrNode Op = new ShaderIrOp(ShaderIrInst.Fadd, OperA, OperB);
+ ShaderIrNode op = new ShaderIrOp(ShaderIrInst.Fadd, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), GetAluFsat(Op, Sat))));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), GetAluFsat(op, sat))));
}
- private static void EmitFmul(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitFmul(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- bool NegB = OpCode.Read(48);
- bool Sat = OpCode.Read(50);
+ bool negB = opCode.Read(48);
+ bool sat = opCode.Read(50);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB;
+ ShaderIrNode operA = opCode.Gpr8(), operB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Immf: OperB = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Immf: operB = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperB = GetAluFneg(OperB, NegB);
+ operB = GetAluFneg(operB, negB);
- ShaderIrNode Op = new ShaderIrOp(ShaderIrInst.Fmul, OperA, OperB);
+ ShaderIrNode op = new ShaderIrOp(ShaderIrInst.Fmul, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), GetAluFsat(Op, Sat))));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), GetAluFsat(op, sat))));
}
- private static void EmitFfma(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitFfma(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- bool NegB = OpCode.Read(48);
- bool NegC = OpCode.Read(49);
- bool Sat = OpCode.Read(50);
+ bool negB = opCode.Read(48);
+ bool negC = opCode.Read(49);
+ bool sat = opCode.Read(50);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB, OperC;
+ ShaderIrNode operA = opCode.Gpr8(), operB, operC;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Immf: OperB = OpCode.Immf19_20(); break;
- case ShaderOper.RC: OperB = OpCode.Gpr39(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Immf: operB = opCode.Immf19_20(); break;
+ case ShaderOper.Rc: operB = opCode.Gpr39(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperB = GetAluFneg(OperB, NegB);
+ operB = GetAluFneg(operB, negB);
- if (Oper == ShaderOper.RC)
+ if (oper == ShaderOper.Rc)
{
- OperC = GetAluFneg(OpCode.Cbuf34(), NegC);
+ operC = GetAluFneg(opCode.Cbuf34(), negC);
}
else
{
- OperC = GetAluFneg(OpCode.Gpr39(), NegC);
+ operC = GetAluFneg(opCode.Gpr39(), negC);
}
- ShaderIrOp Op = new ShaderIrOp(ShaderIrInst.Ffma, OperA, OperB, OperC);
+ ShaderIrOp op = new ShaderIrOp(ShaderIrInst.Ffma, operA, operB, operC);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), GetAluFsat(Op, Sat))));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), GetAluFsat(op, sat))));
}
- private static void EmitIadd(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitIadd(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- ShaderIrNode OperA = OpCode.Gpr8();
- ShaderIrNode OperB;
+ ShaderIrNode operA = opCode.Gpr8();
+ ShaderIrNode operB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- bool NegA = OpCode.Read(49);
- bool NegB = OpCode.Read(48);
+ bool negA = opCode.Read(49);
+ bool negB = opCode.Read(48);
- OperA = GetAluIneg(OperA, NegA);
- OperB = GetAluIneg(OperB, NegB);
+ operA = GetAluIneg(operA, negA);
+ operB = GetAluIneg(operB, negB);
- ShaderIrOp Op = new ShaderIrOp(ShaderIrInst.Add, OperA, OperB);
+ ShaderIrOp op = new ShaderIrOp(ShaderIrInst.Add, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- private static void EmitIadd3(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitIadd3(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- int Mode = OpCode.Read(37, 3);
+ int mode = opCode.Read(37, 3);
- bool Neg1 = OpCode.Read(51);
- bool Neg2 = OpCode.Read(50);
- bool Neg3 = OpCode.Read(49);
+ bool neg1 = opCode.Read(51);
+ bool neg2 = opCode.Read(50);
+ bool neg3 = opCode.Read(49);
- int Height1 = OpCode.Read(35, 3);
- int Height2 = OpCode.Read(33, 3);
- int Height3 = OpCode.Read(31, 3);
+ int height1 = opCode.Read(35, 3);
+ int height2 = opCode.Read(33, 3);
+ int height3 = opCode.Read(31, 3);
- ShaderIrNode OperB;
+ ShaderIrNode operB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- ShaderIrNode ApplyHeight(ShaderIrNode Src, int Height)
+ ShaderIrNode ApplyHeight(ShaderIrNode src, int height)
{
- if (Oper != ShaderOper.RR)
+ if (oper != ShaderOper.Rr)
{
- return Src;
+ return src;
}
- switch (Height)
+ switch (height)
{
- case 0: return Src;
- case 1: return new ShaderIrOp(ShaderIrInst.And, Src, new ShaderIrOperImm(0xffff));
- case 2: return new ShaderIrOp(ShaderIrInst.Lsr, Src, new ShaderIrOperImm(16));
+ case 0: return src;
+ case 1: return new ShaderIrOp(ShaderIrInst.And, src, new ShaderIrOperImm(0xffff));
+ case 2: return new ShaderIrOp(ShaderIrInst.Lsr, src, new ShaderIrOperImm(16));
default: throw new InvalidOperationException();
}
}
- ShaderIrNode Src1 = GetAluIneg(ApplyHeight(OpCode.Gpr8(), Height1), Neg1);
- ShaderIrNode Src2 = GetAluIneg(ApplyHeight(OperB, Height2), Neg2);
- ShaderIrNode Src3 = GetAluIneg(ApplyHeight(OpCode.Gpr39(), Height3), Neg3);
+ ShaderIrNode src1 = GetAluIneg(ApplyHeight(opCode.Gpr8(), height1), neg1);
+ ShaderIrNode src2 = GetAluIneg(ApplyHeight(operB, height2), neg2);
+ ShaderIrNode src3 = GetAluIneg(ApplyHeight(opCode.Gpr39(), height3), neg3);
- ShaderIrOp Sum = new ShaderIrOp(ShaderIrInst.Add, Src1, Src2);
+ ShaderIrOp sum = new ShaderIrOp(ShaderIrInst.Add, src1, src2);
- if (Oper == ShaderOper.RR)
+ if (oper == ShaderOper.Rr)
{
- switch (Mode)
+ switch (mode)
{
- case 1: Sum = new ShaderIrOp(ShaderIrInst.Lsr, Sum, new ShaderIrOperImm(16)); break;
- case 2: Sum = new ShaderIrOp(ShaderIrInst.Lsl, Sum, new ShaderIrOperImm(16)); break;
+ case 1: sum = new ShaderIrOp(ShaderIrInst.Lsr, sum, new ShaderIrOperImm(16)); break;
+ case 2: sum = new ShaderIrOp(ShaderIrInst.Lsl, sum, new ShaderIrOperImm(16)); break;
}
}
//Note: Here there should be a "+ 1" when carry flag is set
//but since carry is mostly ignored by other instructions, it's excluded for now
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), new ShaderIrOp(ShaderIrInst.Add, Sum, Src3))));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), new ShaderIrOp(ShaderIrInst.Add, sum, src3))));
}
- private static void EmitIscadd(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitIscadd(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- bool NegB = OpCode.Read(48);
- bool NegA = OpCode.Read(49);
+ bool negB = opCode.Read(48);
+ bool negA = opCode.Read(49);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB;
+ ShaderIrNode operA = opCode.Gpr8(), operB;
- ShaderIrOperImm Scale = OpCode.Imm5_39();
+ ShaderIrOperImm scale = opCode.Imm5_39();
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperA = GetAluIneg(OperA, NegA);
- OperB = GetAluIneg(OperB, NegB);
+ operA = GetAluIneg(operA, negA);
+ operB = GetAluIneg(operB, negB);
- ShaderIrOp ScaleOp = new ShaderIrOp(ShaderIrInst.Lsl, OperA, Scale);
- ShaderIrOp AddOp = new ShaderIrOp(ShaderIrInst.Add, OperB, ScaleOp);
+ ShaderIrOp scaleOp = new ShaderIrOp(ShaderIrInst.Lsl, operA, scale);
+ ShaderIrOp addOp = new ShaderIrOp(ShaderIrInst.Add, operB, scaleOp);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), AddOp)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), addOp)));
}
- private static void EmitFmnmx(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitFmnmx(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- EmitMnmx(Block, OpCode, true, Oper);
+ EmitMnmx(block, opCode, true, oper);
}
- private static void EmitImnmx(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitImnmx(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- EmitMnmx(Block, OpCode, false, Oper);
+ EmitMnmx(block, opCode, false, oper);
}
- private static void EmitMnmx(ShaderIrBlock Block, long OpCode, bool IsFloat, ShaderOper Oper)
+ private static void EmitMnmx(ShaderIrBlock block, long opCode, bool isFloat, ShaderOper oper)
{
- bool NegB = OpCode.Read(45);
- bool AbsA = OpCode.Read(46);
- bool NegA = OpCode.Read(48);
- bool AbsB = OpCode.Read(49);
+ bool negB = opCode.Read(45);
+ bool absA = opCode.Read(46);
+ bool negA = opCode.Read(48);
+ bool absB = opCode.Read(49);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB;
+ ShaderIrNode operA = opCode.Gpr8(), operB;
- if (IsFloat)
+ if (isFloat)
{
- OperA = GetAluFabsFneg(OperA, AbsA, NegA);
+ operA = GetAluFabsFneg(operA, absA, negA);
}
else
{
- OperA = GetAluIabsIneg(OperA, AbsA, NegA);
+ operA = GetAluIabsIneg(operA, absA, negA);
}
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.Immf: OperB = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Immf: operB = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- if (IsFloat)
+ if (isFloat)
{
- OperB = GetAluFabsFneg(OperB, AbsB, NegB);
+ operB = GetAluFabsFneg(operB, absB, negB);
}
else
{
- OperB = GetAluIabsIneg(OperB, AbsB, NegB);
+ operB = GetAluIabsIneg(operB, absB, negB);
}
- ShaderIrOperPred Pred = OpCode.Pred39();
+ ShaderIrOperPred pred = opCode.Pred39();
- ShaderIrOp Op;
+ ShaderIrOp op;
- ShaderIrInst MaxInst = IsFloat ? ShaderIrInst.Fmax : ShaderIrInst.Max;
- ShaderIrInst MinInst = IsFloat ? ShaderIrInst.Fmin : ShaderIrInst.Min;
+ ShaderIrInst maxInst = isFloat ? ShaderIrInst.Fmax : ShaderIrInst.Max;
+ ShaderIrInst minInst = isFloat ? ShaderIrInst.Fmin : ShaderIrInst.Min;
- if (Pred.IsConst)
+ if (pred.IsConst)
{
- bool IsMax = OpCode.Read(42);
+ bool isMax = opCode.Read(42);
- Op = new ShaderIrOp(IsMax
- ? MaxInst
- : MinInst, OperA, OperB);
+ op = new ShaderIrOp(isMax
+ ? maxInst
+ : minInst, operA, operB);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
else
{
- ShaderIrNode PredN = OpCode.Pred39N();
+ ShaderIrNode predN = opCode.Pred39N();
- ShaderIrOp OpMax = new ShaderIrOp(MaxInst, OperA, OperB);
- ShaderIrOp OpMin = new ShaderIrOp(MinInst, OperA, OperB);
+ ShaderIrOp opMax = new ShaderIrOp(maxInst, operA, operB);
+ ShaderIrOp opMin = new ShaderIrOp(minInst, operA, operB);
- ShaderIrAsg AsgMax = new ShaderIrAsg(OpCode.Gpr0(), OpMax);
- ShaderIrAsg AsgMin = new ShaderIrAsg(OpCode.Gpr0(), OpMin);
+ ShaderIrAsg asgMax = new ShaderIrAsg(opCode.Gpr0(), opMax);
+ ShaderIrAsg asgMin = new ShaderIrAsg(opCode.Gpr0(), opMin);
- Block.AddNode(OpCode.PredNode(new ShaderIrCond(PredN, AsgMax, Not: true)));
- Block.AddNode(OpCode.PredNode(new ShaderIrCond(PredN, AsgMin, Not: false)));
+ block.AddNode(opCode.PredNode(new ShaderIrCond(predN, asgMax, not: true)));
+ block.AddNode(opCode.PredNode(new ShaderIrCond(predN, asgMin, not: false)));
}
}
- private static void EmitRro(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitRro(ShaderIrBlock block, long opCode, ShaderOper oper)
{
//Note: this is a range reduction instruction and is supposed to
//be used with Mufu, here it just moves the value and ignores the operation.
- bool NegA = OpCode.Read(45);
- bool AbsA = OpCode.Read(49);
+ bool negA = opCode.Read(45);
+ bool absA = opCode.Read(49);
- ShaderIrNode OperA;
+ ShaderIrNode operA;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperA = OpCode.Cbuf34(); break;
- case ShaderOper.Immf: OperA = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperA = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operA = opCode.Cbuf34(); break;
+ case ShaderOper.Immf: operA = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operA = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperA = GetAluFabsFneg(OperA, AbsA, NegA);
+ operA = GetAluFabsFneg(operA, absA, negA);
- Block.AddNode(new ShaderIrCmnt("Stubbed."));
+ block.AddNode(new ShaderIrCmnt("Stubbed."));
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), OperA)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), operA)));
}
- private static void EmitFset(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitFset(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- EmitSet(Block, OpCode, true, Oper);
+ EmitSet(block, opCode, true, oper);
}
- private static void EmitIset(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitIset(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- EmitSet(Block, OpCode, false, Oper);
+ EmitSet(block, opCode, false, oper);
}
- private static void EmitSet(ShaderIrBlock Block, long OpCode, bool IsFloat, ShaderOper Oper)
+ private static void EmitSet(ShaderIrBlock block, long opCode, bool isFloat, ShaderOper oper)
{
- bool NegA = OpCode.Read(43);
- bool AbsB = OpCode.Read(44);
- bool NegB = OpCode.Read(53);
- bool AbsA = OpCode.Read(54);
+ bool negA = opCode.Read(43);
+ bool absB = opCode.Read(44);
+ bool negB = opCode.Read(53);
+ bool absA = opCode.Read(54);
- bool BoolFloat = OpCode.Read(IsFloat ? 52 : 44);
+ bool boolFloat = opCode.Read(isFloat ? 52 : 44);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB;
+ ShaderIrNode operA = opCode.Gpr8(), operB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.Immf: OperB = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Immf: operB = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- ShaderIrInst CmpInst;
+ ShaderIrInst cmpInst;
- if (IsFloat)
+ if (isFloat)
{
- OperA = GetAluFabsFneg(OperA, AbsA, NegA);
- OperB = GetAluFabsFneg(OperB, AbsB, NegB);
+ operA = GetAluFabsFneg(operA, absA, negA);
+ operB = GetAluFabsFneg(operB, absB, negB);
- CmpInst = OpCode.CmpF();
+ cmpInst = opCode.CmpF();
}
else
{
- CmpInst = OpCode.Cmp();
+ cmpInst = opCode.Cmp();
}
- ShaderIrOp Op = new ShaderIrOp(CmpInst, OperA, OperB);
+ ShaderIrOp op = new ShaderIrOp(cmpInst, operA, operB);
- ShaderIrInst LopInst = OpCode.BLop45();
+ ShaderIrInst lopInst = opCode.BLop45();
- ShaderIrOperPred PNode = OpCode.Pred39();
+ ShaderIrOperPred pNode = opCode.Pred39();
- ShaderIrNode Imm0, Imm1;
+ ShaderIrNode imm0, imm1;
- if (BoolFloat)
+ if (boolFloat)
{
- Imm0 = new ShaderIrOperImmf(0);
- Imm1 = new ShaderIrOperImmf(1);
+ imm0 = new ShaderIrOperImmf(0);
+ imm1 = new ShaderIrOperImmf(1);
}
else
{
- Imm0 = new ShaderIrOperImm(0);
- Imm1 = new ShaderIrOperImm(-1);
+ imm0 = new ShaderIrOperImm(0);
+ imm1 = new ShaderIrOperImm(-1);
}
- ShaderIrNode Asg0 = new ShaderIrAsg(OpCode.Gpr0(), Imm0);
- ShaderIrNode Asg1 = new ShaderIrAsg(OpCode.Gpr0(), Imm1);
+ ShaderIrNode asg0 = new ShaderIrAsg(opCode.Gpr0(), imm0);
+ ShaderIrNode asg1 = new ShaderIrAsg(opCode.Gpr0(), imm1);
- if (LopInst != ShaderIrInst.Band || !PNode.IsConst)
+ if (lopInst != ShaderIrInst.Band || !pNode.IsConst)
{
- ShaderIrOp Op2 = new ShaderIrOp(LopInst, Op, PNode);
+ ShaderIrOp op2 = new ShaderIrOp(lopInst, op, pNode);
- Asg0 = new ShaderIrCond(Op2, Asg0, Not: true);
- Asg1 = new ShaderIrCond(Op2, Asg1, Not: false);
+ asg0 = new ShaderIrCond(op2, asg0, not: true);
+ asg1 = new ShaderIrCond(op2, asg1, not: false);
}
else
{
- Asg0 = new ShaderIrCond(Op, Asg0, Not: true);
- Asg1 = new ShaderIrCond(Op, Asg1, Not: false);
+ asg0 = new ShaderIrCond(op, asg0, not: true);
+ asg1 = new ShaderIrCond(op, asg1, not: false);
}
- Block.AddNode(OpCode.PredNode(Asg0));
- Block.AddNode(OpCode.PredNode(Asg1));
+ block.AddNode(opCode.PredNode(asg0));
+ block.AddNode(opCode.PredNode(asg1));
}
- private static void EmitFsetp(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitFsetp(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- EmitSetp(Block, OpCode, true, Oper);
+ EmitSetp(block, opCode, true, oper);
}
- private static void EmitIsetp(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitIsetp(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- EmitSetp(Block, OpCode, false, Oper);
+ EmitSetp(block, opCode, false, oper);
}
- private static void EmitSetp(ShaderIrBlock Block, long OpCode, bool IsFloat, ShaderOper Oper)
+ private static void EmitSetp(ShaderIrBlock block, long opCode, bool isFloat, ShaderOper oper)
{
- bool AbsA = OpCode.Read(7);
- bool NegP = OpCode.Read(42);
- bool NegA = OpCode.Read(43);
- bool AbsB = OpCode.Read(44);
+ bool absA = opCode.Read(7);
+ bool negP = opCode.Read(42);
+ bool negA = opCode.Read(43);
+ bool absB = opCode.Read(44);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB;
+ ShaderIrNode operA = opCode.Gpr8(), operB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.Immf: OperB = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Immf: operB = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- ShaderIrInst CmpInst;
+ ShaderIrInst cmpInst;
- if (IsFloat)
+ if (isFloat)
{
- OperA = GetAluFabsFneg(OperA, AbsA, NegA);
- OperB = GetAluFabs (OperB, AbsB);
+ operA = GetAluFabsFneg(operA, absA, negA);
+ operB = GetAluFabs (operB, absB);
- CmpInst = OpCode.CmpF();
+ cmpInst = opCode.CmpF();
}
else
{
- CmpInst = OpCode.Cmp();
+ cmpInst = opCode.Cmp();
}
- ShaderIrOp Op = new ShaderIrOp(CmpInst, OperA, OperB);
+ ShaderIrOp op = new ShaderIrOp(cmpInst, operA, operB);
- ShaderIrOperPred P0Node = OpCode.Pred3();
- ShaderIrOperPred P1Node = OpCode.Pred0();
- ShaderIrOperPred P2Node = OpCode.Pred39();
+ ShaderIrOperPred p0Node = opCode.Pred3();
+ ShaderIrOperPred p1Node = opCode.Pred0();
+ ShaderIrOperPred p2Node = opCode.Pred39();
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(P0Node, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(p0Node, op)));
- ShaderIrInst LopInst = OpCode.BLop45();
+ ShaderIrInst lopInst = opCode.BLop45();
- if (LopInst == ShaderIrInst.Band && P1Node.IsConst && P2Node.IsConst)
+ if (lopInst == ShaderIrInst.Band && p1Node.IsConst && p2Node.IsConst)
{
return;
}
- ShaderIrNode P2NNode = P2Node;
+ ShaderIrNode p2NNode = p2Node;
- if (NegP)
+ if (negP)
{
- P2NNode = new ShaderIrOp(ShaderIrInst.Bnot, P2NNode);
+ p2NNode = new ShaderIrOp(ShaderIrInst.Bnot, p2NNode);
}
- Op = new ShaderIrOp(ShaderIrInst.Bnot, P0Node);
+ op = new ShaderIrOp(ShaderIrInst.Bnot, p0Node);
- Op = new ShaderIrOp(LopInst, Op, P2NNode);
+ op = new ShaderIrOp(lopInst, op, p2NNode);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(P1Node, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(p1Node, op)));
- Op = new ShaderIrOp(LopInst, P0Node, P2NNode);
+ op = new ShaderIrOp(lopInst, p0Node, p2NNode);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(P0Node, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(p0Node, op)));
}
- private static void EmitBinaryHalfOp(ShaderIrBlock Block, long OpCode, ShaderIrInst Inst)
+ private static void EmitBinaryHalfOp(ShaderIrBlock block, long opCode, ShaderIrInst inst)
{
- bool AbsB = OpCode.Read(30);
- bool NegB = OpCode.Read(31);
- bool Sat = OpCode.Read(32);
- bool AbsA = OpCode.Read(44);
+ bool absB = opCode.Read(30);
+ bool negB = opCode.Read(31);
+ bool sat = opCode.Read(32);
+ bool absA = opCode.Read(44);
- ShaderIrOperGpr[] VecA = OpCode.GprHalfVec8();
- ShaderIrOperGpr[] VecB = OpCode.GprHalfVec20();
+ ShaderIrOperGpr[] vecA = opCode.GprHalfVec8();
+ ShaderIrOperGpr[] vecB = opCode.GprHalfVec20();
- HalfOutputType OutputType = (HalfOutputType)OpCode.Read(49, 3);
+ HalfOutputType outputType = (HalfOutputType)opCode.Read(49, 3);
- int Elems = OutputType == HalfOutputType.PackedFp16 ? 2 : 1;
- int First = OutputType == HalfOutputType.MergeH1 ? 1 : 0;
+ int elems = outputType == HalfOutputType.PackedFp16 ? 2 : 1;
+ int first = outputType == HalfOutputType.MergeH1 ? 1 : 0;
- for (int Index = First; Index < Elems; Index++)
+ for (int index = first; index < elems; index++)
{
- ShaderIrNode OperA = GetAluFabs (VecA[Index], AbsA);
- ShaderIrNode OperB = GetAluFabsFneg(VecB[Index], AbsB, NegB);
+ ShaderIrNode operA = GetAluFabs (vecA[index], absA);
+ ShaderIrNode operB = GetAluFabsFneg(vecB[index], absB, negB);
- ShaderIrNode Op = new ShaderIrOp(Inst, OperA, OperB);
+ ShaderIrNode op = new ShaderIrOp(inst, operA, operB);
- ShaderIrOperGpr Dst = GetHalfDst(OpCode, OutputType, Index);
+ ShaderIrOperGpr dst = GetHalfDst(opCode, outputType, index);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(Dst, GetAluFsat(Op, Sat))));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(dst, GetAluFsat(op, sat))));
}
}
- private static ShaderIrOperGpr GetHalfDst(long OpCode, HalfOutputType OutputType, int Index)
+ private static ShaderIrOperGpr GetHalfDst(long opCode, HalfOutputType outputType, int index)
{
- switch (OutputType)
+ switch (outputType)
{
- case HalfOutputType.PackedFp16: return OpCode.GprHalf0(Index);
- case HalfOutputType.Fp32: return OpCode.Gpr0();
- case HalfOutputType.MergeH0: return OpCode.GprHalf0(0);
- case HalfOutputType.MergeH1: return OpCode.GprHalf0(1);
+ case HalfOutputType.PackedFp16: return opCode.GprHalf0(index);
+ case HalfOutputType.Fp32: return opCode.Gpr0();
+ case HalfOutputType.MergeH0: return opCode.GprHalf0(0);
+ case HalfOutputType.MergeH1: return opCode.GprHalf0(1);
}
- throw new ArgumentException(nameof(OutputType));
+ throw new ArgumentException(nameof(outputType));
}
- private static void EmitLop(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitLop(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- int SubOp = OpCode.Read(41, 3);
+ int subOp = opCode.Read(41, 3);
- bool InvA = OpCode.Read(39);
- bool InvB = OpCode.Read(40);
+ bool invA = opCode.Read(39);
+ bool invB = opCode.Read(40);
- ShaderIrInst Inst = 0;
+ ShaderIrInst inst = 0;
- switch (SubOp)
+ switch (subOp)
{
- case 0: Inst = ShaderIrInst.And; break;
- case 1: Inst = ShaderIrInst.Or; break;
- case 2: Inst = ShaderIrInst.Xor; break;
+ case 0: inst = ShaderIrInst.And; break;
+ case 1: inst = ShaderIrInst.Or; break;
+ case 2: inst = ShaderIrInst.Xor; break;
}
- ShaderIrNode OperA = GetAluNot(OpCode.Gpr8(), InvA);
- ShaderIrNode OperB;
+ ShaderIrNode operA = GetAluNot(opCode.Gpr8(), invA);
+ ShaderIrNode operB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.Imm19_20(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.Imm19_20(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperB = GetAluNot(OperB, InvB);
+ operB = GetAluNot(operB, invB);
- ShaderIrNode Op;
+ ShaderIrNode op;
- if (SubOp < 3)
+ if (subOp < 3)
{
- Op = new ShaderIrOp(Inst, OperA, OperB);
+ op = new ShaderIrOp(inst, operA, operB);
}
else
{
- Op = OperB;
+ op = operB;
}
- ShaderIrNode Compare = new ShaderIrOp(ShaderIrInst.Cne, Op, new ShaderIrOperImm(0));
+ ShaderIrNode compare = new ShaderIrOp(ShaderIrInst.Cne, op, new ShaderIrOperImm(0));
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Pred48(), Compare)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Pred48(), compare)));
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
private enum XmadMode
@@ -1157,143 +1157,143 @@ namespace Ryujinx.Graphics.Gal.Shader
Cbcc = 4
}
- private static void EmitXmad(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitXmad(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- bool SignedA = OpCode.Read(48);
- bool SignedB = OpCode.Read(49);
- bool HighB = OpCode.Read(52);
- bool HighA = OpCode.Read(53);
+ bool signedA = opCode.Read(48);
+ bool signedB = opCode.Read(49);
+ bool highB = opCode.Read(52);
+ bool highA = opCode.Read(53);
- int Mode = OpCode.Read(50, 7);
+ int mode = opCode.Read(50, 7);
- ShaderIrNode OperA = OpCode.Gpr8(), OperB, OperC;
+ ShaderIrNode operA = opCode.Gpr8(), operB, operC;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperB = OpCode.ImmU16_20(); break;
- case ShaderOper.RC: OperB = OpCode.Gpr39(); break;
- case ShaderOper.RR: OperB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operB = opCode.ImmU16_20(); break;
+ case ShaderOper.Rc: operB = opCode.Gpr39(); break;
+ case ShaderOper.Rr: operB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- ShaderIrNode OperB2 = OperB;
+ ShaderIrNode operB2 = operB;
- if (Oper == ShaderOper.Imm)
+ if (oper == ShaderOper.Imm)
{
- int Imm = ((ShaderIrOperImm)OperB2).Value;
+ int imm = ((ShaderIrOperImm)operB2).Value;
- if (!HighB)
+ if (!highB)
{
- Imm <<= 16;
+ imm <<= 16;
}
- if (SignedB)
+ if (signedB)
{
- Imm >>= 16;
+ imm >>= 16;
}
else
{
- Imm = (int)((uint)Imm >> 16);
+ imm = (int)((uint)imm >> 16);
}
- OperB2 = new ShaderIrOperImm(Imm);
+ operB2 = new ShaderIrOperImm(imm);
}
- ShaderIrOperImm Imm16 = new ShaderIrOperImm(16);
+ ShaderIrOperImm imm16 = new ShaderIrOperImm(16);
//If we are working with the lower 16-bits of the A/B operands,
//we need to shift the lower 16-bits to the top 16-bits. Later,
//they will be right shifted. For U16 types, this will be a logical
//right shift, and for S16 types, a arithmetic right shift.
- if (!HighA)
+ if (!highA)
{
- OperA = new ShaderIrOp(ShaderIrInst.Lsl, OperA, Imm16);
+ operA = new ShaderIrOp(ShaderIrInst.Lsl, operA, imm16);
}
- if (!HighB && Oper != ShaderOper.Imm)
+ if (!highB && oper != ShaderOper.Imm)
{
- OperB2 = new ShaderIrOp(ShaderIrInst.Lsl, OperB2, Imm16);
+ operB2 = new ShaderIrOp(ShaderIrInst.Lsl, operB2, imm16);
}
- ShaderIrInst ShiftA = SignedA ? ShaderIrInst.Asr : ShaderIrInst.Lsr;
- ShaderIrInst ShiftB = SignedB ? ShaderIrInst.Asr : ShaderIrInst.Lsr;
+ ShaderIrInst shiftA = signedA ? ShaderIrInst.Asr : ShaderIrInst.Lsr;
+ ShaderIrInst shiftB = signedB ? ShaderIrInst.Asr : ShaderIrInst.Lsr;
- OperA = new ShaderIrOp(ShiftA, OperA, Imm16);
+ operA = new ShaderIrOp(shiftA, operA, imm16);
- if (Oper != ShaderOper.Imm)
+ if (oper != ShaderOper.Imm)
{
- OperB2 = new ShaderIrOp(ShiftB, OperB2, Imm16);
+ operB2 = new ShaderIrOp(shiftB, operB2, imm16);
}
- bool ProductShiftLeft = false;
- bool Merge = false;
+ bool productShiftLeft = false;
+ bool merge = false;
- if (Oper == ShaderOper.RC)
+ if (oper == ShaderOper.Rc)
{
- OperC = OpCode.Cbuf34();
+ operC = opCode.Cbuf34();
}
else
{
- OperC = OpCode.Gpr39();
+ operC = opCode.Gpr39();
- ProductShiftLeft = OpCode.Read(36);
- Merge = OpCode.Read(37);
+ productShiftLeft = opCode.Read(36);
+ merge = opCode.Read(37);
}
- ShaderIrOp MulOp = new ShaderIrOp(ShaderIrInst.Mul, OperA, OperB2);
+ ShaderIrOp mulOp = new ShaderIrOp(ShaderIrInst.Mul, operA, operB2);
- if (ProductShiftLeft)
+ if (productShiftLeft)
{
- MulOp = new ShaderIrOp(ShaderIrInst.Lsl, MulOp, Imm16);
+ mulOp = new ShaderIrOp(ShaderIrInst.Lsl, mulOp, imm16);
}
- switch ((XmadMode)Mode)
+ switch ((XmadMode)mode)
{
- case XmadMode.Clo: OperC = ExtendTo32(OperC, Signed: false, Size: 16); break;
+ case XmadMode.Clo: operC = ExtendTo32(operC, signed: false, size: 16); break;
- case XmadMode.Chi: OperC = new ShaderIrOp(ShaderIrInst.Lsr, OperC, Imm16); break;
+ case XmadMode.Chi: operC = new ShaderIrOp(ShaderIrInst.Lsr, operC, imm16); break;
case XmadMode.Cbcc:
{
- ShaderIrOp OperBLsh16 = new ShaderIrOp(ShaderIrInst.Lsl, OperB, Imm16);
+ ShaderIrOp operBLsh16 = new ShaderIrOp(ShaderIrInst.Lsl, operB, imm16);
- OperC = new ShaderIrOp(ShaderIrInst.Add, OperC, OperBLsh16);
+ operC = new ShaderIrOp(ShaderIrInst.Add, operC, operBLsh16);
break;
}
case XmadMode.Csfu:
{
- ShaderIrOperImm Imm31 = new ShaderIrOperImm(31);
+ ShaderIrOperImm imm31 = new ShaderIrOperImm(31);
- ShaderIrOp SignAdjustA = new ShaderIrOp(ShaderIrInst.Lsr, OperA, Imm31);
- ShaderIrOp SignAdjustB = new ShaderIrOp(ShaderIrInst.Lsr, OperB2, Imm31);
+ ShaderIrOp signAdjustA = new ShaderIrOp(ShaderIrInst.Lsr, operA, imm31);
+ ShaderIrOp signAdjustB = new ShaderIrOp(ShaderIrInst.Lsr, operB2, imm31);
- SignAdjustA = new ShaderIrOp(ShaderIrInst.Lsl, SignAdjustA, Imm16);
- SignAdjustB = new ShaderIrOp(ShaderIrInst.Lsl, SignAdjustB, Imm16);
+ signAdjustA = new ShaderIrOp(ShaderIrInst.Lsl, signAdjustA, imm16);
+ signAdjustB = new ShaderIrOp(ShaderIrInst.Lsl, signAdjustB, imm16);
- ShaderIrOp SignAdjust = new ShaderIrOp(ShaderIrInst.Add, SignAdjustA, SignAdjustB);
+ ShaderIrOp signAdjust = new ShaderIrOp(ShaderIrInst.Add, signAdjustA, signAdjustB);
- OperC = new ShaderIrOp(ShaderIrInst.Sub, OperC, SignAdjust);
+ operC = new ShaderIrOp(ShaderIrInst.Sub, operC, signAdjust);
break;
}
}
- ShaderIrOp AddOp = new ShaderIrOp(ShaderIrInst.Add, MulOp, OperC);
+ ShaderIrOp addOp = new ShaderIrOp(ShaderIrInst.Add, mulOp, operC);
- if (Merge)
+ if (merge)
{
- ShaderIrOperImm Imm16Mask = new ShaderIrOperImm(0xffff);
+ ShaderIrOperImm imm16Mask = new ShaderIrOperImm(0xffff);
- AddOp = new ShaderIrOp(ShaderIrInst.And, AddOp, Imm16Mask);
- OperB = new ShaderIrOp(ShaderIrInst.Lsl, OperB, Imm16);
- AddOp = new ShaderIrOp(ShaderIrInst.Or, AddOp, OperB);
+ addOp = new ShaderIrOp(ShaderIrInst.And, addOp, imm16Mask);
+ operB = new ShaderIrOp(ShaderIrInst.Lsl, operB, imm16);
+ addOp = new ShaderIrOp(ShaderIrInst.Or, addOp, operB);
}
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), AddOp)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), addOp)));
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeFlow.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeFlow.cs
index bc2539bd..fc992693 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeFlow.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeFlow.cs
@@ -4,54 +4,54 @@ namespace Ryujinx.Graphics.Gal.Shader
{
static partial class ShaderDecode
{
- public static void Bra(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Bra(ShaderIrBlock block, long opCode, int position)
{
- if ((OpCode & 0x20) != 0)
+ if ((opCode & 0x20) != 0)
{
//This reads the target offset from the constant buffer.
//Almost impossible to support with GLSL.
throw new NotImplementedException();
}
- ShaderIrOperImm Imm = new ShaderIrOperImm(Position + OpCode.Branch());
+ ShaderIrOperImm imm = new ShaderIrOperImm(position + opCode.Branch());
- Block.AddNode(OpCode.PredNode(new ShaderIrOp(ShaderIrInst.Bra, Imm)));
+ block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Bra, imm)));
}
- public static void Exit(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Exit(ShaderIrBlock block, long opCode, int position)
{
- int CCode = (int)OpCode & 0x1f;
+ int cCode = (int)opCode & 0x1f;
//TODO: Figure out what the other condition codes mean...
- if (CCode == 0xf)
+ if (cCode == 0xf)
{
- Block.AddNode(OpCode.PredNode(new ShaderIrOp(ShaderIrInst.Exit)));
+ block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Exit)));
}
}
- public static void Kil(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Kil(ShaderIrBlock block, long opCode, int position)
{
- Block.AddNode(OpCode.PredNode(new ShaderIrOp(ShaderIrInst.Kil)));
+ block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Kil)));
}
- public static void Ssy(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Ssy(ShaderIrBlock block, long opCode, int position)
{
- if ((OpCode & 0x20) != 0)
+ if ((opCode & 0x20) != 0)
{
//This reads the target offset from the constant buffer.
//Almost impossible to support with GLSL.
throw new NotImplementedException();
}
- ShaderIrOperImm Imm = new ShaderIrOperImm(Position + OpCode.Branch());
+ ShaderIrOperImm imm = new ShaderIrOperImm(position + opCode.Branch());
- Block.AddNode(new ShaderIrOp(ShaderIrInst.Ssy, Imm));
+ block.AddNode(new ShaderIrOp(ShaderIrInst.Ssy, imm));
}
- public static void Sync(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Sync(ShaderIrBlock block, long opCode, int position)
{
//TODO: Implement Sync condition codes
- Block.AddNode(OpCode.PredNode(new ShaderIrOp(ShaderIrInst.Sync)));
+ block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Sync)));
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeFunc.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeFunc.cs
index 73248aa0..cc385aa4 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeFunc.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeFunc.cs
@@ -1,4 +1,4 @@
namespace Ryujinx.Graphics.Gal.Shader
{
- delegate void ShaderDecodeFunc(ShaderIrBlock Block, long OpCode, int Position);
+ delegate void ShaderDecodeFunc(ShaderIrBlock block, long opCode, int position);
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeHelper.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeHelper.cs
index d07bcd91..9a84e612 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeHelper.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeHelper.cs
@@ -5,74 +5,74 @@ namespace Ryujinx.Graphics.Gal.Shader
private static readonly ShaderIrOperImmf ImmfZero = new ShaderIrOperImmf(0);
private static readonly ShaderIrOperImmf ImmfOne = new ShaderIrOperImmf(1);
- public static ShaderIrNode GetAluFabsFneg(ShaderIrNode Node, bool Abs, bool Neg)
+ public static ShaderIrNode GetAluFabsFneg(ShaderIrNode node, bool abs, bool neg)
{
- return GetAluFneg(GetAluFabs(Node, Abs), Neg);
+ return GetAluFneg(GetAluFabs(node, abs), neg);
}
- public static ShaderIrNode GetAluFabs(ShaderIrNode Node, bool Abs)
+ public static ShaderIrNode GetAluFabs(ShaderIrNode node, bool abs)
{
- return Abs ? new ShaderIrOp(ShaderIrInst.Fabs, Node) : Node;
+ return abs ? new ShaderIrOp(ShaderIrInst.Fabs, node) : node;
}
- public static ShaderIrNode GetAluFneg(ShaderIrNode Node, bool Neg)
+ public static ShaderIrNode GetAluFneg(ShaderIrNode node, bool neg)
{
- return Neg ? new ShaderIrOp(ShaderIrInst.Fneg, Node) : Node;
+ return neg ? new ShaderIrOp(ShaderIrInst.Fneg, node) : node;
}
- public static ShaderIrNode GetAluFsat(ShaderIrNode Node, bool Sat)
+ public static ShaderIrNode GetAluFsat(ShaderIrNode node, bool sat)
{
- return Sat ? new ShaderIrOp(ShaderIrInst.Fclamp, Node, ImmfZero, ImmfOne) : Node;
+ return sat ? new ShaderIrOp(ShaderIrInst.Fclamp, node, ImmfZero, ImmfOne) : node;
}
- public static ShaderIrNode GetAluIabsIneg(ShaderIrNode Node, bool Abs, bool Neg)
+ public static ShaderIrNode GetAluIabsIneg(ShaderIrNode node, bool abs, bool neg)
{
- return GetAluIneg(GetAluIabs(Node, Abs), Neg);
+ return GetAluIneg(GetAluIabs(node, abs), neg);
}
- public static ShaderIrNode GetAluIabs(ShaderIrNode Node, bool Abs)
+ public static ShaderIrNode GetAluIabs(ShaderIrNode node, bool abs)
{
- return Abs ? new ShaderIrOp(ShaderIrInst.Abs, Node) : Node;
+ return abs ? new ShaderIrOp(ShaderIrInst.Abs, node) : node;
}
- public static ShaderIrNode GetAluIneg(ShaderIrNode Node, bool Neg)
+ public static ShaderIrNode GetAluIneg(ShaderIrNode node, bool neg)
{
- return Neg ? new ShaderIrOp(ShaderIrInst.Neg, Node) : Node;
+ return neg ? new ShaderIrOp(ShaderIrInst.Neg, node) : node;
}
- public static ShaderIrNode GetAluNot(ShaderIrNode Node, bool Not)
+ public static ShaderIrNode GetAluNot(ShaderIrNode node, bool not)
{
- return Not ? new ShaderIrOp(ShaderIrInst.Not, Node) : Node;
+ return not ? new ShaderIrOp(ShaderIrInst.Not, node) : node;
}
- public static ShaderIrNode ExtendTo32(ShaderIrNode Node, bool Signed, int Size)
+ public static ShaderIrNode ExtendTo32(ShaderIrNode node, bool signed, int size)
{
- int Shift = 32 - Size;
+ int shift = 32 - size;
- ShaderIrInst RightShift = Signed
+ ShaderIrInst rightShift = signed
? ShaderIrInst.Asr
: ShaderIrInst.Lsr;
- Node = new ShaderIrOp(ShaderIrInst.Lsl, Node, new ShaderIrOperImm(Shift));
- Node = new ShaderIrOp(RightShift, Node, new ShaderIrOperImm(Shift));
+ node = new ShaderIrOp(ShaderIrInst.Lsl, node, new ShaderIrOperImm(shift));
+ node = new ShaderIrOp(rightShift, node, new ShaderIrOperImm(shift));
- return Node;
+ return node;
}
- public static ShaderIrNode ExtendTo32(ShaderIrNode Node, bool Signed, ShaderIrNode Size)
+ public static ShaderIrNode ExtendTo32(ShaderIrNode node, bool signed, ShaderIrNode size)
{
- ShaderIrOperImm WordSize = new ShaderIrOperImm(32);
+ ShaderIrOperImm wordSize = new ShaderIrOperImm(32);
- ShaderIrOp Shift = new ShaderIrOp(ShaderIrInst.Sub, WordSize, Size);
+ ShaderIrOp shift = new ShaderIrOp(ShaderIrInst.Sub, wordSize, size);
- ShaderIrInst RightShift = Signed
+ ShaderIrInst rightShift = signed
? ShaderIrInst.Asr
: ShaderIrInst.Lsr;
- Node = new ShaderIrOp(ShaderIrInst.Lsl, Node, Shift);
- Node = new ShaderIrOp(RightShift, Node, Shift);
+ node = new ShaderIrOp(ShaderIrInst.Lsl, node, shift);
+ node = new ShaderIrOp(rightShift, node, shift);
- return Node;
+ return node;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMem.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMem.cs
index 8b4eacdf..7ce126b0 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMem.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMem.cs
@@ -7,6 +7,7 @@ namespace Ryujinx.Graphics.Gal.Shader
{
static partial class ShaderDecode
{
+ // ReSharper disable InconsistentNaming
private const int ____ = 0x0;
private const int R___ = 0x1;
private const int _G__ = 0x2;
@@ -21,8 +22,9 @@ namespace Ryujinx.Graphics.Gal.Shader
private const int R_BA = 0xd;
private const int _GBA = 0xe;
private const int RGBA = 0xf;
+ // ReSharper restore InconsistentNaming
- private static int[,] MaskLut = new int[,]
+ private static int[,] _maskLut = new int[,]
{
{ ____, ____, ____, ____, ____, ____, ____, ____ },
{ R___, _G__, __B_, ___A, RG__, R__A, _G_A, __BA },
@@ -30,28 +32,28 @@ namespace Ryujinx.Graphics.Gal.Shader
{ RGB_, RG_A, R_BA, _GBA, RGBA, ____, ____, ____ }
};
- private static GalTextureTarget TexToTextureTarget(int TexType, bool IsArray)
+ private static GalTextureTarget TexToTextureTarget(int texType, bool isArray)
{
- switch (TexType)
+ switch (texType)
{
case 0:
- return IsArray ? GalTextureTarget.OneDArray : GalTextureTarget.OneD;
+ return isArray ? GalTextureTarget.OneDArray : GalTextureTarget.OneD;
case 2:
- return IsArray ? GalTextureTarget.TwoDArray : GalTextureTarget.TwoD;
+ return isArray ? GalTextureTarget.TwoDArray : GalTextureTarget.TwoD;
case 4:
- if (IsArray)
- throw new InvalidOperationException($"ARRAY bit set on a TEX with 3D texture!");
+ if (isArray)
+ throw new InvalidOperationException("ARRAY bit set on a TEX with 3D texture!");
return GalTextureTarget.ThreeD;
case 6:
- return IsArray ? GalTextureTarget.CubeArray : GalTextureTarget.CubeMap;
+ return isArray ? GalTextureTarget.CubeArray : GalTextureTarget.CubeMap;
default:
throw new InvalidOperationException();
}
}
- private static GalTextureTarget TexsToTextureTarget(int TexType)
+ private static GalTextureTarget TexsToTextureTarget(int texType)
{
- switch (TexType)
+ switch (texType)
{
case 0:
return GalTextureTarget.OneD;
@@ -77,9 +79,9 @@ namespace Ryujinx.Graphics.Gal.Shader
}
}
- public static GalTextureTarget TldsToTextureTarget(int TexType)
+ public static GalTextureTarget TldsToTextureTarget(int texType)
{
- switch (TexType)
+ switch (texType)
{
case 0:
case 2:
@@ -99,566 +101,566 @@ namespace Ryujinx.Graphics.Gal.Shader
}
}
- public static void Ld_A(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Ld_A(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrNode[] Opers = OpCode.Abuf20();
+ ShaderIrNode[] opers = opCode.Abuf20();
//Used by GS
- ShaderIrOperGpr Vertex = OpCode.Gpr39();
+ ShaderIrOperGpr vertex = opCode.Gpr39();
- int Index = 0;
+ int index = 0;
- foreach (ShaderIrNode OperA in Opers)
+ foreach (ShaderIrNode operA in opers)
{
- ShaderIrOperGpr OperD = OpCode.Gpr0();
+ ShaderIrOperGpr operD = opCode.Gpr0();
- OperD.Index += Index++;
+ operD.Index += index++;
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OperD, OperA)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(operD, operA)));
}
}
- public static void Ld_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Ld_C(ShaderIrBlock block, long opCode, int position)
{
- int CbufPos = OpCode.Read(22, 0x3fff);
- int CbufIndex = OpCode.Read(36, 0x1f);
- int Type = OpCode.Read(48, 7);
+ int cbufPos = opCode.Read(22, 0x3fff);
+ int cbufIndex = opCode.Read(36, 0x1f);
+ int type = opCode.Read(48, 7);
- if (Type > 5)
+ if (type > 5)
{
throw new InvalidOperationException();
}
- ShaderIrOperGpr Temp = ShaderIrOperGpr.MakeTemporary();
+ ShaderIrOperGpr temp = ShaderIrOperGpr.MakeTemporary();
- Block.AddNode(new ShaderIrAsg(Temp, OpCode.Gpr8()));
+ block.AddNode(new ShaderIrAsg(temp, opCode.Gpr8()));
- int Count = Type == 5 ? 2 : 1;
+ int count = type == 5 ? 2 : 1;
- for (int Index = 0; Index < Count; Index++)
+ for (int index = 0; index < count; index++)
{
- ShaderIrOperCbuf OperA = new ShaderIrOperCbuf(CbufIndex, CbufPos, Temp);
+ ShaderIrOperCbuf operA = new ShaderIrOperCbuf(cbufIndex, cbufPos, temp);
- ShaderIrOperGpr OperD = OpCode.Gpr0();
+ ShaderIrOperGpr operD = opCode.Gpr0();
- OperA.Pos += Index;
- OperD.Index += Index;
+ operA.Pos += index;
+ operD.Index += index;
- if (!OperD.IsValidRegister)
+ if (!operD.IsValidRegister)
{
break;
}
- ShaderIrNode Node = OperA;
+ ShaderIrNode node = operA;
- if (Type < 4)
+ if (type < 4)
{
//This is a 8 or 16 bits type.
- bool Signed = (Type & 1) != 0;
+ bool signed = (type & 1) != 0;
- int Size = 8 << (Type >> 1);
+ int size = 8 << (type >> 1);
- Node = ExtendTo32(Node, Signed, Size);
+ node = ExtendTo32(node, signed, size);
}
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OperD, Node)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(operD, node)));
}
}
- public static void St_A(ShaderIrBlock Block, long OpCode, int Position)
+ public static void St_A(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrNode[] Opers = OpCode.Abuf20();
+ ShaderIrNode[] opers = opCode.Abuf20();
- int Index = 0;
+ int index = 0;
- foreach (ShaderIrNode OperA in Opers)
+ foreach (ShaderIrNode operA in opers)
{
- ShaderIrOperGpr OperD = OpCode.Gpr0();
+ ShaderIrOperGpr operD = opCode.Gpr0();
- OperD.Index += Index++;
+ operD.Index += index++;
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OperA, OperD)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(operA, operD)));
}
}
- public static void Texq(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Texq(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrNode OperD = OpCode.Gpr0();
- ShaderIrNode OperA = OpCode.Gpr8();
+ ShaderIrNode operD = opCode.Gpr0();
+ ShaderIrNode operA = opCode.Gpr8();
- ShaderTexqInfo Info = (ShaderTexqInfo)(OpCode.Read(22, 0x1f));
+ ShaderTexqInfo info = (ShaderTexqInfo)(opCode.Read(22, 0x1f));
- ShaderIrMetaTexq Meta0 = new ShaderIrMetaTexq(Info, 0);
- ShaderIrMetaTexq Meta1 = new ShaderIrMetaTexq(Info, 1);
+ ShaderIrMetaTexq meta0 = new ShaderIrMetaTexq(info, 0);
+ ShaderIrMetaTexq meta1 = new ShaderIrMetaTexq(info, 1);
- ShaderIrNode OperC = OpCode.Imm13_36();
+ ShaderIrNode operC = opCode.Imm13_36();
- ShaderIrOp Op0 = new ShaderIrOp(ShaderIrInst.Texq, OperA, null, OperC, Meta0);
- ShaderIrOp Op1 = new ShaderIrOp(ShaderIrInst.Texq, OperA, null, OperC, Meta1);
+ ShaderIrOp op0 = new ShaderIrOp(ShaderIrInst.Texq, operA, null, operC, meta0);
+ ShaderIrOp op1 = new ShaderIrOp(ShaderIrInst.Texq, operA, null, operC, meta1);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OperD, Op0)));
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OperA, Op1))); //Is this right?
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(operD, op0)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(operA, op1))); //Is this right?
}
- public static void Tex(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Tex(ShaderIrBlock block, long opCode, int position)
{
- TextureInstructionSuffix Suffix;
+ TextureInstructionSuffix suffix;
- int RawSuffix = OpCode.Read(0x34, 0x38);
+ int rawSuffix = opCode.Read(0x34, 0x38);
- switch (RawSuffix)
+ switch (rawSuffix)
{
case 0:
- Suffix = TextureInstructionSuffix.None;
+ suffix = TextureInstructionSuffix.None;
break;
case 0x8:
- Suffix = TextureInstructionSuffix.LZ;
+ suffix = TextureInstructionSuffix.Lz;
break;
case 0x10:
- Suffix = TextureInstructionSuffix.LB;
+ suffix = TextureInstructionSuffix.Lb;
break;
case 0x18:
- Suffix = TextureInstructionSuffix.LL;
+ suffix = TextureInstructionSuffix.Ll;
break;
case 0x30:
- Suffix = TextureInstructionSuffix.LBA;
+ suffix = TextureInstructionSuffix.Lba;
break;
case 0x38:
- Suffix = TextureInstructionSuffix.LLA;
+ suffix = TextureInstructionSuffix.Lla;
break;
default:
- throw new InvalidOperationException($"Invalid Suffix for TEX instruction {RawSuffix}");
+ throw new InvalidOperationException($"Invalid Suffix for TEX instruction {rawSuffix}");
}
- bool IsOffset = OpCode.Read(0x36);
+ bool isOffset = opCode.Read(0x36);
- if (IsOffset)
- Suffix |= TextureInstructionSuffix.AOffI;
+ if (isOffset)
+ suffix |= TextureInstructionSuffix.AOffI;
- EmitTex(Block, OpCode, Suffix, GprHandle: false);
+ EmitTex(block, opCode, suffix, gprHandle: false);
}
- public static void Tex_B(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Tex_B(ShaderIrBlock block, long opCode, int position)
{
- TextureInstructionSuffix Suffix;
+ TextureInstructionSuffix suffix;
- int RawSuffix = OpCode.Read(0x24, 0xe);
+ int rawSuffix = opCode.Read(0x24, 0xe);
- switch (RawSuffix)
+ switch (rawSuffix)
{
case 0:
- Suffix = TextureInstructionSuffix.None;
+ suffix = TextureInstructionSuffix.None;
break;
case 0x2:
- Suffix = TextureInstructionSuffix.LZ;
+ suffix = TextureInstructionSuffix.Lz;
break;
case 0x4:
- Suffix = TextureInstructionSuffix.LB;
+ suffix = TextureInstructionSuffix.Lb;
break;
case 0x6:
- Suffix = TextureInstructionSuffix.LL;
+ suffix = TextureInstructionSuffix.Ll;
break;
case 0xc:
- Suffix = TextureInstructionSuffix.LBA;
+ suffix = TextureInstructionSuffix.Lba;
break;
case 0xe:
- Suffix = TextureInstructionSuffix.LLA;
+ suffix = TextureInstructionSuffix.Lla;
break;
default:
- throw new InvalidOperationException($"Invalid Suffix for TEX.B instruction {RawSuffix}");
+ throw new InvalidOperationException($"Invalid Suffix for TEX.B instruction {rawSuffix}");
}
- bool IsOffset = OpCode.Read(0x23);
+ bool isOffset = opCode.Read(0x23);
- if (IsOffset)
- Suffix |= TextureInstructionSuffix.AOffI;
+ if (isOffset)
+ suffix |= TextureInstructionSuffix.AOffI;
- EmitTex(Block, OpCode, Suffix, GprHandle: true);
+ EmitTex(block, opCode, suffix, gprHandle: true);
}
- private static void EmitTex(ShaderIrBlock Block, long OpCode, TextureInstructionSuffix TextureInstructionSuffix, bool GprHandle)
+ private static void EmitTex(ShaderIrBlock block, long opCode, TextureInstructionSuffix textureInstructionSuffix, bool gprHandle)
{
- bool IsArray = OpCode.HasArray();
+ bool isArray = opCode.HasArray();
- GalTextureTarget TextureTarget = TexToTextureTarget(OpCode.Read(28, 6), IsArray);
+ GalTextureTarget textureTarget = TexToTextureTarget(opCode.Read(28, 6), isArray);
- bool HasDepthCompare = OpCode.Read(0x32);
+ bool hasDepthCompare = opCode.Read(0x32);
- if (HasDepthCompare)
+ if (hasDepthCompare)
{
- TextureInstructionSuffix |= TextureInstructionSuffix.DC;
+ textureInstructionSuffix |= TextureInstructionSuffix.Dc;
}
- ShaderIrOperGpr[] Coords = new ShaderIrOperGpr[ImageUtils.GetCoordsCountTextureTarget(TextureTarget)];
+ ShaderIrOperGpr[] coords = new ShaderIrOperGpr[ImageUtils.GetCoordsCountTextureTarget(textureTarget)];
- int IndexExtraCoord = 0;
+ int indexExtraCoord = 0;
- if (IsArray)
+ if (isArray)
{
- IndexExtraCoord++;
+ indexExtraCoord++;
- Coords[Coords.Length - 1] = OpCode.Gpr8();
+ coords[coords.Length - 1] = opCode.Gpr8();
}
- for (int Index = 0; Index < Coords.Length - IndexExtraCoord; Index++)
+ for (int index = 0; index < coords.Length - indexExtraCoord; index++)
{
- ShaderIrOperGpr CoordReg = OpCode.Gpr8();
+ ShaderIrOperGpr coordReg = opCode.Gpr8();
- CoordReg.Index += Index;
+ coordReg.Index += index;
- CoordReg.Index += IndexExtraCoord;
+ coordReg.Index += indexExtraCoord;
- if (!CoordReg.IsValidRegister)
+ if (!coordReg.IsValidRegister)
{
- CoordReg.Index = ShaderIrOperGpr.ZRIndex;
+ coordReg.Index = ShaderIrOperGpr.ZrIndex;
}
- Coords[Index] = CoordReg;
+ coords[index] = coordReg;
}
- int ChMask = OpCode.Read(31, 0xf);
+ int chMask = opCode.Read(31, 0xf);
- ShaderIrOperGpr LevelOfDetail = null;
- ShaderIrOperGpr Offset = null;
- ShaderIrOperGpr DepthCompare = null;
+ ShaderIrOperGpr levelOfDetail = null;
+ ShaderIrOperGpr offset = null;
+ ShaderIrOperGpr depthCompare = null;
// TODO: determine first argument when TEX.B is used
- int OperBIndex = GprHandle ? 1 : 0;
+ int operBIndex = gprHandle ? 1 : 0;
- if ((TextureInstructionSuffix & TextureInstructionSuffix.LL) != 0 ||
- (TextureInstructionSuffix & TextureInstructionSuffix.LB) != 0 ||
- (TextureInstructionSuffix & TextureInstructionSuffix.LBA) != 0 ||
- (TextureInstructionSuffix & TextureInstructionSuffix.LLA) != 0)
+ if ((textureInstructionSuffix & TextureInstructionSuffix.Ll) != 0 ||
+ (textureInstructionSuffix & TextureInstructionSuffix.Lb) != 0 ||
+ (textureInstructionSuffix & TextureInstructionSuffix.Lba) != 0 ||
+ (textureInstructionSuffix & TextureInstructionSuffix.Lla) != 0)
{
- LevelOfDetail = OpCode.Gpr20();
- LevelOfDetail.Index += OperBIndex;
+ levelOfDetail = opCode.Gpr20();
+ levelOfDetail.Index += operBIndex;
- OperBIndex++;
+ operBIndex++;
}
- if ((TextureInstructionSuffix & TextureInstructionSuffix.AOffI) != 0)
+ if ((textureInstructionSuffix & TextureInstructionSuffix.AOffI) != 0)
{
- Offset = OpCode.Gpr20();
- Offset.Index += OperBIndex;
+ offset = opCode.Gpr20();
+ offset.Index += operBIndex;
- OperBIndex++;
+ operBIndex++;
}
- if ((TextureInstructionSuffix & TextureInstructionSuffix.DC) != 0)
+ if ((textureInstructionSuffix & TextureInstructionSuffix.Dc) != 0)
{
- DepthCompare = OpCode.Gpr20();
- DepthCompare.Index += OperBIndex;
+ depthCompare = opCode.Gpr20();
+ depthCompare.Index += operBIndex;
- OperBIndex++;
+ operBIndex++;
}
// ???
- ShaderIrNode OperC = GprHandle
- ? (ShaderIrNode)OpCode.Gpr20()
- : (ShaderIrNode)OpCode.Imm13_36();
+ ShaderIrNode operC = gprHandle
+ ? (ShaderIrNode)opCode.Gpr20()
+ : (ShaderIrNode)opCode.Imm13_36();
- ShaderIrInst Inst = GprHandle ? ShaderIrInst.Texb : ShaderIrInst.Texs;
+ ShaderIrInst inst = gprHandle ? ShaderIrInst.Texb : ShaderIrInst.Texs;
- Coords = CoordsRegistersToTempRegisters(Block, Coords);
+ coords = CoordsRegistersToTempRegisters(block, coords);
- int RegInc = 0;
+ int regInc = 0;
- for (int Ch = 0; Ch < 4; Ch++)
+ for (int ch = 0; ch < 4; ch++)
{
- if (!IsChannelUsed(ChMask, Ch))
+ if (!IsChannelUsed(chMask, ch))
{
continue;
}
- ShaderIrOperGpr Dst = OpCode.Gpr0();
+ ShaderIrOperGpr dst = opCode.Gpr0();
- Dst.Index += RegInc++;
+ dst.Index += regInc++;
- if (!Dst.IsValidRegister || Dst.IsConst)
+ if (!dst.IsValidRegister || dst.IsConst)
{
continue;
}
- ShaderIrMetaTex Meta = new ShaderIrMetaTex(Ch, TextureTarget, TextureInstructionSuffix, Coords)
+ ShaderIrMetaTex meta = new ShaderIrMetaTex(ch, textureTarget, textureInstructionSuffix, coords)
{
- LevelOfDetail = LevelOfDetail,
- Offset = Offset,
- DepthCompare = DepthCompare
+ LevelOfDetail = levelOfDetail,
+ Offset = offset,
+ DepthCompare = depthCompare
};
- ShaderIrOp Op = new ShaderIrOp(Inst, Coords[0], Coords.Length > 1 ? Coords[1] : null, OperC, Meta);
+ ShaderIrOp op = new ShaderIrOp(inst, coords[0], coords.Length > 1 ? coords[1] : null, operC, meta);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(Dst, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(dst, op)));
}
}
- public static void Texs(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Texs(ShaderIrBlock block, long opCode, int position)
{
- TextureInstructionSuffix Suffix;
+ TextureInstructionSuffix suffix;
- int RawSuffix = OpCode.Read(0x34, 0x1e);
+ int rawSuffix = opCode.Read(0x34, 0x1e);
- switch (RawSuffix)
+ switch (rawSuffix)
{
case 0:
case 0x4:
case 0x10:
case 0x16:
- Suffix = TextureInstructionSuffix.LZ;
+ suffix = TextureInstructionSuffix.Lz;
break;
case 0x6:
case 0x1a:
- Suffix = TextureInstructionSuffix.LL;
+ suffix = TextureInstructionSuffix.Ll;
break;
case 0x8:
- Suffix = TextureInstructionSuffix.DC;
+ suffix = TextureInstructionSuffix.Dc;
break;
case 0x2:
case 0xe:
case 0x14:
case 0x18:
- Suffix = TextureInstructionSuffix.None;
+ suffix = TextureInstructionSuffix.None;
break;
case 0xa:
- Suffix = TextureInstructionSuffix.LL | TextureInstructionSuffix.DC;
+ suffix = TextureInstructionSuffix.Ll | TextureInstructionSuffix.Dc;
break;
case 0xc:
case 0x12:
- Suffix = TextureInstructionSuffix.LZ | TextureInstructionSuffix.DC;
+ suffix = TextureInstructionSuffix.Lz | TextureInstructionSuffix.Dc;
break;
default:
- throw new InvalidOperationException($"Invalid Suffix for TEXS instruction {RawSuffix}");
+ throw new InvalidOperationException($"Invalid Suffix for TEXS instruction {rawSuffix}");
}
- GalTextureTarget TextureTarget = TexsToTextureTarget(OpCode.Read(52, 0x1e));
+ GalTextureTarget textureTarget = TexsToTextureTarget(opCode.Read(52, 0x1e));
- EmitTexs(Block, OpCode, ShaderIrInst.Texs, TextureTarget, Suffix);
+ EmitTexs(block, opCode, ShaderIrInst.Texs, textureTarget, suffix);
}
- public static void Tlds(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Tlds(ShaderIrBlock block, long opCode, int position)
{
- TextureInstructionSuffix Suffix;
+ TextureInstructionSuffix suffix;
- int RawSuffix = OpCode.Read(0x34, 0x1e);
+ int rawSuffix = opCode.Read(0x34, 0x1e);
- switch (RawSuffix)
+ switch (rawSuffix)
{
case 0:
case 0x4:
case 0x8:
- Suffix = TextureInstructionSuffix.LZ | TextureInstructionSuffix.AOffI;
+ suffix = TextureInstructionSuffix.Lz | TextureInstructionSuffix.AOffI;
break;
case 0xc:
- Suffix = TextureInstructionSuffix.LZ | TextureInstructionSuffix.MZ;
+ suffix = TextureInstructionSuffix.Lz | TextureInstructionSuffix.Mz;
break;
case 0xe:
case 0x10:
- Suffix = TextureInstructionSuffix.LZ;
+ suffix = TextureInstructionSuffix.Lz;
break;
case 0x2:
case 0xa:
- Suffix = TextureInstructionSuffix.LL;
+ suffix = TextureInstructionSuffix.Ll;
break;
case 0x18:
- Suffix = TextureInstructionSuffix.LL | TextureInstructionSuffix.AOffI;
+ suffix = TextureInstructionSuffix.Ll | TextureInstructionSuffix.AOffI;
break;
default:
- throw new InvalidOperationException($"Invalid Suffix for TLDS instruction {RawSuffix}");
+ throw new InvalidOperationException($"Invalid Suffix for TLDS instruction {rawSuffix}");
}
- GalTextureTarget TextureTarget = TldsToTextureTarget(OpCode.Read(52, 0x1e));
+ GalTextureTarget textureTarget = TldsToTextureTarget(opCode.Read(52, 0x1e));
- EmitTexs(Block, OpCode, ShaderIrInst.Txlf, TextureTarget, Suffix);
+ EmitTexs(block, opCode, ShaderIrInst.Txlf, textureTarget, suffix);
}
- public static void Tld4(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Tld4(ShaderIrBlock block, long opCode, int position)
{
- TextureInstructionSuffix Suffix;
+ TextureInstructionSuffix suffix;
- int RawSuffix = OpCode.Read(0x34, 0xc);
+ int rawSuffix = opCode.Read(0x34, 0xc);
- switch (RawSuffix)
+ switch (rawSuffix)
{
case 0:
- Suffix = TextureInstructionSuffix.None;
+ suffix = TextureInstructionSuffix.None;
break;
case 0x4:
- Suffix = TextureInstructionSuffix.AOffI;
+ suffix = TextureInstructionSuffix.AOffI;
break;
case 0x8:
- Suffix = TextureInstructionSuffix.PTP;
+ suffix = TextureInstructionSuffix.Ptp;
break;
default:
- throw new InvalidOperationException($"Invalid Suffix for TLD4 instruction {RawSuffix}");
+ throw new InvalidOperationException($"Invalid Suffix for TLD4 instruction {rawSuffix}");
}
- bool IsShadow = OpCode.Read(0x32);
+ bool isShadow = opCode.Read(0x32);
- bool IsArray = OpCode.HasArray();
- int ChMask = OpCode.Read(31, 0xf);
+ bool isArray = opCode.HasArray();
+ int chMask = opCode.Read(31, 0xf);
- GalTextureTarget TextureTarget = TexToTextureTarget(OpCode.Read(28, 6), IsArray);
+ GalTextureTarget textureTarget = TexToTextureTarget(opCode.Read(28, 6), isArray);
- if (IsShadow)
+ if (isShadow)
{
- Suffix |= TextureInstructionSuffix.DC;
+ suffix |= TextureInstructionSuffix.Dc;
}
- EmitTld4(Block, OpCode, TextureTarget, Suffix, ChMask, OpCode.Read(0x38, 0x3), false);
+ EmitTld4(block, opCode, textureTarget, suffix, chMask, opCode.Read(0x38, 0x3), false);
}
- public static void Tld4s(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Tld4S(ShaderIrBlock block, long opCode, int position)
{
- TextureInstructionSuffix Suffix = TextureInstructionSuffix.None;
+ TextureInstructionSuffix suffix = TextureInstructionSuffix.None;
- bool IsOffset = OpCode.Read(0x33);
- bool IsShadow = OpCode.Read(0x32);
+ bool isOffset = opCode.Read(0x33);
+ bool isShadow = opCode.Read(0x32);
- if (IsOffset)
+ if (isOffset)
{
- Suffix |= TextureInstructionSuffix.AOffI;
+ suffix |= TextureInstructionSuffix.AOffI;
}
- if (IsShadow)
+ if (isShadow)
{
- Suffix |= TextureInstructionSuffix.DC;
+ suffix |= TextureInstructionSuffix.Dc;
}
// TLD4S seems to only support 2D textures with RGBA mask?
- EmitTld4(Block, OpCode, GalTextureTarget.TwoD, Suffix, RGBA, OpCode.Read(0x34, 0x3), true);
+ EmitTld4(block, opCode, GalTextureTarget.TwoD, suffix, RGBA, opCode.Read(0x34, 0x3), true);
}
- private static void EmitTexs(ShaderIrBlock Block,
- long OpCode,
- ShaderIrInst Inst,
- GalTextureTarget TextureTarget,
- TextureInstructionSuffix TextureInstructionSuffix)
+ private static void EmitTexs(ShaderIrBlock block,
+ long opCode,
+ ShaderIrInst inst,
+ GalTextureTarget textureTarget,
+ TextureInstructionSuffix textureInstructionSuffix)
{
- if (Inst == ShaderIrInst.Txlf && TextureTarget == GalTextureTarget.CubeArray)
+ if (inst == ShaderIrInst.Txlf && textureTarget == GalTextureTarget.CubeArray)
{
throw new InvalidOperationException("TLDS instructions cannot use CUBE modifier!");
}
- bool IsArray = ImageUtils.IsArray(TextureTarget);
+ bool isArray = ImageUtils.IsArray(textureTarget);
- ShaderIrOperGpr[] Coords = new ShaderIrOperGpr[ImageUtils.GetCoordsCountTextureTarget(TextureTarget)];
+ ShaderIrOperGpr[] coords = new ShaderIrOperGpr[ImageUtils.GetCoordsCountTextureTarget(textureTarget)];
- ShaderIrOperGpr OperA = OpCode.Gpr8();
- ShaderIrOperGpr OperB = OpCode.Gpr20();
+ ShaderIrOperGpr operA = opCode.Gpr8();
+ ShaderIrOperGpr operB = opCode.Gpr20();
- ShaderIrOperGpr SuffixExtra = OpCode.Gpr20();
- SuffixExtra.Index += 1;
+ ShaderIrOperGpr suffixExtra = opCode.Gpr20();
+ suffixExtra.Index += 1;
- int CoordStartIndex = 0;
+ int coordStartIndex = 0;
- if (IsArray)
+ if (isArray)
{
- CoordStartIndex++;
- Coords[Coords.Length - 1] = OpCode.Gpr8();
+ coordStartIndex++;
+ coords[coords.Length - 1] = opCode.Gpr8();
}
- switch (Coords.Length - CoordStartIndex)
+ switch (coords.Length - coordStartIndex)
{
case 1:
- Coords[0] = OpCode.Gpr8();
+ coords[0] = opCode.Gpr8();
break;
case 2:
- Coords[0] = OpCode.Gpr8();
- Coords[0].Index += CoordStartIndex;
+ coords[0] = opCode.Gpr8();
+ coords[0].Index += coordStartIndex;
break;
case 3:
- Coords[0] = OpCode.Gpr8();
- Coords[0].Index += CoordStartIndex;
+ coords[0] = opCode.Gpr8();
+ coords[0].Index += coordStartIndex;
- Coords[1] = OpCode.Gpr8();
- Coords[1].Index += 1 + CoordStartIndex;
+ coords[1] = opCode.Gpr8();
+ coords[1].Index += 1 + coordStartIndex;
break;
default:
- throw new NotSupportedException($"{Coords.Length - CoordStartIndex} coords textures aren't supported in TEXS");
+ throw new NotSupportedException($"{coords.Length - coordStartIndex} coords textures aren't supported in TEXS");
}
- int OperBIndex = 0;
+ int operBIndex = 0;
- ShaderIrOperGpr LevelOfDetail = null;
- ShaderIrOperGpr Offset = null;
- ShaderIrOperGpr DepthCompare = null;
+ ShaderIrOperGpr levelOfDetail = null;
+ ShaderIrOperGpr offset = null;
+ ShaderIrOperGpr depthCompare = null;
// OperB is always the last value
// Not applicable to 1d textures
- if (Coords.Length - CoordStartIndex != 1)
+ if (coords.Length - coordStartIndex != 1)
{
- Coords[Coords.Length - CoordStartIndex - 1] = OperB;
- OperBIndex++;
+ coords[coords.Length - coordStartIndex - 1] = operB;
+ operBIndex++;
}
// Encoding of TEXS/TLDS is a bit special and change for 2d textures
// NOTE: OperA seems to hold at best two args.
// On 2D textures, if no suffix need an additional values, Y is stored in OperB, otherwise coords are in OperA and the additional values is in OperB.
- if (TextureInstructionSuffix != TextureInstructionSuffix.None && TextureInstructionSuffix != TextureInstructionSuffix.LZ && TextureTarget == GalTextureTarget.TwoD)
+ if (textureInstructionSuffix != TextureInstructionSuffix.None && textureInstructionSuffix != TextureInstructionSuffix.Lz && textureTarget == GalTextureTarget.TwoD)
{
- Coords[Coords.Length - CoordStartIndex - 1] = OpCode.Gpr8();
- Coords[Coords.Length - CoordStartIndex - 1].Index += Coords.Length - CoordStartIndex - 1;
- OperBIndex--;
+ coords[coords.Length - coordStartIndex - 1] = opCode.Gpr8();
+ coords[coords.Length - coordStartIndex - 1].Index += coords.Length - coordStartIndex - 1;
+ operBIndex--;
}
// TODO: Find what MZ does and what changes about the encoding (Maybe Multisample?)
- if ((TextureInstructionSuffix & TextureInstructionSuffix.LL) != 0)
+ if ((textureInstructionSuffix & TextureInstructionSuffix.Ll) != 0)
{
- LevelOfDetail = OpCode.Gpr20();
- LevelOfDetail.Index += OperBIndex;
- OperBIndex++;
+ levelOfDetail = opCode.Gpr20();
+ levelOfDetail.Index += operBIndex;
+ operBIndex++;
}
- if ((TextureInstructionSuffix & TextureInstructionSuffix.AOffI) != 0)
+ if ((textureInstructionSuffix & TextureInstructionSuffix.AOffI) != 0)
{
- Offset = OpCode.Gpr20();
- Offset.Index += OperBIndex;
- OperBIndex++;
+ offset = opCode.Gpr20();
+ offset.Index += operBIndex;
+ operBIndex++;
}
- if ((TextureInstructionSuffix & TextureInstructionSuffix.DC) != 0)
+ if ((textureInstructionSuffix & TextureInstructionSuffix.Dc) != 0)
{
- DepthCompare = OpCode.Gpr20();
- DepthCompare.Index += OperBIndex;
- OperBIndex++;
+ depthCompare = opCode.Gpr20();
+ depthCompare.Index += operBIndex;
+ operBIndex++;
}
- int LutIndex;
+ int lutIndex;
- LutIndex = !OpCode.Gpr0().IsConst ? 1 : 0;
- LutIndex |= !OpCode.Gpr28().IsConst ? 2 : 0;
+ lutIndex = !opCode.Gpr0().IsConst ? 1 : 0;
+ lutIndex |= !opCode.Gpr28().IsConst ? 2 : 0;
- if (LutIndex == 0)
+ if (lutIndex == 0)
{
//Both destination registers are RZ, do nothing.
return;
}
- bool Fp16 = !OpCode.Read(59);
+ bool fp16 = !opCode.Read(59);
- int DstIncrement = 0;
+ int dstIncrement = 0;
ShaderIrOperGpr GetDst()
{
- ShaderIrOperGpr Dst;
+ ShaderIrOperGpr dst;
- if (Fp16)
+ if (fp16)
{
//FP16 mode, two components are packed on the two
//halfs of a 32-bits register, as two half-float values.
- int HalfPart = DstIncrement & 1;
+ int halfPart = dstIncrement & 1;
- switch (LutIndex)
+ switch (lutIndex)
{
- case 1: Dst = OpCode.GprHalf0(HalfPart); break;
- case 2: Dst = OpCode.GprHalf28(HalfPart); break;
- case 3: Dst = (DstIncrement >> 1) != 0
- ? OpCode.GprHalf28(HalfPart)
- : OpCode.GprHalf0(HalfPart); break;
+ case 1: dst = opCode.GprHalf0(halfPart); break;
+ case 2: dst = opCode.GprHalf28(halfPart); break;
+ case 3: dst = (dstIncrement >> 1) != 0
+ ? opCode.GprHalf28(halfPart)
+ : opCode.GprHalf0(halfPart); break;
default: throw new InvalidOperationException();
}
@@ -667,210 +669,210 @@ namespace Ryujinx.Graphics.Gal.Shader
{
//32-bits mode, each component uses one register.
//Two components uses two consecutive registers.
- switch (LutIndex)
+ switch (lutIndex)
{
- case 1: Dst = OpCode.Gpr0(); break;
- case 2: Dst = OpCode.Gpr28(); break;
- case 3: Dst = (DstIncrement >> 1) != 0
- ? OpCode.Gpr28()
- : OpCode.Gpr0(); break;
+ case 1: dst = opCode.Gpr0(); break;
+ case 2: dst = opCode.Gpr28(); break;
+ case 3: dst = (dstIncrement >> 1) != 0
+ ? opCode.Gpr28()
+ : opCode.Gpr0(); break;
default: throw new InvalidOperationException();
}
- Dst.Index += DstIncrement & 1;
+ dst.Index += dstIncrement & 1;
}
- DstIncrement++;
+ dstIncrement++;
- return Dst;
+ return dst;
}
- int ChMask = MaskLut[LutIndex, OpCode.Read(50, 7)];
+ int chMask = _maskLut[lutIndex, opCode.Read(50, 7)];
- if (ChMask == 0)
+ if (chMask == 0)
{
//All channels are disabled, do nothing.
return;
}
- ShaderIrNode OperC = OpCode.Imm13_36();
- Coords = CoordsRegistersToTempRegisters(Block, Coords);
+ ShaderIrNode operC = opCode.Imm13_36();
+ coords = CoordsRegistersToTempRegisters(block, coords);
- for (int Ch = 0; Ch < 4; Ch++)
+ for (int ch = 0; ch < 4; ch++)
{
- if (!IsChannelUsed(ChMask, Ch))
+ if (!IsChannelUsed(chMask, ch))
{
continue;
}
- ShaderIrMetaTex Meta = new ShaderIrMetaTex(Ch, TextureTarget, TextureInstructionSuffix, Coords)
+ ShaderIrMetaTex meta = new ShaderIrMetaTex(ch, textureTarget, textureInstructionSuffix, coords)
{
- LevelOfDetail = LevelOfDetail,
- Offset = Offset,
- DepthCompare = DepthCompare
+ LevelOfDetail = levelOfDetail,
+ Offset = offset,
+ DepthCompare = depthCompare
};
- ShaderIrOp Op = new ShaderIrOp(Inst, OperA, OperB, OperC, Meta);
+ ShaderIrOp op = new ShaderIrOp(inst, operA, operB, operC, meta);
- ShaderIrOperGpr Dst = GetDst();
+ ShaderIrOperGpr dst = GetDst();
- if (Dst.IsValidRegister && !Dst.IsConst)
+ if (dst.IsValidRegister && !dst.IsConst)
{
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(Dst, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(dst, op)));
}
}
}
- private static void EmitTld4(ShaderIrBlock Block, long OpCode, GalTextureTarget TextureType, TextureInstructionSuffix TextureInstructionSuffix, int ChMask, int Component, bool Scalar)
+ private static void EmitTld4(ShaderIrBlock block, long opCode, GalTextureTarget textureType, TextureInstructionSuffix textureInstructionSuffix, int chMask, int component, bool scalar)
{
- ShaderIrOperGpr OperA = OpCode.Gpr8();
- ShaderIrOperGpr OperB = OpCode.Gpr20();
- ShaderIrOperImm OperC = OpCode.Imm13_36();
+ ShaderIrOperGpr operA = opCode.Gpr8();
+ ShaderIrOperGpr operB = opCode.Gpr20();
+ ShaderIrOperImm operC = opCode.Imm13_36();
- ShaderIrOperGpr[] Coords = new ShaderIrOperGpr[ImageUtils.GetCoordsCountTextureTarget(TextureType)];
+ ShaderIrOperGpr[] coords = new ShaderIrOperGpr[ImageUtils.GetCoordsCountTextureTarget(textureType)];
- ShaderIrOperGpr Offset = null;
- ShaderIrOperGpr DepthCompare = null;
+ ShaderIrOperGpr offset = null;
+ ShaderIrOperGpr depthCompare = null;
- bool IsArray = ImageUtils.IsArray(TextureType);
+ bool isArray = ImageUtils.IsArray(textureType);
- int OperBIndex = 0;
+ int operBIndex = 0;
- if (Scalar)
+ if (scalar)
{
- int CoordStartIndex = 0;
+ int coordStartIndex = 0;
- if (IsArray)
+ if (isArray)
{
- CoordStartIndex++;
- Coords[Coords.Length - 1] = OperB;
+ coordStartIndex++;
+ coords[coords.Length - 1] = operB;
}
- switch (Coords.Length - CoordStartIndex)
+ switch (coords.Length - coordStartIndex)
{
case 1:
- Coords[0] = OpCode.Gpr8();
+ coords[0] = opCode.Gpr8();
break;
case 2:
- Coords[0] = OpCode.Gpr8();
- Coords[0].Index += CoordStartIndex;
+ coords[0] = opCode.Gpr8();
+ coords[0].Index += coordStartIndex;
break;
case 3:
- Coords[0] = OpCode.Gpr8();
- Coords[0].Index += CoordStartIndex;
+ coords[0] = opCode.Gpr8();
+ coords[0].Index += coordStartIndex;
- Coords[1] = OpCode.Gpr8();
- Coords[1].Index += 1 + CoordStartIndex;
+ coords[1] = opCode.Gpr8();
+ coords[1].Index += 1 + coordStartIndex;
break;
default:
- throw new NotSupportedException($"{Coords.Length - CoordStartIndex} coords textures aren't supported in TLD4S");
+ throw new NotSupportedException($"{coords.Length - coordStartIndex} coords textures aren't supported in TLD4S");
}
- if (Coords.Length - CoordStartIndex != 1)
+ if (coords.Length - coordStartIndex != 1)
{
- Coords[Coords.Length - CoordStartIndex - 1] = OperB;
- OperBIndex++;
+ coords[coords.Length - coordStartIndex - 1] = operB;
+ operBIndex++;
}
- if (TextureInstructionSuffix != TextureInstructionSuffix.None && TextureType == GalTextureTarget.TwoD)
+ if (textureInstructionSuffix != TextureInstructionSuffix.None && textureType == GalTextureTarget.TwoD)
{
- Coords[Coords.Length - CoordStartIndex - 1] = OpCode.Gpr8();
- Coords[Coords.Length - CoordStartIndex - 1].Index += Coords.Length - CoordStartIndex - 1;
- OperBIndex--;
+ coords[coords.Length - coordStartIndex - 1] = opCode.Gpr8();
+ coords[coords.Length - coordStartIndex - 1].Index += coords.Length - coordStartIndex - 1;
+ operBIndex--;
}
}
else
{
- int IndexExtraCoord = 0;
+ int indexExtraCoord = 0;
- if (IsArray)
+ if (isArray)
{
- IndexExtraCoord++;
+ indexExtraCoord++;
- Coords[Coords.Length - 1] = OpCode.Gpr8();
+ coords[coords.Length - 1] = opCode.Gpr8();
}
- for (int Index = 0; Index < Coords.Length - IndexExtraCoord; Index++)
+ for (int index = 0; index < coords.Length - indexExtraCoord; index++)
{
- Coords[Index] = OpCode.Gpr8();
+ coords[index] = opCode.Gpr8();
- Coords[Index].Index += Index;
+ coords[index].Index += index;
- Coords[Index].Index += IndexExtraCoord;
+ coords[index].Index += indexExtraCoord;
- if (Coords[Index].Index > ShaderIrOperGpr.ZRIndex)
+ if (coords[index].Index > ShaderIrOperGpr.ZrIndex)
{
- Coords[Index].Index = ShaderIrOperGpr.ZRIndex;
+ coords[index].Index = ShaderIrOperGpr.ZrIndex;
}
}
}
- if ((TextureInstructionSuffix & TextureInstructionSuffix.AOffI) != 0)
+ if ((textureInstructionSuffix & TextureInstructionSuffix.AOffI) != 0)
{
- Offset = OpCode.Gpr20();
- Offset.Index += OperBIndex;
- OperBIndex++;
+ offset = opCode.Gpr20();
+ offset.Index += operBIndex;
+ operBIndex++;
}
- if ((TextureInstructionSuffix & TextureInstructionSuffix.DC) != 0)
+ if ((textureInstructionSuffix & TextureInstructionSuffix.Dc) != 0)
{
- DepthCompare = OpCode.Gpr20();
- DepthCompare.Index += OperBIndex;
- OperBIndex++;
+ depthCompare = opCode.Gpr20();
+ depthCompare.Index += operBIndex;
+ operBIndex++;
}
- Coords = CoordsRegistersToTempRegisters(Block, Coords);
+ coords = CoordsRegistersToTempRegisters(block, coords);
- int RegInc = 0;
+ int regInc = 0;
- for (int Ch = 0; Ch < 4; Ch++)
+ for (int ch = 0; ch < 4; ch++)
{
- if (!IsChannelUsed(ChMask, Ch))
+ if (!IsChannelUsed(chMask, ch))
{
continue;
}
- ShaderIrOperGpr Dst = OpCode.Gpr0();
+ ShaderIrOperGpr dst = opCode.Gpr0();
- Dst.Index += RegInc++;
+ dst.Index += regInc++;
- if (!Dst.IsValidRegister || Dst.IsConst)
+ if (!dst.IsValidRegister || dst.IsConst)
{
continue;
}
- ShaderIrMetaTex Meta = new ShaderIrMetaTex(Ch, TextureType, TextureInstructionSuffix, Coords)
+ ShaderIrMetaTex meta = new ShaderIrMetaTex(ch, textureType, textureInstructionSuffix, coords)
{
- Component = Component,
- Offset = Offset,
- DepthCompare = DepthCompare
+ Component = component,
+ Offset = offset,
+ DepthCompare = depthCompare
};
- ShaderIrOp Op = new ShaderIrOp(ShaderIrInst.Tld4, OperA, OperB, OperC, Meta);
+ ShaderIrOp op = new ShaderIrOp(ShaderIrInst.Tld4, operA, operB, operC, meta);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(Dst, Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(dst, op)));
}
}
- private static bool IsChannelUsed(int ChMask, int Ch)
+ private static bool IsChannelUsed(int chMask, int ch)
{
- return (ChMask & (1 << Ch)) != 0;
+ return (chMask & (1 << ch)) != 0;
}
- private static ShaderIrOperGpr[] CoordsRegistersToTempRegisters(ShaderIrBlock Block, params ShaderIrOperGpr[] Registers)
+ private static ShaderIrOperGpr[] CoordsRegistersToTempRegisters(ShaderIrBlock block, params ShaderIrOperGpr[] registers)
{
- ShaderIrOperGpr[] Res = new ShaderIrOperGpr[Registers.Length];
+ ShaderIrOperGpr[] res = new ShaderIrOperGpr[registers.Length];
- for (int Index = 0; Index < Res.Length; Index++)
+ for (int index = 0; index < res.Length; index++)
{
- Res[Index] = ShaderIrOperGpr.MakeTemporary(Index);
- Block.AddNode(new ShaderIrAsg(Res[Index], Registers[Index]));
+ res[index] = ShaderIrOperGpr.MakeTemporary(index);
+ block.AddNode(new ShaderIrAsg(res[index], registers[index]));
}
- return Res;
+ return res;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs
index cd602db7..0a2b4232 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs
@@ -25,400 +25,400 @@ namespace Ryujinx.Graphics.Gal.Shader
F64 = 3
}
- public static void F2f_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void F2f_C(ShaderIrBlock block, long opCode, int position)
{
- EmitF2f(Block, OpCode, ShaderOper.CR);
+ EmitF2F(block, opCode, ShaderOper.Cr);
}
- public static void F2f_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void F2f_I(ShaderIrBlock block, long opCode, int position)
{
- EmitF2f(Block, OpCode, ShaderOper.Immf);
+ EmitF2F(block, opCode, ShaderOper.Immf);
}
- public static void F2f_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void F2f_R(ShaderIrBlock block, long opCode, int position)
{
- EmitF2f(Block, OpCode, ShaderOper.RR);
+ EmitF2F(block, opCode, ShaderOper.Rr);
}
- public static void F2i_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void F2i_C(ShaderIrBlock block, long opCode, int position)
{
- EmitF2i(Block, OpCode, ShaderOper.CR);
+ EmitF2I(block, opCode, ShaderOper.Cr);
}
- public static void F2i_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void F2i_I(ShaderIrBlock block, long opCode, int position)
{
- EmitF2i(Block, OpCode, ShaderOper.Immf);
+ EmitF2I(block, opCode, ShaderOper.Immf);
}
- public static void F2i_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void F2i_R(ShaderIrBlock block, long opCode, int position)
{
- EmitF2i(Block, OpCode, ShaderOper.RR);
+ EmitF2I(block, opCode, ShaderOper.Rr);
}
- public static void I2f_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void I2f_C(ShaderIrBlock block, long opCode, int position)
{
- EmitI2f(Block, OpCode, ShaderOper.CR);
+ EmitI2F(block, opCode, ShaderOper.Cr);
}
- public static void I2f_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void I2f_I(ShaderIrBlock block, long opCode, int position)
{
- EmitI2f(Block, OpCode, ShaderOper.Imm);
+ EmitI2F(block, opCode, ShaderOper.Imm);
}
- public static void I2f_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void I2f_R(ShaderIrBlock block, long opCode, int position)
{
- EmitI2f(Block, OpCode, ShaderOper.RR);
+ EmitI2F(block, opCode, ShaderOper.Rr);
}
- public static void I2i_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void I2i_C(ShaderIrBlock block, long opCode, int position)
{
- EmitI2i(Block, OpCode, ShaderOper.CR);
+ EmitI2I(block, opCode, ShaderOper.Cr);
}
- public static void I2i_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void I2i_I(ShaderIrBlock block, long opCode, int position)
{
- EmitI2i(Block, OpCode, ShaderOper.Imm);
+ EmitI2I(block, opCode, ShaderOper.Imm);
}
- public static void I2i_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void I2i_R(ShaderIrBlock block, long opCode, int position)
{
- EmitI2i(Block, OpCode, ShaderOper.RR);
+ EmitI2I(block, opCode, ShaderOper.Rr);
}
- public static void Isberd(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Isberd(ShaderIrBlock block, long opCode, int position)
{
//This instruction seems to be used to translate from an address to a vertex index in a GS
//Stub it as such
- Block.AddNode(new ShaderIrCmnt("Stubbed."));
+ block.AddNode(new ShaderIrCmnt("Stubbed."));
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), OpCode.Gpr8())));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), opCode.Gpr8())));
}
- public static void Mov_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Mov_C(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrOperCbuf Cbuf = OpCode.Cbuf34();
+ ShaderIrOperCbuf cbuf = opCode.Cbuf34();
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Cbuf)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), cbuf)));
}
- public static void Mov_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Mov_I(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrOperImm Imm = OpCode.Imm19_20();
+ ShaderIrOperImm imm = opCode.Imm19_20();
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Imm)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), imm)));
}
- public static void Mov_I32(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Mov_I32(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrOperImm Imm = OpCode.Imm32_20();
+ ShaderIrOperImm imm = opCode.Imm32_20();
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Imm)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), imm)));
}
- public static void Mov_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Mov_R(ShaderIrBlock block, long opCode, int position)
{
- ShaderIrOperGpr Gpr = OpCode.Gpr20();
+ ShaderIrOperGpr gpr = opCode.Gpr20();
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Gpr)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), gpr)));
}
- public static void Sel_C(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Sel_C(ShaderIrBlock block, long opCode, int position)
{
- EmitSel(Block, OpCode, ShaderOper.CR);
+ EmitSel(block, opCode, ShaderOper.Cr);
}
- public static void Sel_I(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Sel_I(ShaderIrBlock block, long opCode, int position)
{
- EmitSel(Block, OpCode, ShaderOper.Imm);
+ EmitSel(block, opCode, ShaderOper.Imm);
}
- public static void Sel_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Sel_R(ShaderIrBlock block, long opCode, int position)
{
- EmitSel(Block, OpCode, ShaderOper.RR);
+ EmitSel(block, opCode, ShaderOper.Rr);
}
- public static void Mov_S(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Mov_S(ShaderIrBlock block, long opCode, int position)
{
- Block.AddNode(new ShaderIrCmnt("Stubbed."));
+ block.AddNode(new ShaderIrCmnt("Stubbed."));
//Zero is used as a special number to get a valid "0 * 0 + VertexIndex" in a GS
- ShaderIrNode Source = new ShaderIrOperImm(0);
+ ShaderIrNode source = new ShaderIrOperImm(0);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Source)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), source)));
}
- private static void EmitF2f(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitF2F(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- bool NegA = OpCode.Read(45);
- bool AbsA = OpCode.Read(49);
+ bool negA = opCode.Read(45);
+ bool absA = opCode.Read(49);
- ShaderIrNode OperA;
+ ShaderIrNode operA;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperA = OpCode.Cbuf34(); break;
- case ShaderOper.Immf: OperA = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperA = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operA = opCode.Cbuf34(); break;
+ case ShaderOper.Immf: operA = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operA = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperA = GetAluFabsFneg(OperA, AbsA, NegA);
+ operA = GetAluFabsFneg(operA, absA, negA);
- ShaderIrInst RoundInst = GetRoundInst(OpCode);
+ ShaderIrInst roundInst = GetRoundInst(opCode);
- if (RoundInst != ShaderIrInst.Invalid)
+ if (roundInst != ShaderIrInst.Invalid)
{
- OperA = new ShaderIrOp(RoundInst, OperA);
+ operA = new ShaderIrOp(roundInst, operA);
}
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), OperA)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), operA)));
}
- private static void EmitF2i(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitF2I(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- IntType Type = GetIntType(OpCode);
+ IntType type = GetIntType(opCode);
- if (Type == IntType.U64 ||
- Type == IntType.S64)
+ if (type == IntType.U64 ||
+ type == IntType.S64)
{
//TODO: 64-bits support.
//Note: GLSL doesn't support 64-bits integers.
throw new NotImplementedException();
}
- bool NegA = OpCode.Read(45);
- bool AbsA = OpCode.Read(49);
+ bool negA = opCode.Read(45);
+ bool absA = opCode.Read(49);
- ShaderIrNode OperA;
+ ShaderIrNode operA;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperA = OpCode.Cbuf34(); break;
- case ShaderOper.Immf: OperA = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperA = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operA = opCode.Cbuf34(); break;
+ case ShaderOper.Immf: operA = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operA = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperA = GetAluFabsFneg(OperA, AbsA, NegA);
+ operA = GetAluFabsFneg(operA, absA, negA);
- ShaderIrInst RoundInst = GetRoundInst(OpCode);
+ ShaderIrInst roundInst = GetRoundInst(opCode);
- if (RoundInst != ShaderIrInst.Invalid)
+ if (roundInst != ShaderIrInst.Invalid)
{
- OperA = new ShaderIrOp(RoundInst, OperA);
+ operA = new ShaderIrOp(roundInst, operA);
}
- bool Signed = Type >= IntType.S8;
+ bool signed = type >= IntType.S8;
- int Size = 8 << ((int)Type & 3);
+ int size = 8 << ((int)type & 3);
- if (Size < 32)
+ if (size < 32)
{
- uint Mask = uint.MaxValue >> (32 - Size);
+ uint mask = uint.MaxValue >> (32 - size);
- float CMin = 0;
- float CMax = Mask;
+ float cMin = 0;
+ float cMax = mask;
- if (Signed)
+ if (signed)
{
- uint HalfMask = Mask >> 1;
+ uint halfMask = mask >> 1;
- CMin -= HalfMask + 1;
- CMax = HalfMask;
+ cMin -= halfMask + 1;
+ cMax = halfMask;
}
- ShaderIrOperImmf IMin = new ShaderIrOperImmf(CMin);
- ShaderIrOperImmf IMax = new ShaderIrOperImmf(CMax);
+ ShaderIrOperImmf min = new ShaderIrOperImmf(cMin);
+ ShaderIrOperImmf max = new ShaderIrOperImmf(cMax);
- OperA = new ShaderIrOp(ShaderIrInst.Fclamp, OperA, IMin, IMax);
+ operA = new ShaderIrOp(ShaderIrInst.Fclamp, operA, min, max);
}
- ShaderIrInst Inst = Signed
+ ShaderIrInst inst = signed
? ShaderIrInst.Ftos
: ShaderIrInst.Ftou;
- ShaderIrNode Op = new ShaderIrOp(Inst, OperA);
+ ShaderIrNode op = new ShaderIrOp(inst, operA);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- private static void EmitI2f(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitI2F(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- IntType Type = GetIntType(OpCode);
+ IntType type = GetIntType(opCode);
- if (Type == IntType.U64 ||
- Type == IntType.S64)
+ if (type == IntType.U64 ||
+ type == IntType.S64)
{
//TODO: 64-bits support.
//Note: GLSL doesn't support 64-bits integers.
throw new NotImplementedException();
}
- int Sel = OpCode.Read(41, 3);
+ int sel = opCode.Read(41, 3);
- bool NegA = OpCode.Read(45);
- bool AbsA = OpCode.Read(49);
+ bool negA = opCode.Read(45);
+ bool absA = opCode.Read(49);
- ShaderIrNode OperA;
+ ShaderIrNode operA;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperA = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: OperA = OpCode.Imm19_20(); break;
- case ShaderOper.RR: OperA = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operA = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: operA = opCode.Imm19_20(); break;
+ case ShaderOper.Rr: operA = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperA = GetAluIabsIneg(OperA, AbsA, NegA);
+ operA = GetAluIabsIneg(operA, absA, negA);
- bool Signed = Type >= IntType.S8;
+ bool signed = type >= IntType.S8;
- int Shift = Sel * 8;
+ int shift = sel * 8;
- int Size = 8 << ((int)Type & 3);
+ int size = 8 << ((int)type & 3);
- if (Shift != 0)
+ if (shift != 0)
{
- OperA = new ShaderIrOp(ShaderIrInst.Asr, OperA, new ShaderIrOperImm(Shift));
+ operA = new ShaderIrOp(ShaderIrInst.Asr, operA, new ShaderIrOperImm(shift));
}
- if (Size < 32)
+ if (size < 32)
{
- OperA = ExtendTo32(OperA, Signed, Size);
+ operA = ExtendTo32(operA, signed, size);
}
- ShaderIrInst Inst = Signed
+ ShaderIrInst inst = signed
? ShaderIrInst.Stof
: ShaderIrInst.Utof;
- ShaderIrNode Op = new ShaderIrOp(Inst, OperA);
+ ShaderIrNode op = new ShaderIrOp(inst, operA);
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op)));
}
- private static void EmitI2i(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitI2I(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- IntType Type = GetIntType(OpCode);
+ IntType type = GetIntType(opCode);
- if (Type == IntType.U64 ||
- Type == IntType.S64)
+ if (type == IntType.U64 ||
+ type == IntType.S64)
{
//TODO: 64-bits support.
//Note: GLSL doesn't support 64-bits integers.
throw new NotImplementedException();
}
- int Sel = OpCode.Read(41, 3);
+ int sel = opCode.Read(41, 3);
- bool NegA = OpCode.Read(45);
- bool AbsA = OpCode.Read(49);
- bool SatA = OpCode.Read(50);
+ bool negA = opCode.Read(45);
+ bool absA = opCode.Read(49);
+ bool satA = opCode.Read(50);
- ShaderIrNode OperA;
+ ShaderIrNode operA;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: OperA = OpCode.Cbuf34(); break;
- case ShaderOper.Immf: OperA = OpCode.Immf19_20(); break;
- case ShaderOper.RR: OperA = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: operA = opCode.Cbuf34(); break;
+ case ShaderOper.Immf: operA = opCode.Immf19_20(); break;
+ case ShaderOper.Rr: operA = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- OperA = GetAluIabsIneg(OperA, AbsA, NegA);
+ operA = GetAluIabsIneg(operA, absA, negA);
- bool Signed = Type >= IntType.S8;
+ bool signed = type >= IntType.S8;
- int Shift = Sel * 8;
+ int shift = sel * 8;
- int Size = 8 << ((int)Type & 3);
+ int size = 8 << ((int)type & 3);
- if (Shift != 0)
+ if (shift != 0)
{
- OperA = new ShaderIrOp(ShaderIrInst.Asr, OperA, new ShaderIrOperImm(Shift));
+ operA = new ShaderIrOp(ShaderIrInst.Asr, operA, new ShaderIrOperImm(shift));
}
- if (Size < 32)
+ if (size < 32)
{
- uint Mask = uint.MaxValue >> (32 - Size);
+ uint mask = uint.MaxValue >> (32 - size);
- if (SatA)
+ if (satA)
{
- uint CMin = 0;
- uint CMax = Mask;
+ uint cMin = 0;
+ uint cMax = mask;
- if (Signed)
+ if (signed)
{
- uint HalfMask = Mask >> 1;
+ uint halfMask = mask >> 1;
- CMin -= HalfMask + 1;
- CMax = HalfMask;
+ cMin -= halfMask + 1;
+ cMax = halfMask;
}
- ShaderIrOperImm IMin = new ShaderIrOperImm((int)CMin);
- ShaderIrOperImm IMax = new ShaderIrOperImm((int)CMax);
+ ShaderIrOperImm min = new ShaderIrOperImm((int)cMin);
+ ShaderIrOperImm max = new ShaderIrOperImm((int)cMax);
- OperA = new ShaderIrOp(Signed
+ operA = new ShaderIrOp(signed
? ShaderIrInst.Clamps
- : ShaderIrInst.Clampu, OperA, IMin, IMax);
+ : ShaderIrInst.Clampu, operA, min, max);
}
else
{
- OperA = ExtendTo32(OperA, Signed, Size);
+ operA = ExtendTo32(operA, signed, size);
}
}
- Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), OperA)));
+ block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), operA)));
}
- private static void EmitSel(ShaderIrBlock Block, long OpCode, ShaderOper Oper)
+ private static void EmitSel(ShaderIrBlock block, long opCode, ShaderOper oper)
{
- ShaderIrOperGpr Dst = OpCode.Gpr0();
- ShaderIrNode Pred = OpCode.Pred39N();
+ ShaderIrOperGpr dst = opCode.Gpr0();
+ ShaderIrNode pred = opCode.Pred39N();
- ShaderIrNode ResultA = OpCode.Gpr8();
- ShaderIrNode ResultB;
+ ShaderIrNode resultA = opCode.Gpr8();
+ ShaderIrNode resultB;
- switch (Oper)
+ switch (oper)
{
- case ShaderOper.CR: ResultB = OpCode.Cbuf34(); break;
- case ShaderOper.Imm: ResultB = OpCode.Imm19_20(); break;
- case ShaderOper.RR: ResultB = OpCode.Gpr20(); break;
+ case ShaderOper.Cr: resultB = opCode.Cbuf34(); break;
+ case ShaderOper.Imm: resultB = opCode.Imm19_20(); break;
+ case ShaderOper.Rr: resultB = opCode.Gpr20(); break;
- default: throw new ArgumentException(nameof(Oper));
+ default: throw new ArgumentException(nameof(oper));
}
- Block.AddNode(OpCode.PredNode(new ShaderIrCond(Pred, new ShaderIrAsg(Dst, ResultA), false)));
+ block.AddNode(opCode.PredNode(new ShaderIrCond(pred, new ShaderIrAsg(dst, resultA), false)));
- Block.AddNode(OpCode.PredNode(new ShaderIrCond(Pred, new ShaderIrAsg(Dst, ResultB), true)));
+ block.AddNode(opCode.PredNode(new ShaderIrCond(pred, new ShaderIrAsg(dst, resultB), true)));
}
- private static IntType GetIntType(long OpCode)
+ private static IntType GetIntType(long opCode)
{
- bool Signed = OpCode.Read(13);
+ bool signed = opCode.Read(13);
- IntType Type = (IntType)(OpCode.Read(10, 3));
+ IntType type = (IntType)(opCode.Read(10, 3));
- if (Signed)
+ if (signed)
{
- Type += (int)IntType.S8;
+ type += (int)IntType.S8;
}
- return Type;
+ return type;
}
- private static FloatType GetFloatType(long OpCode)
+ private static FloatType GetFloatType(long opCode)
{
- return (FloatType)(OpCode.Read(8, 3));
+ return (FloatType)(opCode.Read(8, 3));
}
- private static ShaderIrInst GetRoundInst(long OpCode)
+ private static ShaderIrInst GetRoundInst(long opCode)
{
- switch (OpCode.Read(39, 3))
+ switch (opCode.Read(39, 3))
{
case 1: return ShaderIrInst.Floor;
case 2: return ShaderIrInst.Ceil;
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeOpCode.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeOpCode.cs
index e241e1ca..4b1e4046 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeOpCode.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeOpCode.cs
@@ -4,227 +4,227 @@ namespace Ryujinx.Graphics.Gal.Shader
{
static partial class ShaderDecode
{
- private static int Read(this long OpCode, int Position, int Mask)
+ private static int Read(this long opCode, int position, int mask)
{
- return (int)(OpCode >> Position) & Mask;
+ return (int)(opCode >> position) & mask;
}
- private static bool Read(this long OpCode, int Position)
+ private static bool Read(this long opCode, int position)
{
- return ((OpCode >> Position) & 1) != 0;
+ return ((opCode >> position) & 1) != 0;
}
- private static int Branch(this long OpCode)
+ private static int Branch(this long opCode)
{
- return ((int)(OpCode >> 20) << 8) >> 8;
+ return ((int)(opCode >> 20) << 8) >> 8;
}
- private static bool HasArray(this long OpCode)
+ private static bool HasArray(this long opCode)
{
- return OpCode.Read(0x1c);
+ return opCode.Read(0x1c);
}
- private static ShaderIrOperAbuf[] Abuf20(this long OpCode)
+ private static ShaderIrOperAbuf[] Abuf20(this long opCode)
{
- int Abuf = OpCode.Read(20, 0x3ff);
- int Size = OpCode.Read(47, 3);
+ int abuf = opCode.Read(20, 0x3ff);
+ int size = opCode.Read(47, 3);
- ShaderIrOperGpr Vertex = OpCode.Gpr39();
+ ShaderIrOperGpr vertex = opCode.Gpr39();
- ShaderIrOperAbuf[] Opers = new ShaderIrOperAbuf[Size + 1];
+ ShaderIrOperAbuf[] opers = new ShaderIrOperAbuf[size + 1];
- for (int Index = 0; Index <= Size; Index++)
+ for (int index = 0; index <= size; index++)
{
- Opers[Index] = new ShaderIrOperAbuf(Abuf + Index * 4, Vertex);
+ opers[index] = new ShaderIrOperAbuf(abuf + index * 4, vertex);
}
- return Opers;
+ return opers;
}
- private static ShaderIrOperAbuf Abuf28(this long OpCode)
+ private static ShaderIrOperAbuf Abuf28(this long opCode)
{
- int Abuf = OpCode.Read(28, 0x3ff);
+ int abuf = opCode.Read(28, 0x3ff);
- return new ShaderIrOperAbuf(Abuf, OpCode.Gpr39());
+ return new ShaderIrOperAbuf(abuf, opCode.Gpr39());
}
- private static ShaderIrOperCbuf Cbuf34(this long OpCode)
+ private static ShaderIrOperCbuf Cbuf34(this long opCode)
{
return new ShaderIrOperCbuf(
- OpCode.Read(34, 0x1f),
- OpCode.Read(20, 0x3fff));
+ opCode.Read(34, 0x1f),
+ opCode.Read(20, 0x3fff));
}
- private static ShaderIrOperGpr Gpr8(this long OpCode)
+ private static ShaderIrOperGpr Gpr8(this long opCode)
{
- return new ShaderIrOperGpr(OpCode.Read(8, 0xff));
+ return new ShaderIrOperGpr(opCode.Read(8, 0xff));
}
- private static ShaderIrOperGpr Gpr20(this long OpCode)
+ private static ShaderIrOperGpr Gpr20(this long opCode)
{
- return new ShaderIrOperGpr(OpCode.Read(20, 0xff));
+ return new ShaderIrOperGpr(opCode.Read(20, 0xff));
}
- private static ShaderIrOperGpr Gpr39(this long OpCode)
+ private static ShaderIrOperGpr Gpr39(this long opCode)
{
- return new ShaderIrOperGpr(OpCode.Read(39, 0xff));
+ return new ShaderIrOperGpr(opCode.Read(39, 0xff));
}
- private static ShaderIrOperGpr Gpr0(this long OpCode)
+ private static ShaderIrOperGpr Gpr0(this long opCode)
{
- return new ShaderIrOperGpr(OpCode.Read(0, 0xff));
+ return new ShaderIrOperGpr(opCode.Read(0, 0xff));
}
- private static ShaderIrOperGpr Gpr28(this long OpCode)
+ private static ShaderIrOperGpr Gpr28(this long opCode)
{
- return new ShaderIrOperGpr(OpCode.Read(28, 0xff));
+ return new ShaderIrOperGpr(opCode.Read(28, 0xff));
}
- private static ShaderIrOperGpr[] GprHalfVec8(this long OpCode)
+ private static ShaderIrOperGpr[] GprHalfVec8(this long opCode)
{
- return GetGprHalfVec2(OpCode.Read(8, 0xff), OpCode.Read(47, 3));
+ return GetGprHalfVec2(opCode.Read(8, 0xff), opCode.Read(47, 3));
}
- private static ShaderIrOperGpr[] GprHalfVec20(this long OpCode)
+ private static ShaderIrOperGpr[] GprHalfVec20(this long opCode)
{
- return GetGprHalfVec2(OpCode.Read(20, 0xff), OpCode.Read(28, 3));
+ return GetGprHalfVec2(opCode.Read(20, 0xff), opCode.Read(28, 3));
}
- private static ShaderIrOperGpr[] GetGprHalfVec2(int Gpr, int Mask)
+ private static ShaderIrOperGpr[] GetGprHalfVec2(int gpr, int mask)
{
- if (Mask == 1)
+ if (mask == 1)
{
//This value is used for FP32, the whole 32-bits register
//is used as each element on the vector.
return new ShaderIrOperGpr[]
{
- new ShaderIrOperGpr(Gpr),
- new ShaderIrOperGpr(Gpr)
+ new ShaderIrOperGpr(gpr),
+ new ShaderIrOperGpr(gpr)
};
}
- ShaderIrOperGpr Low = new ShaderIrOperGpr(Gpr, 0);
- ShaderIrOperGpr High = new ShaderIrOperGpr(Gpr, 1);
+ ShaderIrOperGpr low = new ShaderIrOperGpr(gpr, 0);
+ ShaderIrOperGpr high = new ShaderIrOperGpr(gpr, 1);
return new ShaderIrOperGpr[]
{
- (Mask & 1) != 0 ? High : Low,
- (Mask & 2) != 0 ? High : Low
+ (mask & 1) != 0 ? high : low,
+ (mask & 2) != 0 ? high : low
};
}
- private static ShaderIrOperGpr GprHalf0(this long OpCode, int HalfPart)
+ private static ShaderIrOperGpr GprHalf0(this long opCode, int halfPart)
{
- return new ShaderIrOperGpr(OpCode.Read(0, 0xff), HalfPart);
+ return new ShaderIrOperGpr(opCode.Read(0, 0xff), halfPart);
}
- private static ShaderIrOperGpr GprHalf28(this long OpCode, int HalfPart)
+ private static ShaderIrOperGpr GprHalf28(this long opCode, int halfPart)
{
- return new ShaderIrOperGpr(OpCode.Read(28, 0xff), HalfPart);
+ return new ShaderIrOperGpr(opCode.Read(28, 0xff), halfPart);
}
- private static ShaderIrOperImm Imm5_39(this long OpCode)
+ private static ShaderIrOperImm Imm5_39(this long opCode)
{
- return new ShaderIrOperImm(OpCode.Read(39, 0x1f));
+ return new ShaderIrOperImm(opCode.Read(39, 0x1f));
}
- private static ShaderIrOperImm Imm13_36(this long OpCode)
+ private static ShaderIrOperImm Imm13_36(this long opCode)
{
- return new ShaderIrOperImm(OpCode.Read(36, 0x1fff));
+ return new ShaderIrOperImm(opCode.Read(36, 0x1fff));
}
- private static ShaderIrOperImm Imm32_20(this long OpCode)
+ private static ShaderIrOperImm Imm32_20(this long opCode)
{
- return new ShaderIrOperImm((int)(OpCode >> 20));
+ return new ShaderIrOperImm((int)(opCode >> 20));
}
- private static ShaderIrOperImmf Immf32_20(this long OpCode)
+ private static ShaderIrOperImmf Immf32_20(this long opCode)
{
- return new ShaderIrOperImmf(BitConverter.Int32BitsToSingle((int)(OpCode >> 20)));
+ return new ShaderIrOperImmf(BitConverter.Int32BitsToSingle((int)(opCode >> 20)));
}
- private static ShaderIrOperImm ImmU16_20(this long OpCode)
+ private static ShaderIrOperImm ImmU16_20(this long opCode)
{
- return new ShaderIrOperImm(OpCode.Read(20, 0xffff));
+ return new ShaderIrOperImm(opCode.Read(20, 0xffff));
}
- private static ShaderIrOperImm Imm19_20(this long OpCode)
+ private static ShaderIrOperImm Imm19_20(this long opCode)
{
- int Value = OpCode.Read(20, 0x7ffff);
+ int value = opCode.Read(20, 0x7ffff);
- bool Neg = OpCode.Read(56);
+ bool neg = opCode.Read(56);
- if (Neg)
+ if (neg)
{
- Value = -Value;
+ value = -value;
}
- return new ShaderIrOperImm(Value);
+ return new ShaderIrOperImm(value);
}
- private static ShaderIrOperImmf Immf19_20(this long OpCode)
+ private static ShaderIrOperImmf Immf19_20(this long opCode)
{
- uint Imm = (uint)(OpCode >> 20) & 0x7ffff;
+ uint imm = (uint)(opCode >> 20) & 0x7ffff;
- bool Neg = OpCode.Read(56);
+ bool neg = opCode.Read(56);
- Imm <<= 12;
+ imm <<= 12;
- if (Neg)
+ if (neg)
{
- Imm |= 0x80000000;
+ imm |= 0x80000000;
}
- float Value = BitConverter.Int32BitsToSingle((int)Imm);
+ float value = BitConverter.Int32BitsToSingle((int)imm);
- return new ShaderIrOperImmf(Value);
+ return new ShaderIrOperImmf(value);
}
- private static ShaderIrOperPred Pred0(this long OpCode)
+ private static ShaderIrOperPred Pred0(this long opCode)
{
- return new ShaderIrOperPred(OpCode.Read(0, 7));
+ return new ShaderIrOperPred(opCode.Read(0, 7));
}
- private static ShaderIrOperPred Pred3(this long OpCode)
+ private static ShaderIrOperPred Pred3(this long opCode)
{
- return new ShaderIrOperPred(OpCode.Read(3, 7));
+ return new ShaderIrOperPred(opCode.Read(3, 7));
}
- private static ShaderIrOperPred Pred12(this long OpCode)
+ private static ShaderIrOperPred Pred12(this long opCode)
{
- return new ShaderIrOperPred(OpCode.Read(12, 7));
+ return new ShaderIrOperPred(opCode.Read(12, 7));
}
- private static ShaderIrOperPred Pred29(this long OpCode)
+ private static ShaderIrOperPred Pred29(this long opCode)
{
- return new ShaderIrOperPred(OpCode.Read(29, 7));
+ return new ShaderIrOperPred(opCode.Read(29, 7));
}
- private static ShaderIrNode Pred39N(this long OpCode)
+ private static ShaderIrNode Pred39N(this long opCode)
{
- ShaderIrNode Node = OpCode.Pred39();
+ ShaderIrNode node = opCode.Pred39();
- if (OpCode.Read(42))
+ if (opCode.Read(42))
{
- Node = new ShaderIrOp(ShaderIrInst.Bnot, Node);
+ node = new ShaderIrOp(ShaderIrInst.Bnot, node);
}
- return Node;
+ return node;
}
- private static ShaderIrOperPred Pred39(this long OpCode)
+ private static ShaderIrOperPred Pred39(this long opCode)
{
- return new ShaderIrOperPred(OpCode.Read(39, 7));
+ return new ShaderIrOperPred(opCode.Read(39, 7));
}
- private static ShaderIrOperPred Pred48(this long OpCode)
+ private static ShaderIrOperPred Pred48(this long opCode)
{
- return new ShaderIrOperPred(OpCode.Read(48, 7));
+ return new ShaderIrOperPred(opCode.Read(48, 7));
}
- private static ShaderIrInst Cmp(this long OpCode)
+ private static ShaderIrInst Cmp(this long opCode)
{
- switch (OpCode.Read(49, 7))
+ switch (opCode.Read(49, 7))
{
case 1: return ShaderIrInst.Clt;
case 2: return ShaderIrInst.Ceq;
@@ -234,12 +234,12 @@ namespace Ryujinx.Graphics.Gal.Shader
case 6: return ShaderIrInst.Cge;
}
- throw new ArgumentException(nameof(OpCode));
+ throw new ArgumentException(nameof(opCode));
}
- private static ShaderIrInst CmpF(this long OpCode)
+ private static ShaderIrInst CmpF(this long opCode)
{
- switch (OpCode.Read(48, 0xf))
+ switch (opCode.Read(48, 0xf))
{
case 0x1: return ShaderIrInst.Fclt;
case 0x2: return ShaderIrInst.Fceq;
@@ -257,57 +257,57 @@ namespace Ryujinx.Graphics.Gal.Shader
case 0xe: return ShaderIrInst.Fcgeu;
}
- throw new ArgumentException(nameof(OpCode));
+ throw new ArgumentException(nameof(opCode));
}
- private static ShaderIrInst BLop45(this long OpCode)
+ private static ShaderIrInst BLop45(this long opCode)
{
- switch (OpCode.Read(45, 3))
+ switch (opCode.Read(45, 3))
{
case 0: return ShaderIrInst.Band;
case 1: return ShaderIrInst.Bor;
case 2: return ShaderIrInst.Bxor;
}
- throw new ArgumentException(nameof(OpCode));
+ throw new ArgumentException(nameof(opCode));
}
- private static ShaderIrInst BLop24(this long OpCode)
+ private static ShaderIrInst BLop24(this long opCode)
{
- switch (OpCode.Read(24, 3))
+ switch (opCode.Read(24, 3))
{
case 0: return ShaderIrInst.Band;
case 1: return ShaderIrInst.Bor;
case 2: return ShaderIrInst.Bxor;
}
- throw new ArgumentException(nameof(OpCode));
+ throw new ArgumentException(nameof(opCode));
}
- private static ShaderIrNode PredNode(this long OpCode, ShaderIrNode Node)
+ private static ShaderIrNode PredNode(this long opCode, ShaderIrNode node)
{
- ShaderIrOperPred Pred = OpCode.PredNode();
+ ShaderIrOperPred pred = opCode.PredNode();
- if (Pred.Index != ShaderIrOperPred.UnusedIndex)
+ if (pred.Index != ShaderIrOperPred.UnusedIndex)
{
- bool Inv = OpCode.Read(19);
+ bool inv = opCode.Read(19);
- Node = new ShaderIrCond(Pred, Node, Inv);
+ node = new ShaderIrCond(pred, node, inv);
}
- return Node;
+ return node;
}
- private static ShaderIrOperPred PredNode(this long OpCode)
+ private static ShaderIrOperPred PredNode(this long opCode)
{
- int Pred = OpCode.Read(16, 0xf);
+ int pred = opCode.Read(16, 0xf);
- if (Pred != 0xf)
+ if (pred != 0xf)
{
- Pred &= 7;
+ pred &= 7;
}
- return new ShaderIrOperPred(Pred);
+ return new ShaderIrOperPred(pred);
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeSpecial.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeSpecial.cs
index 35abdb76..9098ca5e 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeSpecial.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeSpecial.cs
@@ -2,23 +2,23 @@
{
static partial class ShaderDecode
{
- public static void Out_R(ShaderIrBlock Block, long OpCode, int Position)
+ public static void Out_R(ShaderIrBlock block, long opCode, int position)
{
//TODO: Those registers have to be used for something
- ShaderIrOperGpr Gpr0 = OpCode.Gpr0();
- ShaderIrOperGpr Gpr8 = OpCode.Gpr8();
- ShaderIrOperGpr Gpr20 = OpCode.Gpr20();
+ ShaderIrOperGpr gpr0 = opCode.Gpr0();
+ ShaderIrOperGpr gpr8 = opCode.Gpr8();
+ ShaderIrOperGpr gpr20 = opCode.Gpr20();
- int Type = OpCode.Read(39, 3);
+ int type = opCode.Read(39, 3);
- if ((Type & 1) != 0)
+ if ((type & 1) != 0)
{
- Block.AddNode(OpCode.PredNode(new ShaderIrOp(ShaderIrInst.Emit)));
+ block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Emit)));
}
- if ((Type & 2) != 0)
+ if ((type & 2) != 0)
{
- Block.AddNode(OpCode.PredNode(new ShaderIrOp(ShaderIrInst.Cut)));
+ block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Cut)));
}
}
}
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecoder.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecoder.cs
index f8c07f31..4b23f8d0 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderDecoder.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecoder.cs
@@ -8,74 +8,74 @@ namespace Ryujinx.Graphics.Gal.Shader
private const bool AddDbgComments = true;
- public static ShaderIrBlock[] Decode(IGalMemory Memory, long Start)
+ public static ShaderIrBlock[] Decode(IGalMemory memory, long start)
{
- Dictionary<int, ShaderIrBlock> Visited = new Dictionary<int, ShaderIrBlock>();
- Dictionary<int, ShaderIrBlock> VisitedEnd = new Dictionary<int, ShaderIrBlock>();
+ Dictionary<int, ShaderIrBlock> visited = new Dictionary<int, ShaderIrBlock>();
+ Dictionary<int, ShaderIrBlock> visitedEnd = new Dictionary<int, ShaderIrBlock>();
- Queue<ShaderIrBlock> Blocks = new Queue<ShaderIrBlock>();
+ Queue<ShaderIrBlock> blocks = new Queue<ShaderIrBlock>();
- long Beginning = Start + HeaderSize;
+ long beginning = start + HeaderSize;
- ShaderIrBlock Enqueue(int Position, ShaderIrBlock Source = null)
+ ShaderIrBlock Enqueue(int position, ShaderIrBlock source = null)
{
- if (!Visited.TryGetValue(Position, out ShaderIrBlock Output))
+ if (!visited.TryGetValue(position, out ShaderIrBlock output))
{
- Output = new ShaderIrBlock(Position);
+ output = new ShaderIrBlock(position);
- Blocks.Enqueue(Output);
+ blocks.Enqueue(output);
- Visited.Add(Position, Output);
+ visited.Add(position, output);
}
- if (Source != null)
+ if (source != null)
{
- Output.Sources.Add(Source);
+ output.Sources.Add(source);
}
- return Output;
+ return output;
}
- ShaderIrBlock Entry = Enqueue(0);
+ ShaderIrBlock entry = Enqueue(0);
- while (Blocks.Count > 0)
+ while (blocks.Count > 0)
{
- ShaderIrBlock Current = Blocks.Dequeue();
+ ShaderIrBlock current = blocks.Dequeue();
- FillBlock(Memory, Current, Beginning);
+ FillBlock(memory, current, beginning);
//Set child blocks. "Branch" is the block the branch instruction
//points to (when taken), "Next" is the block at the next address,
//executed when the branch is not taken. For Unconditional Branches
//or end of shader, Next is null.
- if (Current.Nodes.Count > 0)
+ if (current.Nodes.Count > 0)
{
- ShaderIrNode LastNode = Current.GetLastNode();
+ ShaderIrNode lastNode = current.GetLastNode();
- ShaderIrOp InnerOp = GetInnermostOp(LastNode);
+ ShaderIrOp innerOp = GetInnermostOp(lastNode);
- if (InnerOp?.Inst == ShaderIrInst.Bra)
+ if (innerOp?.Inst == ShaderIrInst.Bra)
{
- int Target = ((ShaderIrOperImm)InnerOp.OperandA).Value;
+ int target = ((ShaderIrOperImm)innerOp.OperandA).Value;
- Current.Branch = Enqueue(Target, Current);
+ current.Branch = Enqueue(target, current);
}
- foreach (ShaderIrNode Node in Current.Nodes)
+ foreach (ShaderIrNode node in current.Nodes)
{
- InnerOp = GetInnermostOp(Node);
+ innerOp = GetInnermostOp(node);
- if (InnerOp is ShaderIrOp CurrOp && CurrOp.Inst == ShaderIrInst.Ssy)
+ if (innerOp is ShaderIrOp currOp && currOp.Inst == ShaderIrInst.Ssy)
{
- int Target = ((ShaderIrOperImm)CurrOp.OperandA).Value;
+ int target = ((ShaderIrOperImm)currOp.OperandA).Value;
- Enqueue(Target, Current);
+ Enqueue(target, current);
}
}
- if (NodeHasNext(LastNode))
+ if (NodeHasNext(lastNode))
{
- Current.Next = Enqueue(Current.EndPosition);
+ current.Next = Enqueue(current.EndPosition);
}
}
@@ -83,136 +83,136 @@ namespace Ryujinx.Graphics.Gal.Shader
//then we need to split the bigger block and have two small blocks,
//the end position of the bigger "Current" block should then be == to
//the position of the "Smaller" block.
- while (VisitedEnd.TryGetValue(Current.EndPosition, out ShaderIrBlock Smaller))
+ while (visitedEnd.TryGetValue(current.EndPosition, out ShaderIrBlock smaller))
{
- if (Current.Position > Smaller.Position)
+ if (current.Position > smaller.Position)
{
- ShaderIrBlock Temp = Smaller;
+ ShaderIrBlock temp = smaller;
- Smaller = Current;
- Current = Temp;
+ smaller = current;
+ current = temp;
}
- Current.EndPosition = Smaller.Position;
- Current.Next = Smaller;
- Current.Branch = null;
+ current.EndPosition = smaller.Position;
+ current.Next = smaller;
+ current.Branch = null;
- Current.Nodes.RemoveRange(
- Current.Nodes.Count - Smaller.Nodes.Count,
- Smaller.Nodes.Count);
+ current.Nodes.RemoveRange(
+ current.Nodes.Count - smaller.Nodes.Count,
+ smaller.Nodes.Count);
- VisitedEnd[Smaller.EndPosition] = Smaller;
+ visitedEnd[smaller.EndPosition] = smaller;
}
- VisitedEnd.Add(Current.EndPosition, Current);
+ visitedEnd.Add(current.EndPosition, current);
}
//Make and sort Graph blocks array by position.
- ShaderIrBlock[] Graph = new ShaderIrBlock[Visited.Count];
+ ShaderIrBlock[] graph = new ShaderIrBlock[visited.Count];
- while (Visited.Count > 0)
+ while (visited.Count > 0)
{
- uint FirstPos = uint.MaxValue;
+ uint firstPos = uint.MaxValue;
- foreach (ShaderIrBlock Block in Visited.Values)
+ foreach (ShaderIrBlock block in visited.Values)
{
- if (FirstPos > (uint)Block.Position)
- FirstPos = (uint)Block.Position;
+ if (firstPos > (uint)block.Position)
+ firstPos = (uint)block.Position;
}
- ShaderIrBlock Current = Visited[(int)FirstPos];
+ ShaderIrBlock current = visited[(int)firstPos];
do
{
- Graph[Graph.Length - Visited.Count] = Current;
+ graph[graph.Length - visited.Count] = current;
- Visited.Remove(Current.Position);
+ visited.Remove(current.Position);
- Current = Current.Next;
+ current = current.Next;
}
- while (Current != null);
+ while (current != null);
}
- return Graph;
+ return graph;
}
- private static void FillBlock(IGalMemory Memory, ShaderIrBlock Block, long Beginning)
+ private static void FillBlock(IGalMemory memory, ShaderIrBlock block, long beginning)
{
- int Position = Block.Position;
+ int position = block.Position;
do
{
//Ignore scheduling instructions, which are written every 32 bytes.
- if ((Position & 0x1f) == 0)
+ if ((position & 0x1f) == 0)
{
- Position += 8;
+ position += 8;
continue;
}
- uint Word0 = (uint)Memory.ReadInt32(Position + Beginning + 0);
- uint Word1 = (uint)Memory.ReadInt32(Position + Beginning + 4);
+ uint word0 = (uint)memory.ReadInt32(position + beginning + 0);
+ uint word1 = (uint)memory.ReadInt32(position + beginning + 4);
- Position += 8;
+ position += 8;
- long OpCode = Word0 | (long)Word1 << 32;
+ long opCode = word0 | (long)word1 << 32;
- ShaderDecodeFunc Decode = ShaderOpCodeTable.GetDecoder(OpCode);
+ ShaderDecodeFunc decode = ShaderOpCodeTable.GetDecoder(opCode);
if (AddDbgComments)
{
- string DbgOpCode = $"0x{(Position - 8):x16}: 0x{OpCode:x16} ";
+ string dbgOpCode = $"0x{(position - 8):x16}: 0x{opCode:x16} ";
- DbgOpCode += (Decode?.Method.Name ?? "???");
+ dbgOpCode += (decode?.Method.Name ?? "???");
- if (Decode == ShaderDecode.Bra || Decode == ShaderDecode.Ssy)
+ if (decode == ShaderDecode.Bra || decode == ShaderDecode.Ssy)
{
- int Offset = ((int)(OpCode >> 20) << 8) >> 8;
+ int offset = ((int)(opCode >> 20) << 8) >> 8;
- long Target = Position + Offset;
+ long target = position + offset;
- DbgOpCode += " (0x" + Target.ToString("x16") + ")";
+ dbgOpCode += " (0x" + target.ToString("x16") + ")";
}
- Block.AddNode(new ShaderIrCmnt(DbgOpCode));
+ block.AddNode(new ShaderIrCmnt(dbgOpCode));
}
- if (Decode == null)
+ if (decode == null)
{
continue;
}
- Decode(Block, OpCode, Position);
+ decode(block, opCode, position);
}
- while (!IsFlowChange(Block.GetLastNode()));
+ while (!IsFlowChange(block.GetLastNode()));
- Block.EndPosition = Position;
+ block.EndPosition = position;
}
- private static bool IsFlowChange(ShaderIrNode Node)
+ private static bool IsFlowChange(ShaderIrNode node)
{
- return !NodeHasNext(GetInnermostOp(Node));
+ return !NodeHasNext(GetInnermostOp(node));
}
- private static ShaderIrOp GetInnermostOp(ShaderIrNode Node)
+ private static ShaderIrOp GetInnermostOp(ShaderIrNode node)
{
- if (Node is ShaderIrCond Cond)
+ if (node is ShaderIrCond cond)
{
- Node = Cond.Child;
+ node = cond.Child;
}
- return Node is ShaderIrOp Op ? Op : null;
+ return node is ShaderIrOp op ? op : null;
}
- private static bool NodeHasNext(ShaderIrNode Node)
+ private static bool NodeHasNext(ShaderIrNode node)
{
- if (!(Node is ShaderIrOp Op))
+ if (!(node is ShaderIrOp op))
{
return true;
}
- return Op.Inst != ShaderIrInst.Exit &&
- Op.Inst != ShaderIrInst.Bra;
+ return op.Inst != ShaderIrInst.Exit &&
+ op.Inst != ShaderIrInst.Bra;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderHeader.cs b/Ryujinx.Graphics/Gal/Shader/ShaderHeader.cs
index eca90fc3..2f9326e1 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderHeader.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderHeader.cs
@@ -11,9 +11,9 @@ namespace Ryujinx.Graphics.Gal.Shader
public bool Enabled => Red || Green || Blue || Alpha;
- public bool ComponentEnabled(int Component)
+ public bool ComponentEnabled(int component)
{
- switch (Component)
+ switch (component)
{
case 0: return Red;
case 1: return Green;
@@ -21,7 +21,7 @@ namespace Ryujinx.Graphics.Gal.Shader
case 3: return Alpha;
}
- throw new ArgumentException(nameof(Component));
+ throw new ArgumentException(nameof(component));
}
}
@@ -59,88 +59,88 @@ namespace Ryujinx.Graphics.Gal.Shader
public bool OmapSampleMask { get; private set; }
public bool OmapDepth { get; private set; }
- public ShaderHeader(IGalMemory Memory, long Position)
+ public ShaderHeader(IGalMemory memory, long position)
{
- uint CommonWord0 = (uint)Memory.ReadInt32(Position + 0);
- uint CommonWord1 = (uint)Memory.ReadInt32(Position + 4);
- uint CommonWord2 = (uint)Memory.ReadInt32(Position + 8);
- uint CommonWord3 = (uint)Memory.ReadInt32(Position + 12);
- uint CommonWord4 = (uint)Memory.ReadInt32(Position + 16);
-
- SphType = ReadBits(CommonWord0, 0, 5);
- Version = ReadBits(CommonWord0, 5, 5);
- ShaderType = ReadBits(CommonWord0, 10, 4);
- MrtEnable = ReadBits(CommonWord0, 14, 1) != 0;
- KillsPixels = ReadBits(CommonWord0, 15, 1) != 0;
- DoesGlobalStore = ReadBits(CommonWord0, 16, 1) != 0;
- SassVersion = ReadBits(CommonWord0, 17, 4);
- DoesLoadOrStore = ReadBits(CommonWord0, 26, 1) != 0;
- DoesFp64 = ReadBits(CommonWord0, 27, 1) != 0;
- StreamOutMask = ReadBits(CommonWord0, 28, 4);
-
- ShaderLocalMemoryLowSize = ReadBits(CommonWord1, 0, 24);
- PerPatchAttributeCount = ReadBits(CommonWord1, 24, 8);
-
- ShaderLocalMemoryHighSize = ReadBits(CommonWord2, 0, 24);
- ThreadsPerInputPrimitive = ReadBits(CommonWord2, 24, 8);
-
- ShaderLocalMemoryCrsSize = ReadBits(CommonWord3, 0, 24);
- OutputTopology = ReadBits(CommonWord3, 24, 4);
-
- MaxOutputVertexCount = ReadBits(CommonWord4, 0, 12);
- StoreReqStart = ReadBits(CommonWord4, 12, 8);
- StoreReqEnd = ReadBits(CommonWord4, 24, 8);
+ uint commonWord0 = (uint)memory.ReadInt32(position + 0);
+ uint commonWord1 = (uint)memory.ReadInt32(position + 4);
+ uint commonWord2 = (uint)memory.ReadInt32(position + 8);
+ uint commonWord3 = (uint)memory.ReadInt32(position + 12);
+ uint commonWord4 = (uint)memory.ReadInt32(position + 16);
+
+ SphType = ReadBits(commonWord0, 0, 5);
+ Version = ReadBits(commonWord0, 5, 5);
+ ShaderType = ReadBits(commonWord0, 10, 4);
+ MrtEnable = ReadBits(commonWord0, 14, 1) != 0;
+ KillsPixels = ReadBits(commonWord0, 15, 1) != 0;
+ DoesGlobalStore = ReadBits(commonWord0, 16, 1) != 0;
+ SassVersion = ReadBits(commonWord0, 17, 4);
+ DoesLoadOrStore = ReadBits(commonWord0, 26, 1) != 0;
+ DoesFp64 = ReadBits(commonWord0, 27, 1) != 0;
+ StreamOutMask = ReadBits(commonWord0, 28, 4);
+
+ ShaderLocalMemoryLowSize = ReadBits(commonWord1, 0, 24);
+ PerPatchAttributeCount = ReadBits(commonWord1, 24, 8);
+
+ ShaderLocalMemoryHighSize = ReadBits(commonWord2, 0, 24);
+ ThreadsPerInputPrimitive = ReadBits(commonWord2, 24, 8);
+
+ ShaderLocalMemoryCrsSize = ReadBits(commonWord3, 0, 24);
+ OutputTopology = ReadBits(commonWord3, 24, 4);
+
+ MaxOutputVertexCount = ReadBits(commonWord4, 0, 12);
+ StoreReqStart = ReadBits(commonWord4, 12, 8);
+ StoreReqEnd = ReadBits(commonWord4, 24, 8);
//Type 2 (fragment?) reading
- uint Type2OmapTarget = (uint)Memory.ReadInt32(Position + 72);
- uint Type2Omap = (uint)Memory.ReadInt32(Position + 76);
+ uint type2OmapTarget = (uint)memory.ReadInt32(position + 72);
+ uint type2Omap = (uint)memory.ReadInt32(position + 76);
OmapTargets = new OmapTarget[8];
for (int i = 0; i < OmapTargets.Length; i++)
{
- int Offset = i * 4;
+ int offset = i * 4;
OmapTargets[i] = new OmapTarget
{
- Red = ReadBits(Type2OmapTarget, Offset + 0, 1) != 0,
- Green = ReadBits(Type2OmapTarget, Offset + 1, 1) != 0,
- Blue = ReadBits(Type2OmapTarget, Offset + 2, 1) != 0,
- Alpha = ReadBits(Type2OmapTarget, Offset + 3, 1) != 0
+ Red = ReadBits(type2OmapTarget, offset + 0, 1) != 0,
+ Green = ReadBits(type2OmapTarget, offset + 1, 1) != 0,
+ Blue = ReadBits(type2OmapTarget, offset + 2, 1) != 0,
+ Alpha = ReadBits(type2OmapTarget, offset + 3, 1) != 0
};
}
- OmapSampleMask = ReadBits(Type2Omap, 0, 1) != 0;
- OmapDepth = ReadBits(Type2Omap, 1, 1) != 0;
+ OmapSampleMask = ReadBits(type2Omap, 0, 1) != 0;
+ OmapDepth = ReadBits(type2Omap, 1, 1) != 0;
}
public int DepthRegister
{
get
{
- int Count = 0;
+ int count = 0;
- for (int Index = 0; Index < OmapTargets.Length; Index++)
+ for (int index = 0; index < OmapTargets.Length; index++)
{
- for (int Component = 0; Component < 4; Component++)
+ for (int component = 0; component < 4; component++)
{
- if (OmapTargets[Index].ComponentEnabled(Component))
+ if (OmapTargets[index].ComponentEnabled(component))
{
- Count++;
+ count++;
}
}
}
// Depth register is always two registers after the last color output
- return Count + 1;
+ return count + 1;
}
}
- private static int ReadBits(uint Word, int Offset, int BitWidth)
+ private static int ReadBits(uint word, int offset, int bitWidth)
{
- uint Mask = (1u << BitWidth) - 1u;
+ uint mask = (1u << bitWidth) - 1u;
- return (int)((Word >> Offset) & Mask);
+ return (int)((word >> offset) & mask);
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrAsg.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrAsg.cs
index 00f8f6a5..53871a14 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrAsg.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrAsg.cs
@@ -5,10 +5,10 @@ namespace Ryujinx.Graphics.Gal.Shader
public ShaderIrNode Dst { get; set; }
public ShaderIrNode Src { get; set; }
- public ShaderIrAsg(ShaderIrNode Dst, ShaderIrNode Src)
+ public ShaderIrAsg(ShaderIrNode dst, ShaderIrNode src)
{
- this.Dst = Dst;
- this.Src = Src;
+ Dst = dst;
+ Src = src;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrBlock.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrBlock.cs
index 782f9626..49257d28 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrBlock.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrBlock.cs
@@ -14,18 +14,18 @@ namespace Ryujinx.Graphics.Gal.Shader
public List<ShaderIrNode> Nodes { get; private set; }
- public ShaderIrBlock(int Position)
+ public ShaderIrBlock(int position)
{
- this.Position = Position;
+ Position = position;
Sources = new List<ShaderIrBlock>();
Nodes = new List<ShaderIrNode>();
}
- public void AddNode(ShaderIrNode Node)
+ public void AddNode(ShaderIrNode node)
{
- Nodes.Add(Node);
+ Nodes.Add(node);
}
public ShaderIrNode[] GetNodes()
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrCmnt.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrCmnt.cs
index 03031ec5..5da04e5e 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrCmnt.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrCmnt.cs
@@ -4,9 +4,9 @@ namespace Ryujinx.Graphics.Gal.Shader
{
public string Comment { get; private set; }
- public ShaderIrCmnt(string Comment)
+ public ShaderIrCmnt(string comment)
{
- this.Comment = Comment;
+ Comment = comment;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrCond.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrCond.cs
index 8fb01660..34acf90d 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrCond.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrCond.cs
@@ -7,11 +7,11 @@ namespace Ryujinx.Graphics.Gal.Shader
public bool Not { get; private set; }
- public ShaderIrCond(ShaderIrNode Pred, ShaderIrNode Child, bool Not)
+ public ShaderIrCond(ShaderIrNode pred, ShaderIrNode child, bool not)
{
- this.Pred = Pred;
- this.Child = Child;
- this.Not = Not;
+ Pred = pred;
+ Child = child;
+ Not = not;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaIpa.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaIpa.cs
index 3b884621..07db6467 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaIpa.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaIpa.cs
@@ -4,9 +4,9 @@
{
public ShaderIpaMode Mode { get; private set; }
- public ShaderIrMetaIpa(ShaderIpaMode Mode)
+ public ShaderIrMetaIpa(ShaderIpaMode mode)
{
- this.Mode = Mode;
+ Mode = mode;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTex.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTex.cs
index 72ea221a..e0265138 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTex.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTex.cs
@@ -13,12 +13,12 @@ namespace Ryujinx.Graphics.Gal.Shader
public ShaderIrOperGpr DepthCompare;
public int Component; // for TLD4(S)
- public ShaderIrMetaTex(int Elem, GalTextureTarget TextureTarget, TextureInstructionSuffix TextureInstructionSuffix, params ShaderIrNode[] Coordinates)
+ public ShaderIrMetaTex(int elem, GalTextureTarget textureTarget, TextureInstructionSuffix textureInstructionSuffix, params ShaderIrNode[] coordinates)
{
- this.Elem = Elem;
- this.TextureTarget = TextureTarget;
- this.TextureInstructionSuffix = TextureInstructionSuffix;
- this.Coordinates = Coordinates;
+ Elem = elem;
+ TextureTarget = textureTarget;
+ TextureInstructionSuffix = textureInstructionSuffix;
+ Coordinates = coordinates;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTexq.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTexq.cs
index 92871137..c925ea4e 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTexq.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrMetaTexq.cs
@@ -6,10 +6,10 @@ namespace Ryujinx.Graphics.Gal.Shader
public int Elem { get; private set; }
- public ShaderIrMetaTexq(ShaderTexqInfo Info, int Elem)
+ public ShaderIrMetaTexq(ShaderTexqInfo info, int elem)
{
- this.Info = Info;
- this.Elem = Elem;
+ Info = info;
+ Elem = elem;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrOp.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrOp.cs
index 12a6123c..c91c3926 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrOp.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrOp.cs
@@ -9,17 +9,17 @@ namespace Ryujinx.Graphics.Gal.Shader
public ShaderIrMeta MetaData { get; set; }
public ShaderIrOp(
- ShaderIrInst Inst,
- ShaderIrNode OperandA = null,
- ShaderIrNode OperandB = null,
- ShaderIrNode OperandC = null,
- ShaderIrMeta MetaData = null)
+ ShaderIrInst inst,
+ ShaderIrNode operandA = null,
+ ShaderIrNode operandB = null,
+ ShaderIrNode operandC = null,
+ ShaderIrMeta metaData = null)
{
- this.Inst = Inst;
- this.OperandA = OperandA;
- this.OperandB = OperandB;
- this.OperandC = OperandC;
- this.MetaData = MetaData;
+ Inst = inst;
+ OperandA = operandA;
+ OperandB = operandB;
+ OperandC = operandC;
+ MetaData = metaData;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperAbuf.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperAbuf.cs
index f17d9c0e..1f339e80 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperAbuf.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperAbuf.cs
@@ -6,10 +6,10 @@ namespace Ryujinx.Graphics.Gal.Shader
public ShaderIrNode Vertex { get; private set; }
- public ShaderIrOperAbuf(int Offs, ShaderIrNode Vertex)
+ public ShaderIrOperAbuf(int offs, ShaderIrNode vertex)
{
- this.Offs = Offs;
- this.Vertex = Vertex;
+ Offs = offs;
+ Vertex = vertex;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperCbuf.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperCbuf.cs
index b040c5c6..9f419bbb 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperCbuf.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperCbuf.cs
@@ -7,11 +7,11 @@ namespace Ryujinx.Graphics.Gal.Shader
public ShaderIrNode Offs { get; private set; }
- public ShaderIrOperCbuf(int Index, int Pos, ShaderIrNode Offs = null)
+ public ShaderIrOperCbuf(int index, int pos, ShaderIrNode offs = null)
{
- this.Index = Index;
- this.Pos = Pos;
- this.Offs = Offs;
+ Index = index;
+ Pos = pos;
+ Offs = offs;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperGpr.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperGpr.cs
index b4a5cab4..0d102d89 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperGpr.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperGpr.cs
@@ -2,35 +2,35 @@ namespace Ryujinx.Graphics.Gal.Shader
{
class ShaderIrOperGpr : ShaderIrNode
{
- public const int ZRIndex = 0xff;
+ public const int ZrIndex = 0xff;
- public bool IsConst => Index == ZRIndex;
+ public bool IsConst => Index == ZrIndex;
- public bool IsValidRegister => (uint)Index <= ZRIndex;
+ public bool IsValidRegister => (uint)Index <= ZrIndex;
public int Index { get; set; }
public int HalfPart { get; set; }
public ShaderRegisterSize RegisterSize { get; private set; }
- public ShaderIrOperGpr(int Index)
+ public ShaderIrOperGpr(int index)
{
- this.Index = Index;
+ Index = index;
RegisterSize = ShaderRegisterSize.Single;
}
- public ShaderIrOperGpr(int Index, int HalfPart)
+ public ShaderIrOperGpr(int index, int halfPart)
{
- this.Index = Index;
- this.HalfPart = HalfPart;
+ Index = index;
+ HalfPart = halfPart;
RegisterSize = ShaderRegisterSize.Half;
}
- public static ShaderIrOperGpr MakeTemporary(int Index = 0)
+ public static ShaderIrOperGpr MakeTemporary(int index = 0)
{
- return new ShaderIrOperGpr(0x100 + Index);
+ return new ShaderIrOperGpr(0x100 + index);
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperImm.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperImm.cs
index ba2c2c9b..6b23b365 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperImm.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperImm.cs
@@ -4,9 +4,9 @@ namespace Ryujinx.Graphics.Gal.Shader
{
public int Value { get; private set; }
- public ShaderIrOperImm(int Value)
+ public ShaderIrOperImm(int value)
{
- this.Value = Value;
+ Value = value;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperImmf.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperImmf.cs
index 3c27e483..5b08c5b1 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperImmf.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperImmf.cs
@@ -4,9 +4,9 @@ namespace Ryujinx.Graphics.Gal.Shader
{
public float Value { get; private set; }
- public ShaderIrOperImmf(float Value)
+ public ShaderIrOperImmf(float value)
{
- this.Value = Value;
+ Value = value;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperPred.cs b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperPred.cs
index 74cca0ef..6c16a145 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderIrOperPred.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderIrOperPred.cs
@@ -9,9 +9,9 @@ namespace Ryujinx.Graphics.Gal.Shader
public int Index { get; set; }
- public ShaderIrOperPred(int Index)
+ public ShaderIrOperPred(int index)
{
- this.Index = Index;
+ Index = index;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderOpCodeTable.cs b/Ryujinx.Graphics/Gal/Shader/ShaderOpCodeTable.cs
index d2bbd38c..1edf91a0 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderOpCodeTable.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderOpCodeTable.cs
@@ -12,18 +12,18 @@ namespace Ryujinx.Graphics.Gal.Shader
public int XBits;
- public ShaderDecodeEntry(ShaderDecodeFunc Func, int XBits)
+ public ShaderDecodeEntry(ShaderDecodeFunc func, int xBits)
{
- this.Func = Func;
- this.XBits = XBits;
+ Func = func;
+ XBits = xBits;
}
}
- private static ShaderDecodeEntry[] OpCodes;
+ private static ShaderDecodeEntry[] _opCodes;
static ShaderOpCodeTable()
{
- OpCodes = new ShaderDecodeEntry[1 << EncodingBits];
+ _opCodes = new ShaderDecodeEntry[1 << EncodingBits];
#region Instructions
Set("0100110000000x", ShaderDecode.Bfe_C);
@@ -123,7 +123,7 @@ namespace Ryujinx.Graphics.Gal.Shader
Set("1101x00xxxxxxx", ShaderDecode.Texs);
Set("1101101xxxxxxx", ShaderDecode.Tlds);
Set("110010xxxx111x", ShaderDecode.Tld4);
- Set("1101111100xxxx", ShaderDecode.Tld4s);
+ Set("1101111100xxxx", ShaderDecode.Tld4S);
Set("01011111xxxxxx", ShaderDecode.Vmad);
Set("0100111xxxxxxx", ShaderDecode.Xmad_CR);
Set("0011011x00xxxx", ShaderDecode.Xmad_I);
@@ -132,59 +132,59 @@ namespace Ryujinx.Graphics.Gal.Shader
#endregion
}
- private static void Set(string Encoding, ShaderDecodeFunc Func)
+ private static void Set(string encoding, ShaderDecodeFunc func)
{
- if (Encoding.Length != EncodingBits)
+ if (encoding.Length != EncodingBits)
{
- throw new ArgumentException(nameof(Encoding));
+ throw new ArgumentException(nameof(encoding));
}
- int Bit = Encoding.Length - 1;
- int Value = 0;
- int XMask = 0;
- int XBits = 0;
+ int bit = encoding.Length - 1;
+ int value = 0;
+ int xMask = 0;
+ int xBits = 0;
- int[] XPos = new int[Encoding.Length];
+ int[] xPos = new int[encoding.Length];
- for (int Index = 0; Index < Encoding.Length; Index++, Bit--)
+ for (int index = 0; index < encoding.Length; index++, bit--)
{
- char Chr = Encoding[Index];
+ char chr = encoding[index];
- if (Chr == '1')
+ if (chr == '1')
{
- Value |= 1 << Bit;
+ value |= 1 << bit;
}
- else if (Chr == 'x')
+ else if (chr == 'x')
{
- XMask |= 1 << Bit;
+ xMask |= 1 << bit;
- XPos[XBits++] = Bit;
+ xPos[xBits++] = bit;
}
}
- XMask = ~XMask;
+ xMask = ~xMask;
- ShaderDecodeEntry Entry = new ShaderDecodeEntry(Func, XBits);
+ ShaderDecodeEntry entry = new ShaderDecodeEntry(func, xBits);
- for (int Index = 0; Index < (1 << XBits); Index++)
+ for (int index = 0; index < (1 << xBits); index++)
{
- Value &= XMask;
+ value &= xMask;
- for (int X = 0; X < XBits; X++)
+ for (int x = 0; x < xBits; x++)
{
- Value |= ((Index >> X) & 1) << XPos[X];
+ value |= ((index >> x) & 1) << xPos[x];
}
- if (OpCodes[Value] == null || OpCodes[Value].XBits > XBits)
+ if (_opCodes[value] == null || _opCodes[value].XBits > xBits)
{
- OpCodes[Value] = Entry;
+ _opCodes[value] = entry;
}
}
}
- public static ShaderDecodeFunc GetDecoder(long OpCode)
+ public static ShaderDecodeFunc GetDecoder(long opCode)
{
- return OpCodes[(ulong)OpCode >> (64 - EncodingBits)]?.Func;
+ return _opCodes[(ulong)opCode >> (64 - EncodingBits)]?.Func;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderOper.cs b/Ryujinx.Graphics/Gal/Shader/ShaderOper.cs
index aa485482..22a2ab85 100644
--- a/Ryujinx.Graphics/Gal/Shader/ShaderOper.cs
+++ b/Ryujinx.Graphics/Gal/Shader/ShaderOper.cs
@@ -2,10 +2,10 @@ namespace Ryujinx.Graphics.Gal.Shader
{
enum ShaderOper
{
- CR,
+ Cr,
Imm,
Immf,
- RC,
- RR
+ Rc,
+ Rr
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Gal/ShaderDeclInfo.cs b/Ryujinx.Graphics/Gal/ShaderDeclInfo.cs
index ed1955cd..f1f4650c 100644
--- a/Ryujinx.Graphics/Gal/ShaderDeclInfo.cs
+++ b/Ryujinx.Graphics/Gal/ShaderDeclInfo.cs
@@ -16,29 +16,29 @@ namespace Ryujinx.Graphics.Gal
public TextureInstructionSuffix TextureSuffix { get; private set; }
public ShaderDeclInfo(
- string Name,
- int Index,
- bool IsCb = false,
- int Cbuf = 0,
- int Size = 1,
- GalTextureTarget TextureTarget = GalTextureTarget.TwoD,
- TextureInstructionSuffix TextureSuffix = TextureInstructionSuffix.None)
+ string name,
+ int index,
+ bool isCb = false,
+ int cbuf = 0,
+ int size = 1,
+ GalTextureTarget textureTarget = GalTextureTarget.TwoD,
+ TextureInstructionSuffix textureSuffix = TextureInstructionSuffix.None)
{
- this.Name = Name;
- this.Index = Index;
- this.IsCb = IsCb;
- this.Cbuf = Cbuf;
- this.Size = Size;
+ Name = name;
+ Index = index;
+ IsCb = isCb;
+ Cbuf = cbuf;
+ Size = size;
- this.TextureTarget = TextureTarget;
- this.TextureSuffix = TextureSuffix;
+ TextureTarget = textureTarget;
+ TextureSuffix = textureSuffix;
}
- internal void Enlarge(int NewSize)
+ internal void Enlarge(int newSize)
{
- if (Size < NewSize)
+ if (Size < newSize)
{
- Size = NewSize;
+ Size = newSize;
}
}
}
diff --git a/Ryujinx.Graphics/Gal/ShaderDumper.cs b/Ryujinx.Graphics/Gal/ShaderDumper.cs
index 21e92491..726447e4 100644
--- a/Ryujinx.Graphics/Gal/ShaderDumper.cs
+++ b/Ryujinx.Graphics/Gal/ShaderDumper.cs
@@ -5,67 +5,67 @@ namespace Ryujinx.Graphics.Gal
{
static class ShaderDumper
{
- private static string RuntimeDir;
+ private static string _runtimeDir;
public static int DumpIndex { get; private set; } = 1;
- public static void Dump(IGalMemory Memory, long Position, GalShaderType Type, string ExtSuffix = "")
+ public static void Dump(IGalMemory memory, long position, GalShaderType type, string extSuffix = "")
{
if (!IsDumpEnabled())
{
return;
}
- string FileName = "Shader" + DumpIndex.ToString("d4") + "." + ShaderExtension(Type) + ExtSuffix + ".bin";
+ string fileName = "Shader" + DumpIndex.ToString("d4") + "." + ShaderExtension(type) + extSuffix + ".bin";
- string FullPath = Path.Combine(FullDir(), FileName);
- string CodePath = Path.Combine(CodeDir(), FileName);
+ string fullPath = Path.Combine(FullDir(), fileName);
+ string codePath = Path.Combine(CodeDir(), fileName);
DumpIndex++;
- using (FileStream FullFile = File.Create(FullPath))
- using (FileStream CodeFile = File.Create(CodePath))
+ using (FileStream fullFile = File.Create(fullPath))
+ using (FileStream codeFile = File.Create(codePath))
{
- BinaryWriter FullWriter = new BinaryWriter(FullFile);
- BinaryWriter CodeWriter = new BinaryWriter(CodeFile);
+ BinaryWriter fullWriter = new BinaryWriter(fullFile);
+ BinaryWriter codeWriter = new BinaryWriter(codeFile);
for (long i = 0; i < 0x50; i += 4)
{
- FullWriter.Write(Memory.ReadInt32(Position + i));
+ fullWriter.Write(memory.ReadInt32(position + i));
}
- long Offset = 0;
+ long offset = 0;
- ulong Instruction = 0;
+ ulong instruction = 0;
//Dump until a NOP instruction is found
- while ((Instruction >> 48 & 0xfff8) != 0x50b0)
+ while ((instruction >> 48 & 0xfff8) != 0x50b0)
{
- uint Word0 = (uint)Memory.ReadInt32(Position + 0x50 + Offset + 0);
- uint Word1 = (uint)Memory.ReadInt32(Position + 0x50 + Offset + 4);
+ uint word0 = (uint)memory.ReadInt32(position + 0x50 + offset + 0);
+ uint word1 = (uint)memory.ReadInt32(position + 0x50 + offset + 4);
- Instruction = Word0 | (ulong)Word1 << 32;
+ instruction = word0 | (ulong)word1 << 32;
//Zero instructions (other kind of NOP) stop immediatly,
//this is to avoid two rows of zeroes
- if (Instruction == 0)
+ if (instruction == 0)
{
break;
}
- FullWriter.Write(Instruction);
- CodeWriter.Write(Instruction);
+ fullWriter.Write(instruction);
+ codeWriter.Write(instruction);
- Offset += 8;
+ offset += 8;
}
//Align to meet nvdisasm requeriments
- while (Offset % 0x20 != 0)
+ while (offset % 0x20 != 0)
{
- FullWriter.Write(0);
- CodeWriter.Write(0);
+ fullWriter.Write(0);
+ codeWriter.Write(0);
- Offset += 4;
+ offset += 4;
}
}
}
@@ -87,37 +87,37 @@ namespace Ryujinx.Graphics.Gal
private static string DumpDir()
{
- if (string.IsNullOrEmpty(RuntimeDir))
+ if (string.IsNullOrEmpty(_runtimeDir))
{
- int Index = 1;
+ int index = 1;
do
{
- RuntimeDir = Path.Combine(GraphicsConfig.ShadersDumpPath, "Dumps" + Index.ToString("d2"));
+ _runtimeDir = Path.Combine(GraphicsConfig.ShadersDumpPath, "Dumps" + index.ToString("d2"));
- Index++;
+ index++;
}
- while (Directory.Exists(RuntimeDir));
+ while (Directory.Exists(_runtimeDir));
- Directory.CreateDirectory(RuntimeDir);
+ Directory.CreateDirectory(_runtimeDir);
}
- return RuntimeDir;
+ return _runtimeDir;
}
- private static string CreateAndReturn(string Dir)
+ private static string CreateAndReturn(string dir)
{
- if (!Directory.Exists(Dir))
+ if (!Directory.Exists(dir))
{
- Directory.CreateDirectory(Dir);
+ Directory.CreateDirectory(dir);
}
- return Dir;
+ return dir;
}
- private static string ShaderExtension(GalShaderType Type)
+ private static string ShaderExtension(GalShaderType type)
{
- switch (Type)
+ switch (type)
{
case GalShaderType.Vertex: return "vert";
case GalShaderType.TessControl: return "tesc";
@@ -125,7 +125,7 @@ namespace Ryujinx.Graphics.Gal
case GalShaderType.Geometry: return "geom";
case GalShaderType.Fragment: return "frag";
- default: throw new ArgumentException(nameof(Type));
+ default: throw new ArgumentException(nameof(type));
}
}
}
diff --git a/Ryujinx.Graphics/Gal/ShaderException.cs b/Ryujinx.Graphics/Gal/ShaderException.cs
index 9bc87ff3..b0aff42b 100644
--- a/Ryujinx.Graphics/Gal/ShaderException.cs
+++ b/Ryujinx.Graphics/Gal/ShaderException.cs
@@ -6,6 +6,6 @@ namespace Ryujinx.Graphics.Gal
{
public ShaderException() : base() { }
- public ShaderException(string Message) : base(Message) { }
+ public ShaderException(string message) : base(message) { }
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/GpuMethodCall.cs b/Ryujinx.Graphics/GpuMethodCall.cs
index 762d10f1..4a310b07 100644
--- a/Ryujinx.Graphics/GpuMethodCall.cs
+++ b/Ryujinx.Graphics/GpuMethodCall.cs
@@ -10,15 +10,15 @@ namespace Ryujinx.Graphics
public bool IsLastCall => MethodCount <= 1;
public GpuMethodCall(
- int Method,
- int Argument,
- int SubChannel = 0,
- int MethodCount = 0)
+ int method,
+ int argument,
+ int subChannel = 0,
+ int methodCount = 0)
{
- this.Method = Method;
- this.Argument = Argument;
- this.SubChannel = SubChannel;
- this.MethodCount = MethodCount;
+ Method = method;
+ Argument = argument;
+ SubChannel = subChannel;
+ MethodCount = methodCount;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/GpuResourceManager.cs b/Ryujinx.Graphics/GpuResourceManager.cs
index 4f2d92b0..740e6be8 100644
--- a/Ryujinx.Graphics/GpuResourceManager.cs
+++ b/Ryujinx.Graphics/GpuResourceManager.cs
@@ -1,8 +1,6 @@
-using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Gal;
using Ryujinx.Graphics.Memory;
using Ryujinx.Graphics.Texture;
-using System;
using System.Collections.Generic;
namespace Ryujinx.Graphics
@@ -18,124 +16,124 @@ namespace Ryujinx.Graphics
ZetaBuffer
}
- private NvGpu Gpu;
+ private NvGpu _gpu;
- private HashSet<long>[] UploadedKeys;
+ private HashSet<long>[] _uploadedKeys;
- private Dictionary<long, ImageType> ImageTypes;
- private Dictionary<long, int> MirroredTextures;
+ private Dictionary<long, ImageType> _imageTypes;
+ private Dictionary<long, int> _mirroredTextures;
- public GpuResourceManager(NvGpu Gpu)
+ public GpuResourceManager(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
- UploadedKeys = new HashSet<long>[(int)NvGpuBufferType.Count];
+ _uploadedKeys = new HashSet<long>[(int)NvGpuBufferType.Count];
- for (int Index = 0; Index < UploadedKeys.Length; Index++)
+ for (int index = 0; index < _uploadedKeys.Length; index++)
{
- UploadedKeys[Index] = new HashSet<long>();
+ _uploadedKeys[index] = new HashSet<long>();
}
- ImageTypes = new Dictionary<long, ImageType>();
- MirroredTextures = new Dictionary<long, int>();
+ _imageTypes = new Dictionary<long, ImageType>();
+ _mirroredTextures = new Dictionary<long, int>();
}
- public void SendColorBuffer(NvGpuVmm Vmm, long Position, int Attachment, GalImage NewImage)
+ public void SendColorBuffer(NvGpuVmm vmm, long position, int attachment, GalImage newImage)
{
- long Size = (uint)ImageUtils.GetSize(NewImage);
+ long size = (uint)ImageUtils.GetSize(newImage);
- ImageTypes[Position] = ImageType.ColorBuffer;
+ _imageTypes[position] = ImageType.ColorBuffer;
- if (!TryReuse(Vmm, Position, NewImage))
+ if (!TryReuse(vmm, position, newImage))
{
- Gpu.Renderer.Texture.Create(Position, (int)Size, NewImage);
+ _gpu.Renderer.Texture.Create(position, (int)size, newImage);
}
- Gpu.Renderer.RenderTarget.BindColor(Position, Attachment);
+ _gpu.Renderer.RenderTarget.BindColor(position, attachment);
}
- public void SendZetaBuffer(NvGpuVmm Vmm, long Position, GalImage NewImage)
+ public void SendZetaBuffer(NvGpuVmm vmm, long position, GalImage newImage)
{
- long Size = (uint)ImageUtils.GetSize(NewImage);
+ long size = (uint)ImageUtils.GetSize(newImage);
- ImageTypes[Position] = ImageType.ZetaBuffer;
+ _imageTypes[position] = ImageType.ZetaBuffer;
- if (!TryReuse(Vmm, Position, NewImage))
+ if (!TryReuse(vmm, position, newImage))
{
- Gpu.Renderer.Texture.Create(Position, (int)Size, NewImage);
+ _gpu.Renderer.Texture.Create(position, (int)size, newImage);
}
- Gpu.Renderer.RenderTarget.BindZeta(Position);
+ _gpu.Renderer.RenderTarget.BindZeta(position);
}
- public void SendTexture(NvGpuVmm Vmm, long Position, GalImage NewImage)
+ public void SendTexture(NvGpuVmm vmm, long position, GalImage newImage)
{
- PrepareSendTexture(Vmm, Position, NewImage);
+ PrepareSendTexture(vmm, position, newImage);
- ImageTypes[Position] = ImageType.Texture;
+ _imageTypes[position] = ImageType.Texture;
}
- public bool TryGetTextureLayer(long Position, out int LayerIndex)
+ public bool TryGetTextureLayer(long position, out int layerIndex)
{
- if (MirroredTextures.TryGetValue(Position, out LayerIndex))
+ if (_mirroredTextures.TryGetValue(position, out layerIndex))
{
- ImageType Type = ImageTypes[Position];
+ ImageType type = _imageTypes[position];
// FIXME(thog): I'm actually unsure if we should deny all other image type, gpu testing needs to be done here.
- if (Type != ImageType.Texture && Type != ImageType.TextureArrayLayer)
+ if (type != ImageType.Texture && type != ImageType.TextureArrayLayer)
{
- LayerIndex = -1;
+ layerIndex = -1;
return false;
}
return true;
}
- LayerIndex = -1;
+ layerIndex = -1;
return false;
}
- public void SetTextureArrayLayer(long Position, int LayerIndex)
+ public void SetTextureArrayLayer(long position, int layerIndex)
{
- ImageTypes[Position] = ImageType.TextureArrayLayer;
- MirroredTextures[Position] = LayerIndex;
+ _imageTypes[position] = ImageType.TextureArrayLayer;
+ _mirroredTextures[position] = layerIndex;
}
- private void PrepareSendTexture(NvGpuVmm Vmm, long Position, GalImage NewImage)
+ private void PrepareSendTexture(NvGpuVmm vmm, long position, GalImage newImage)
{
- long Size = ImageUtils.GetSize(NewImage);
+ long size = ImageUtils.GetSize(newImage);
- bool SkipCheck = false;
+ bool skipCheck = false;
- if (ImageTypes.TryGetValue(Position, out ImageType OldType))
+ if (_imageTypes.TryGetValue(position, out ImageType oldType))
{
- if (OldType == ImageType.ColorBuffer || OldType == ImageType.ZetaBuffer)
+ if (oldType == ImageType.ColorBuffer || oldType == ImageType.ZetaBuffer)
{
//Avoid data destruction
- MemoryRegionModified(Vmm, Position, Size, NvGpuBufferType.Texture);
+ MemoryRegionModified(vmm, position, size, NvGpuBufferType.Texture);
- SkipCheck = true;
+ skipCheck = true;
}
}
- if (SkipCheck || !MemoryRegionModified(Vmm, Position, Size, NvGpuBufferType.Texture))
+ if (skipCheck || !MemoryRegionModified(vmm, position, size, NvGpuBufferType.Texture))
{
- if (TryReuse(Vmm, Position, NewImage))
+ if (TryReuse(vmm, position, newImage))
{
return;
}
}
- byte[] Data = ImageUtils.ReadTexture(Vmm, NewImage, Position);
+ byte[] data = ImageUtils.ReadTexture(vmm, newImage, position);
- Gpu.Renderer.Texture.Create(Position, Data, NewImage);
+ _gpu.Renderer.Texture.Create(position, data, newImage);
}
- private bool TryReuse(NvGpuVmm Vmm, long Position, GalImage NewImage)
+ private bool TryReuse(NvGpuVmm vmm, long position, GalImage newImage)
{
- if (Gpu.Renderer.Texture.TryGetImage(Position, out GalImage CachedImage) && CachedImage.TextureTarget == NewImage.TextureTarget && CachedImage.SizeMatches(NewImage))
+ if (_gpu.Renderer.Texture.TryGetImage(position, out GalImage cachedImage) && cachedImage.TextureTarget == newImage.TextureTarget && cachedImage.SizeMatches(newImage))
{
- Gpu.Renderer.RenderTarget.Reinterpret(Position, NewImage);
+ _gpu.Renderer.RenderTarget.Reinterpret(position, newImage);
return true;
}
@@ -143,29 +141,29 @@ namespace Ryujinx.Graphics
return false;
}
- public bool MemoryRegionModified(NvGpuVmm Vmm, long Position, long Size, NvGpuBufferType Type)
+ public bool MemoryRegionModified(NvGpuVmm vmm, long position, long size, NvGpuBufferType type)
{
- HashSet<long> Uploaded = UploadedKeys[(int)Type];
+ HashSet<long> uploaded = _uploadedKeys[(int)type];
- if (!Uploaded.Add(Position))
+ if (!uploaded.Add(position))
{
return false;
}
- return Vmm.IsRegionModified(Position, Size, Type);
+ return vmm.IsRegionModified(position, size, type);
}
public void ClearPbCache()
{
- for (int Index = 0; Index < UploadedKeys.Length; Index++)
+ for (int index = 0; index < _uploadedKeys.Length; index++)
{
- UploadedKeys[Index].Clear();
+ _uploadedKeys[index].Clear();
}
}
- public void ClearPbCache(NvGpuBufferType Type)
+ public void ClearPbCache(NvGpuBufferType type)
{
- UploadedKeys[(int)Type].Clear();
+ _uploadedKeys[(int)type].Clear();
}
}
}
diff --git a/Ryujinx.Graphics/Graphics3d/INvGpuEngine.cs b/Ryujinx.Graphics/Graphics3d/INvGpuEngine.cs
index c2474a17..aa0db682 100644
--- a/Ryujinx.Graphics/Graphics3d/INvGpuEngine.cs
+++ b/Ryujinx.Graphics/Graphics3d/INvGpuEngine.cs
@@ -6,6 +6,6 @@ namespace Ryujinx.Graphics.Graphics3d
{
int[] Registers { get; }
- void CallMethod(NvGpuVmm Vmm, GpuMethodCall MethCall);
+ void CallMethod(NvGpuVmm vmm, GpuMethodCall methCall);
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/MacroInterpreter.cs b/Ryujinx.Graphics/Graphics3d/MacroInterpreter.cs
index a124aca4..84576213 100644
--- a/Ryujinx.Graphics/Graphics3d/MacroInterpreter.cs
+++ b/Ryujinx.Graphics/Graphics3d/MacroInterpreter.cs
@@ -42,78 +42,78 @@ namespace Ryujinx.Graphics.Graphics3d
BitwiseNotAnd = 12
}
- private NvGpuFifo PFifo;
- private INvGpuEngine Engine;
+ private NvGpuFifo _pFifo;
+ private INvGpuEngine _engine;
public Queue<int> Fifo { get; private set; }
- private int[] Gprs;
+ private int[] _gprs;
- private int MethAddr;
- private int MethIncr;
+ private int _methAddr;
+ private int _methIncr;
- private bool Carry;
+ private bool _carry;
- private int OpCode;
+ private int _opCode;
- private int PipeOp;
+ private int _pipeOp;
- private int Pc;
+ private int _pc;
- public MacroInterpreter(NvGpuFifo PFifo, INvGpuEngine Engine)
+ public MacroInterpreter(NvGpuFifo pFifo, INvGpuEngine engine)
{
- this.PFifo = PFifo;
- this.Engine = Engine;
+ _pFifo = pFifo;
+ _engine = engine;
Fifo = new Queue<int>();
- Gprs = new int[8];
+ _gprs = new int[8];
}
- public void Execute(NvGpuVmm Vmm, int[] Mme, int Position, int Param)
+ public void Execute(NvGpuVmm vmm, int[] mme, int position, int param)
{
Reset();
- Gprs[1] = Param;
+ _gprs[1] = param;
- Pc = Position;
+ _pc = position;
- FetchOpCode(Mme);
+ FetchOpCode(mme);
- while (Step(Vmm, Mme));
+ while (Step(vmm, mme));
//Due to the delay slot, we still need to execute
//one more instruction before we actually exit.
- Step(Vmm, Mme);
+ Step(vmm, mme);
}
private void Reset()
{
- for (int Index = 0; Index < Gprs.Length; Index++)
+ for (int index = 0; index < _gprs.Length; index++)
{
- Gprs[Index] = 0;
+ _gprs[index] = 0;
}
- MethAddr = 0;
- MethIncr = 0;
+ _methAddr = 0;
+ _methIncr = 0;
- Carry = false;
+ _carry = false;
}
- private bool Step(NvGpuVmm Vmm, int[] Mme)
+ private bool Step(NvGpuVmm vmm, int[] mme)
{
- int BaseAddr = Pc - 1;
+ int baseAddr = _pc - 1;
- FetchOpCode(Mme);
+ FetchOpCode(mme);
- if ((OpCode & 7) < 7)
+ if ((_opCode & 7) < 7)
{
//Operation produces a value.
- AssignmentOperation AsgOp = (AssignmentOperation)((OpCode >> 4) & 7);
+ AssignmentOperation asgOp = (AssignmentOperation)((_opCode >> 4) & 7);
- int Result = GetAluResult();
+ int result = GetAluResult();
- switch (AsgOp)
+ switch (asgOp)
{
//Fetch parameter and ignore result.
case AssignmentOperation.IgnoreAndFetch:
@@ -126,7 +126,7 @@ namespace Ryujinx.Graphics.Graphics3d
//Move result.
case AssignmentOperation.Move:
{
- SetDstGpr(Result);
+ SetDstGpr(result);
break;
}
@@ -134,9 +134,9 @@ namespace Ryujinx.Graphics.Graphics3d
//Move result and use as Method Address.
case AssignmentOperation.MoveAndSetMaddr:
{
- SetDstGpr(Result);
+ SetDstGpr(result);
- SetMethAddr(Result);
+ SetMethAddr(result);
break;
}
@@ -146,7 +146,7 @@ namespace Ryujinx.Graphics.Graphics3d
{
SetDstGpr(FetchParam());
- Send(Vmm, Result);
+ Send(vmm, result);
break;
}
@@ -154,9 +154,9 @@ namespace Ryujinx.Graphics.Graphics3d
//Move and send result.
case AssignmentOperation.MoveAndSend:
{
- SetDstGpr(Result);
+ SetDstGpr(result);
- Send(Vmm, Result);
+ Send(vmm, result);
break;
}
@@ -166,7 +166,7 @@ namespace Ryujinx.Graphics.Graphics3d
{
SetDstGpr(FetchParam());
- SetMethAddr(Result);
+ SetMethAddr(result);
break;
}
@@ -174,11 +174,11 @@ namespace Ryujinx.Graphics.Graphics3d
//Move result and use as Method Address, then fetch and send paramter.
case AssignmentOperation.MoveAndSetMaddrThenFetchAndSend:
{
- SetDstGpr(Result);
+ SetDstGpr(result);
- SetMethAddr(Result);
+ SetMethAddr(result);
- Send(Vmm, FetchParam());
+ Send(vmm, FetchParam());
break;
}
@@ -186,11 +186,11 @@ namespace Ryujinx.Graphics.Graphics3d
//Move result and use as Method Address, then send bits 17:12 of result.
case AssignmentOperation.MoveAndSetMaddrThenSendHigh:
{
- SetDstGpr(Result);
+ SetDstGpr(result);
- SetMethAddr(Result);
+ SetMethAddr(result);
- Send(Vmm, (Result >> 12) & 0x3f);
+ Send(vmm, (result >> 12) & 0x3f);
break;
}
@@ -199,50 +199,50 @@ namespace Ryujinx.Graphics.Graphics3d
else
{
//Branch.
- bool OnNotZero = ((OpCode >> 4) & 1) != 0;
+ bool onNotZero = ((_opCode >> 4) & 1) != 0;
- bool Taken = OnNotZero
+ bool taken = onNotZero
? GetGprA() != 0
: GetGprA() == 0;
- if (Taken)
+ if (taken)
{
- Pc = BaseAddr + GetImm();
+ _pc = baseAddr + GetImm();
- bool NoDelays = (OpCode & 0x20) != 0;
+ bool noDelays = (_opCode & 0x20) != 0;
- if (NoDelays)
+ if (noDelays)
{
- FetchOpCode(Mme);
+ FetchOpCode(mme);
}
return true;
}
}
- bool Exit = (OpCode & 0x80) != 0;
+ bool exit = (_opCode & 0x80) != 0;
- return !Exit;
+ return !exit;
}
- private void FetchOpCode(int[] Mme)
+ private void FetchOpCode(int[] mme)
{
- OpCode = PipeOp;
+ _opCode = _pipeOp;
- PipeOp = Mme[Pc++];
+ _pipeOp = mme[_pc++];
}
private int GetAluResult()
{
- AluOperation Op = (AluOperation)(OpCode & 7);
+ AluOperation op = (AluOperation)(_opCode & 7);
- switch (Op)
+ switch (op)
{
case AluOperation.AluReg:
{
- AluRegOperation AluOp = (AluRegOperation)((OpCode >> 17) & 0x1f);
+ AluRegOperation aluOp = (AluRegOperation)((_opCode >> 17) & 0x1f);
- return GetAluResult(AluOp, GetGprA(), GetGprB());
+ return GetAluResult(aluOp, GetGprA(), GetGprB());
}
case AluOperation.AddImmediate:
@@ -254,40 +254,40 @@ namespace Ryujinx.Graphics.Graphics3d
case AluOperation.BitfieldExtractLslImm:
case AluOperation.BitfieldExtractLslReg:
{
- int BfSrcBit = (OpCode >> 17) & 0x1f;
- int BfSize = (OpCode >> 22) & 0x1f;
- int BfDstBit = (OpCode >> 27) & 0x1f;
+ int bfSrcBit = (_opCode >> 17) & 0x1f;
+ int bfSize = (_opCode >> 22) & 0x1f;
+ int bfDstBit = (_opCode >> 27) & 0x1f;
- int BfMask = (1 << BfSize) - 1;
+ int bfMask = (1 << bfSize) - 1;
- int Dst = GetGprA();
- int Src = GetGprB();
+ int dst = GetGprA();
+ int src = GetGprB();
- switch (Op)
+ switch (op)
{
case AluOperation.BitfieldReplace:
{
- Src = (int)((uint)Src >> BfSrcBit) & BfMask;
+ src = (int)((uint)src >> bfSrcBit) & bfMask;
- Dst &= ~(BfMask << BfDstBit);
+ dst &= ~(bfMask << bfDstBit);
- Dst |= Src << BfDstBit;
+ dst |= src << bfDstBit;
- return Dst;
+ return dst;
}
case AluOperation.BitfieldExtractLslImm:
{
- Src = (int)((uint)Src >> Dst) & BfMask;
+ src = (int)((uint)src >> dst) & bfMask;
- return Src << BfDstBit;
+ return src << bfDstBit;
}
case AluOperation.BitfieldExtractLslReg:
{
- Src = (int)((uint)Src >> BfSrcBit) & BfMask;
+ src = (int)((uint)src >> bfSrcBit) & bfMask;
- return Src << Dst;
+ return src << dst;
}
}
@@ -300,117 +300,117 @@ namespace Ryujinx.Graphics.Graphics3d
}
}
- throw new ArgumentException(nameof(OpCode));
+ throw new ArgumentException(nameof(_opCode));
}
- private int GetAluResult(AluRegOperation AluOp, int A, int B)
+ private int GetAluResult(AluRegOperation aluOp, int a, int b)
{
- switch (AluOp)
+ switch (aluOp)
{
case AluRegOperation.Add:
{
- ulong Result = (ulong)A + (ulong)B;
+ ulong result = (ulong)a + (ulong)b;
- Carry = Result > 0xffffffff;
+ _carry = result > 0xffffffff;
- return (int)Result;
+ return (int)result;
}
case AluRegOperation.AddWithCarry:
{
- ulong Result = (ulong)A + (ulong)B + (Carry ? 1UL : 0UL);
+ ulong result = (ulong)a + (ulong)b + (_carry ? 1UL : 0UL);
- Carry = Result > 0xffffffff;
+ _carry = result > 0xffffffff;
- return (int)Result;
+ return (int)result;
}
case AluRegOperation.Subtract:
{
- ulong Result = (ulong)A - (ulong)B;
+ ulong result = (ulong)a - (ulong)b;
- Carry = Result < 0x100000000;
+ _carry = result < 0x100000000;
- return (int)Result;
+ return (int)result;
}
case AluRegOperation.SubtractWithBorrow:
{
- ulong Result = (ulong)A - (ulong)B - (Carry ? 0UL : 1UL);
+ ulong result = (ulong)a - (ulong)b - (_carry ? 0UL : 1UL);
- Carry = Result < 0x100000000;
+ _carry = result < 0x100000000;
- return (int)Result;
+ return (int)result;
}
- case AluRegOperation.BitwiseExclusiveOr: return A ^ B;
- case AluRegOperation.BitwiseOr: return A | B;
- case AluRegOperation.BitwiseAnd: return A & B;
- case AluRegOperation.BitwiseAndNot: return A & ~B;
- case AluRegOperation.BitwiseNotAnd: return ~(A & B);
+ case AluRegOperation.BitwiseExclusiveOr: return a ^ b;
+ case AluRegOperation.BitwiseOr: return a | b;
+ case AluRegOperation.BitwiseAnd: return a & b;
+ case AluRegOperation.BitwiseAndNot: return a & ~b;
+ case AluRegOperation.BitwiseNotAnd: return ~(a & b);
}
- throw new ArgumentOutOfRangeException(nameof(AluOp));
+ throw new ArgumentOutOfRangeException(nameof(aluOp));
}
private int GetImm()
{
//Note: The immediate is signed, the sign-extension is intended here.
- return OpCode >> 14;
+ return _opCode >> 14;
}
- private void SetMethAddr(int Value)
+ private void SetMethAddr(int value)
{
- MethAddr = (Value >> 0) & 0xfff;
- MethIncr = (Value >> 12) & 0x3f;
+ _methAddr = (value >> 0) & 0xfff;
+ _methIncr = (value >> 12) & 0x3f;
}
- private void SetDstGpr(int Value)
+ private void SetDstGpr(int value)
{
- Gprs[(OpCode >> 8) & 7] = Value;
+ _gprs[(_opCode >> 8) & 7] = value;
}
private int GetGprA()
{
- return GetGprValue((OpCode >> 11) & 7);
+ return GetGprValue((_opCode >> 11) & 7);
}
private int GetGprB()
{
- return GetGprValue((OpCode >> 14) & 7);
+ return GetGprValue((_opCode >> 14) & 7);
}
- private int GetGprValue(int Index)
+ private int GetGprValue(int index)
{
- return Index != 0 ? Gprs[Index] : 0;
+ return index != 0 ? _gprs[index] : 0;
}
private int FetchParam()
{
- int Value;
+ int value;
- if (!Fifo.TryDequeue(out Value))
+ if (!Fifo.TryDequeue(out value))
{
Logger.PrintWarning(LogClass.Gpu, "Macro attempted to fetch an inexistent argument.");
return 0;
}
- return Value;
+ return value;
}
- private int Read(int Reg)
+ private int Read(int reg)
{
- return Engine.Registers[Reg];
+ return _engine.Registers[reg];
}
- private void Send(NvGpuVmm Vmm, int Value)
+ private void Send(NvGpuVmm vmm, int value)
{
- GpuMethodCall MethCall = new GpuMethodCall(MethAddr, Value);
+ GpuMethodCall methCall = new GpuMethodCall(_methAddr, value);
- Engine.CallMethod(Vmm, MethCall);
+ _engine.CallMethod(vmm, methCall);
- MethAddr += MethIncr;
+ _methAddr += _methIncr;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/NvGpuEngine2d.cs b/Ryujinx.Graphics/Graphics3d/NvGpuEngine2d.cs
index 3295f6da..361b1706 100644
--- a/Ryujinx.Graphics/Graphics3d/NvGpuEngine2d.cs
+++ b/Ryujinx.Graphics/Graphics3d/NvGpuEngine2d.cs
@@ -1,4 +1,3 @@
-using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Gal;
using Ryujinx.Graphics.Memory;
using Ryujinx.Graphics.Texture;
@@ -20,187 +19,187 @@ namespace Ryujinx.Graphics.Graphics3d
public int[] Registers { get; private set; }
- private NvGpu Gpu;
+ private NvGpu _gpu;
- public NvGpuEngine2d(NvGpu Gpu)
+ public NvGpuEngine2d(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
Registers = new int[0x238];
}
- public void CallMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ public void CallMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- WriteRegister(MethCall);
+ WriteRegister(methCall);
- if ((NvGpuEngine2dReg)MethCall.Method == NvGpuEngine2dReg.BlitSrcYInt)
+ if ((NvGpuEngine2dReg)methCall.Method == NvGpuEngine2dReg.BlitSrcYInt)
{
- TextureCopy(Vmm);
+ TextureCopy(vmm);
}
}
- private void TextureCopy(NvGpuVmm Vmm)
+ private void TextureCopy(NvGpuVmm vmm)
{
- CopyOperation Operation = (CopyOperation)ReadRegister(NvGpuEngine2dReg.CopyOperation);
+ CopyOperation operation = (CopyOperation)ReadRegister(NvGpuEngine2dReg.CopyOperation);
- int DstFormat = ReadRegister(NvGpuEngine2dReg.DstFormat);
- bool DstLinear = ReadRegister(NvGpuEngine2dReg.DstLinear) != 0;
- int DstWidth = ReadRegister(NvGpuEngine2dReg.DstWidth);
- int DstHeight = ReadRegister(NvGpuEngine2dReg.DstHeight);
- int DstDepth = ReadRegister(NvGpuEngine2dReg.DstDepth);
- int DstLayer = ReadRegister(NvGpuEngine2dReg.DstLayer);
- int DstPitch = ReadRegister(NvGpuEngine2dReg.DstPitch);
- int DstBlkDim = ReadRegister(NvGpuEngine2dReg.DstBlockDimensions);
+ int dstFormat = ReadRegister(NvGpuEngine2dReg.DstFormat);
+ bool dstLinear = ReadRegister(NvGpuEngine2dReg.DstLinear) != 0;
+ int dstWidth = ReadRegister(NvGpuEngine2dReg.DstWidth);
+ int dstHeight = ReadRegister(NvGpuEngine2dReg.DstHeight);
+ int dstDepth = ReadRegister(NvGpuEngine2dReg.DstDepth);
+ int dstLayer = ReadRegister(NvGpuEngine2dReg.DstLayer);
+ int dstPitch = ReadRegister(NvGpuEngine2dReg.DstPitch);
+ int dstBlkDim = ReadRegister(NvGpuEngine2dReg.DstBlockDimensions);
- int SrcFormat = ReadRegister(NvGpuEngine2dReg.SrcFormat);
- bool SrcLinear = ReadRegister(NvGpuEngine2dReg.SrcLinear) != 0;
- int SrcWidth = ReadRegister(NvGpuEngine2dReg.SrcWidth);
- int SrcHeight = ReadRegister(NvGpuEngine2dReg.SrcHeight);
- int SrcDepth = ReadRegister(NvGpuEngine2dReg.SrcDepth);
- int SrcLayer = ReadRegister(NvGpuEngine2dReg.SrcLayer);
- int SrcPitch = ReadRegister(NvGpuEngine2dReg.SrcPitch);
- int SrcBlkDim = ReadRegister(NvGpuEngine2dReg.SrcBlockDimensions);
+ int srcFormat = ReadRegister(NvGpuEngine2dReg.SrcFormat);
+ bool srcLinear = ReadRegister(NvGpuEngine2dReg.SrcLinear) != 0;
+ int srcWidth = ReadRegister(NvGpuEngine2dReg.SrcWidth);
+ int srcHeight = ReadRegister(NvGpuEngine2dReg.SrcHeight);
+ int srcDepth = ReadRegister(NvGpuEngine2dReg.SrcDepth);
+ int srcLayer = ReadRegister(NvGpuEngine2dReg.SrcLayer);
+ int srcPitch = ReadRegister(NvGpuEngine2dReg.SrcPitch);
+ int srcBlkDim = ReadRegister(NvGpuEngine2dReg.SrcBlockDimensions);
- int DstBlitX = ReadRegister(NvGpuEngine2dReg.BlitDstX);
- int DstBlitY = ReadRegister(NvGpuEngine2dReg.BlitDstY);
- int DstBlitW = ReadRegister(NvGpuEngine2dReg.BlitDstW);
- int DstBlitH = ReadRegister(NvGpuEngine2dReg.BlitDstH);
+ int dstBlitX = ReadRegister(NvGpuEngine2dReg.BlitDstX);
+ int dstBlitY = ReadRegister(NvGpuEngine2dReg.BlitDstY);
+ int dstBlitW = ReadRegister(NvGpuEngine2dReg.BlitDstW);
+ int dstBlitH = ReadRegister(NvGpuEngine2dReg.BlitDstH);
- long BlitDuDx = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitDuDxFract);
- long BlitDvDy = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitDvDyFract);
+ long blitDuDx = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitDuDxFract);
+ long blitDvDy = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitDvDyFract);
- long SrcBlitX = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitSrcXFract);
- long SrcBlitY = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitSrcYFract);
+ long srcBlitX = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitSrcXFract);
+ long srcBlitY = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitSrcYFract);
- GalImageFormat SrcImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)SrcFormat);
- GalImageFormat DstImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)DstFormat);
+ GalImageFormat srcImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)srcFormat);
+ GalImageFormat dstImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)dstFormat);
- GalMemoryLayout SrcLayout = GetLayout(SrcLinear);
- GalMemoryLayout DstLayout = GetLayout(DstLinear);
+ GalMemoryLayout srcLayout = GetLayout(srcLinear);
+ GalMemoryLayout dstLayout = GetLayout(dstLinear);
- int SrcBlockHeight = 1 << ((SrcBlkDim >> 4) & 0xf);
- int DstBlockHeight = 1 << ((DstBlkDim >> 4) & 0xf);
+ int srcBlockHeight = 1 << ((srcBlkDim >> 4) & 0xf);
+ int dstBlockHeight = 1 << ((dstBlkDim >> 4) & 0xf);
- long SrcAddress = MakeInt64From2xInt32(NvGpuEngine2dReg.SrcAddress);
- long DstAddress = MakeInt64From2xInt32(NvGpuEngine2dReg.DstAddress);
+ long srcAddress = MakeInt64From2xInt32(NvGpuEngine2dReg.SrcAddress);
+ long dstAddress = MakeInt64From2xInt32(NvGpuEngine2dReg.DstAddress);
- long SrcKey = Vmm.GetPhysicalAddress(SrcAddress);
- long DstKey = Vmm.GetPhysicalAddress(DstAddress);
+ long srcKey = vmm.GetPhysicalAddress(srcAddress);
+ long dstKey = vmm.GetPhysicalAddress(dstAddress);
- bool IsSrcLayered = false;
- bool IsDstLayered = false;
+ bool isSrcLayered = false;
+ bool isDstLayered = false;
- GalTextureTarget SrcTarget = GalTextureTarget.TwoD;
+ GalTextureTarget srcTarget = GalTextureTarget.TwoD;
- if (SrcDepth != 0)
+ if (srcDepth != 0)
{
- SrcTarget = GalTextureTarget.TwoDArray;
- SrcDepth++;
- IsSrcLayered = true;
+ srcTarget = GalTextureTarget.TwoDArray;
+ srcDepth++;
+ isSrcLayered = true;
}
else
{
- SrcDepth = 1;
+ srcDepth = 1;
}
- GalTextureTarget DstTarget = GalTextureTarget.TwoD;
+ GalTextureTarget dstTarget = GalTextureTarget.TwoD;
- if (DstDepth != 0)
+ if (dstDepth != 0)
{
- DstTarget = GalTextureTarget.TwoDArray;
- DstDepth++;
- IsDstLayered = true;
+ dstTarget = GalTextureTarget.TwoDArray;
+ dstDepth++;
+ isDstLayered = true;
}
else
{
- DstDepth = 1;
+ dstDepth = 1;
}
- GalImage SrcTexture = new GalImage(
- SrcWidth,
- SrcHeight,
- 1, SrcDepth, 1,
- SrcBlockHeight, 1,
- SrcLayout,
- SrcImgFormat,
- SrcTarget);
-
- GalImage DstTexture = new GalImage(
- DstWidth,
- DstHeight,
- 1, DstDepth, 1,
- DstBlockHeight, 1,
- DstLayout,
- DstImgFormat,
- DstTarget);
-
- SrcTexture.Pitch = SrcPitch;
- DstTexture.Pitch = DstPitch;
-
- long GetLayerOffset(GalImage Image, int Layer)
+ GalImage srcTexture = new GalImage(
+ srcWidth,
+ srcHeight,
+ 1, srcDepth, 1,
+ srcBlockHeight, 1,
+ srcLayout,
+ srcImgFormat,
+ srcTarget);
+
+ GalImage dstTexture = new GalImage(
+ dstWidth,
+ dstHeight,
+ 1, dstDepth, 1,
+ dstBlockHeight, 1,
+ dstLayout,
+ dstImgFormat,
+ dstTarget);
+
+ srcTexture.Pitch = srcPitch;
+ dstTexture.Pitch = dstPitch;
+
+ long GetLayerOffset(GalImage image, int layer)
{
- int TargetMipLevel = Image.MaxMipmapLevel <= 1 ? 1 : Image.MaxMipmapLevel - 1;
- return ImageUtils.GetLayerOffset(Image, TargetMipLevel) * Layer;
+ int targetMipLevel = image.MaxMipmapLevel <= 1 ? 1 : image.MaxMipmapLevel - 1;
+ return ImageUtils.GetLayerOffset(image, targetMipLevel) * layer;
}
- int SrcLayerIndex = -1;
+ int srcLayerIndex = -1;
- if (IsSrcLayered && Gpu.ResourceManager.TryGetTextureLayer(SrcKey, out SrcLayerIndex) && SrcLayerIndex != 0)
+ if (isSrcLayered && _gpu.ResourceManager.TryGetTextureLayer(srcKey, out srcLayerIndex) && srcLayerIndex != 0)
{
- SrcKey = SrcKey - GetLayerOffset(SrcTexture, SrcLayerIndex);
+ srcKey = srcKey - GetLayerOffset(srcTexture, srcLayerIndex);
}
- int DstLayerIndex = -1;
+ int dstLayerIndex = -1;
- if (IsDstLayered && Gpu.ResourceManager.TryGetTextureLayer(DstKey, out DstLayerIndex) && DstLayerIndex != 0)
+ if (isDstLayered && _gpu.ResourceManager.TryGetTextureLayer(dstKey, out dstLayerIndex) && dstLayerIndex != 0)
{
- DstKey = DstKey - GetLayerOffset(DstTexture, DstLayerIndex);
+ dstKey = dstKey - GetLayerOffset(dstTexture, dstLayerIndex);
}
- Gpu.ResourceManager.SendTexture(Vmm, SrcKey, SrcTexture);
- Gpu.ResourceManager.SendTexture(Vmm, DstKey, DstTexture);
+ _gpu.ResourceManager.SendTexture(vmm, srcKey, srcTexture);
+ _gpu.ResourceManager.SendTexture(vmm, dstKey, dstTexture);
- if (IsSrcLayered && SrcLayerIndex == -1)
+ if (isSrcLayered && srcLayerIndex == -1)
{
- for (int Layer = 0; Layer < SrcTexture.LayerCount; Layer++)
+ for (int layer = 0; layer < srcTexture.LayerCount; layer++)
{
- Gpu.ResourceManager.SetTextureArrayLayer(SrcKey + GetLayerOffset(SrcTexture, Layer), Layer);
+ _gpu.ResourceManager.SetTextureArrayLayer(srcKey + GetLayerOffset(srcTexture, layer), layer);
}
- SrcLayerIndex = 0;
+ srcLayerIndex = 0;
}
- if (IsDstLayered && DstLayerIndex == -1)
+ if (isDstLayered && dstLayerIndex == -1)
{
- for (int Layer = 0; Layer < DstTexture.LayerCount; Layer++)
+ for (int layer = 0; layer < dstTexture.LayerCount; layer++)
{
- Gpu.ResourceManager.SetTextureArrayLayer(DstKey + GetLayerOffset(DstTexture, Layer), Layer);
+ _gpu.ResourceManager.SetTextureArrayLayer(dstKey + GetLayerOffset(dstTexture, layer), layer);
}
- DstLayerIndex = 0;
+ dstLayerIndex = 0;
}
- int SrcBlitX1 = (int)(SrcBlitX >> 32);
- int SrcBlitY1 = (int)(SrcBlitY >> 32);
-
- int SrcBlitX2 = (int)(SrcBlitX + DstBlitW * BlitDuDx >> 32);
- int SrcBlitY2 = (int)(SrcBlitY + DstBlitH * BlitDvDy >> 32);
-
- Gpu.Renderer.RenderTarget.Copy(
- SrcTexture,
- DstTexture,
- SrcKey,
- DstKey,
- SrcLayerIndex,
- DstLayerIndex,
- SrcBlitX1,
- SrcBlitY1,
- SrcBlitX2,
- SrcBlitY2,
- DstBlitX,
- DstBlitY,
- DstBlitX + DstBlitW,
- DstBlitY + DstBlitH);
+ int srcBlitX1 = (int)(srcBlitX >> 32);
+ int srcBlitY1 = (int)(srcBlitY >> 32);
+
+ int srcBlitX2 = (int)(srcBlitX + dstBlitW * blitDuDx >> 32);
+ int srcBlitY2 = (int)(srcBlitY + dstBlitH * blitDvDy >> 32);
+
+ _gpu.Renderer.RenderTarget.Copy(
+ srcTexture,
+ dstTexture,
+ srcKey,
+ dstKey,
+ srcLayerIndex,
+ dstLayerIndex,
+ srcBlitX1,
+ srcBlitY1,
+ srcBlitX2,
+ srcBlitY2,
+ dstBlitX,
+ dstBlitY,
+ dstBlitX + dstBlitW,
+ dstBlitY + dstBlitH);
//Do a guest side copy aswell. This is necessary when
//the texture is modified by the guest, however it doesn't
@@ -209,51 +208,51 @@ namespace Ryujinx.Graphics.Graphics3d
// FIXME: SUPPORT MULTILAYER CORRECTLY HERE (this will cause weird stuffs on the first layer)
ImageUtils.CopyTexture(
- Vmm,
- SrcTexture,
- DstTexture,
- SrcAddress,
- DstAddress,
- SrcBlitX1,
- SrcBlitY1,
- DstBlitX,
- DstBlitY,
- DstBlitW,
- DstBlitH);
-
- Vmm.IsRegionModified(DstKey, ImageUtils.GetSize(DstTexture), NvGpuBufferType.Texture);
+ vmm,
+ srcTexture,
+ dstTexture,
+ srcAddress,
+ dstAddress,
+ srcBlitX1,
+ srcBlitY1,
+ dstBlitX,
+ dstBlitY,
+ dstBlitW,
+ dstBlitH);
+
+ vmm.IsRegionModified(dstKey, ImageUtils.GetSize(dstTexture), NvGpuBufferType.Texture);
}
- private static GalMemoryLayout GetLayout(bool Linear)
+ private static GalMemoryLayout GetLayout(bool linear)
{
- return Linear
+ return linear
? GalMemoryLayout.Pitch
: GalMemoryLayout.BlockLinear;
}
- private long MakeInt64From2xInt32(NvGpuEngine2dReg Reg)
+ private long MakeInt64From2xInt32(NvGpuEngine2dReg reg)
{
return
- (long)Registers[(int)Reg + 0] << 32 |
- (uint)Registers[(int)Reg + 1];
+ (long)Registers[(int)reg + 0] << 32 |
+ (uint)Registers[(int)reg + 1];
}
- private void WriteRegister(GpuMethodCall MethCall)
+ private void WriteRegister(GpuMethodCall methCall)
{
- Registers[MethCall.Method] = MethCall.Argument;
+ Registers[methCall.Method] = methCall.Argument;
}
- private long ReadRegisterFixed1_31_32(NvGpuEngine2dReg Reg)
+ private long ReadRegisterFixed1_31_32(NvGpuEngine2dReg reg)
{
- long Low = (uint)ReadRegister(Reg + 0);
- long High = (uint)ReadRegister(Reg + 1);
+ long low = (uint)ReadRegister(reg + 0);
+ long high = (uint)ReadRegister(reg + 1);
- return Low | (High << 32);
+ return low | (high << 32);
}
- private int ReadRegister(NvGpuEngine2dReg Reg)
+ private int ReadRegister(NvGpuEngine2dReg reg)
{
- return Registers[(int)Reg];
+ return Registers[(int)reg];
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs b/Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs
index 370fe1fa..605cbda8 100644
--- a/Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs
+++ b/Ryujinx.Graphics/Graphics3d/NvGpuEngine3d.cs
@@ -1,5 +1,4 @@
using Ryujinx.Common;
-using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Gal;
using Ryujinx.Graphics.Memory;
using Ryujinx.Graphics.Texture;
@@ -12,9 +11,9 @@ namespace Ryujinx.Graphics.Graphics3d
{
public int[] Registers { get; private set; }
- private NvGpu Gpu;
+ private NvGpu _gpu;
- private Dictionary<int, NvGpuMethod> Methods;
+ private Dictionary<int, NvGpuMethod> _methods;
private struct ConstBuffer
{
@@ -23,33 +22,33 @@ namespace Ryujinx.Graphics.Graphics3d
public int Size;
}
- private ConstBuffer[][] ConstBuffers;
+ private ConstBuffer[][] _constBuffers;
// Viewport dimensions kept for scissor test limits
- private int ViewportX0 = 0;
- private int ViewportY0 = 0;
- private int ViewportX1 = 0;
- private int ViewportY1 = 0;
- private int ViewportWidth = 0;
- private int ViewportHeight = 0;
+ private int _viewportX0 = 0;
+ private int _viewportY0 = 0;
+ private int _viewportX1 = 0;
+ private int _viewportY1 = 0;
+ private int _viewportWidth = 0;
+ private int _viewportHeight = 0;
- private int CurrentInstance = 0;
+ private int _currentInstance = 0;
- public NvGpuEngine3d(NvGpu Gpu)
+ public NvGpuEngine3d(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
Registers = new int[0xe00];
- Methods = new Dictionary<int, NvGpuMethod>();
+ _methods = new Dictionary<int, NvGpuMethod>();
- void AddMethod(int Meth, int Count, int Stride, NvGpuMethod Method)
+ void AddMethod(int meth, int count, int stride, NvGpuMethod method)
{
- while (Count-- > 0)
+ while (count-- > 0)
{
- Methods.Add(Meth, Method);
+ _methods.Add(meth, method);
- Meth += Stride;
+ meth += stride;
}
}
@@ -59,11 +58,11 @@ namespace Ryujinx.Graphics.Graphics3d
AddMethod(0x8e4, 16, 1, CbData);
AddMethod(0x904, 5, 8, CbBind);
- ConstBuffers = new ConstBuffer[6][];
+ _constBuffers = new ConstBuffer[6][];
- for (int Index = 0; Index < ConstBuffers.Length; Index++)
+ for (int index = 0; index < _constBuffers.Length; index++)
{
- ConstBuffers[Index] = new ConstBuffer[18];
+ _constBuffers[index] = new ConstBuffer[18];
}
//Ensure that all components are enabled by default.
@@ -72,227 +71,227 @@ namespace Ryujinx.Graphics.Graphics3d
WriteRegister(NvGpuEngine3dReg.FrameBufferSrgb, 1);
- WriteRegister(NvGpuEngine3dReg.FrontFace, (int)GalFrontFace.CW);
+ WriteRegister(NvGpuEngine3dReg.FrontFace, (int)GalFrontFace.Cw);
- for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+ for (int index = 0; index < GalPipelineState.RenderTargetsCount; index++)
{
- WriteRegister(NvGpuEngine3dReg.IBlendNEquationRgb + Index * 8, (int)GalBlendEquation.FuncAdd);
- WriteRegister(NvGpuEngine3dReg.IBlendNFuncSrcRgb + Index * 8, (int)GalBlendFactor.One);
- WriteRegister(NvGpuEngine3dReg.IBlendNFuncDstRgb + Index * 8, (int)GalBlendFactor.Zero);
- WriteRegister(NvGpuEngine3dReg.IBlendNEquationAlpha + Index * 8, (int)GalBlendEquation.FuncAdd);
- WriteRegister(NvGpuEngine3dReg.IBlendNFuncSrcAlpha + Index * 8, (int)GalBlendFactor.One);
- WriteRegister(NvGpuEngine3dReg.IBlendNFuncDstAlpha + Index * 8, (int)GalBlendFactor.Zero);
+ WriteRegister(NvGpuEngine3dReg.IBlendNEquationRgb + index * 8, (int)GalBlendEquation.FuncAdd);
+ WriteRegister(NvGpuEngine3dReg.IBlendNFuncSrcRgb + index * 8, (int)GalBlendFactor.One);
+ WriteRegister(NvGpuEngine3dReg.IBlendNFuncDstRgb + index * 8, (int)GalBlendFactor.Zero);
+ WriteRegister(NvGpuEngine3dReg.IBlendNEquationAlpha + index * 8, (int)GalBlendEquation.FuncAdd);
+ WriteRegister(NvGpuEngine3dReg.IBlendNFuncSrcAlpha + index * 8, (int)GalBlendFactor.One);
+ WriteRegister(NvGpuEngine3dReg.IBlendNFuncDstAlpha + index * 8, (int)GalBlendFactor.Zero);
}
}
- public void CallMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ public void CallMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- if (Methods.TryGetValue(MethCall.Method, out NvGpuMethod Method))
+ if (_methods.TryGetValue(methCall.Method, out NvGpuMethod method))
{
- Method(Vmm, MethCall);
+ method(vmm, methCall);
}
else
{
- WriteRegister(MethCall);
+ WriteRegister(methCall);
}
}
- private void VertexEndGl(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void VertexEndGl(NvGpuVmm vmm, GpuMethodCall methCall)
{
LockCaches();
- GalPipelineState State = new GalPipelineState();
+ GalPipelineState state = new GalPipelineState();
// Framebuffer must be run configured because viewport dimensions may be used in other methods
- SetFrameBuffer(State);
+ SetFrameBuffer(state);
- for (int FbIndex = 0; FbIndex < 8; FbIndex++)
+ for (int fbIndex = 0; fbIndex < 8; fbIndex++)
{
- SetFrameBuffer(Vmm, FbIndex);
+ SetFrameBuffer(vmm, fbIndex);
}
- SetFrontFace(State);
- SetCullFace(State);
- SetDepth(State);
- SetStencil(State);
- SetScissor(State);
- SetBlending(State);
- SetColorMask(State);
- SetPrimitiveRestart(State);
+ SetFrontFace(state);
+ SetCullFace(state);
+ SetDepth(state);
+ SetStencil(state);
+ SetScissor(state);
+ SetBlending(state);
+ SetColorMask(state);
+ SetPrimitiveRestart(state);
- SetZeta(Vmm);
+ SetZeta(vmm);
SetRenderTargets();
- long[] Keys = UploadShaders(Vmm);
+ long[] keys = UploadShaders(vmm);
- Gpu.Renderer.Shader.BindProgram();
+ _gpu.Renderer.Shader.BindProgram();
- UploadTextures(Vmm, State, Keys);
- UploadConstBuffers(Vmm, State, Keys);
- UploadVertexArrays(Vmm, State);
+ UploadTextures(vmm, state, keys);
+ UploadConstBuffers(vmm, state, keys);
+ UploadVertexArrays(vmm, state);
- DispatchRender(Vmm, State);
+ DispatchRender(vmm, state);
UnlockCaches();
}
private void LockCaches()
{
- Gpu.Renderer.Buffer.LockCache();
- Gpu.Renderer.Rasterizer.LockCaches();
- Gpu.Renderer.Texture.LockCache();
+ _gpu.Renderer.Buffer.LockCache();
+ _gpu.Renderer.Rasterizer.LockCaches();
+ _gpu.Renderer.Texture.LockCache();
}
private void UnlockCaches()
{
- Gpu.Renderer.Buffer.UnlockCache();
- Gpu.Renderer.Rasterizer.UnlockCaches();
- Gpu.Renderer.Texture.UnlockCache();
+ _gpu.Renderer.Buffer.UnlockCache();
+ _gpu.Renderer.Rasterizer.UnlockCaches();
+ _gpu.Renderer.Texture.UnlockCache();
}
- private void ClearBuffers(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void ClearBuffers(NvGpuVmm vmm, GpuMethodCall methCall)
{
- int Attachment = (MethCall.Argument >> 6) & 0xf;
+ int attachment = (methCall.Argument >> 6) & 0xf;
- GalClearBufferFlags Flags = (GalClearBufferFlags)(MethCall.Argument & 0x3f);
+ GalClearBufferFlags flags = (GalClearBufferFlags)(methCall.Argument & 0x3f);
- float Red = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 0);
- float Green = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 1);
- float Blue = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 2);
- float Alpha = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 3);
+ float red = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 0);
+ float green = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 1);
+ float blue = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 2);
+ float alpha = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 3);
- float Depth = ReadRegisterFloat(NvGpuEngine3dReg.ClearDepth);
+ float depth = ReadRegisterFloat(NvGpuEngine3dReg.ClearDepth);
- int Stencil = ReadRegister(NvGpuEngine3dReg.ClearStencil);
+ int stencil = ReadRegister(NvGpuEngine3dReg.ClearStencil);
- SetFrameBuffer(Vmm, Attachment);
+ SetFrameBuffer(vmm, attachment);
- SetZeta(Vmm);
+ SetZeta(vmm);
SetRenderTargets();
- Gpu.Renderer.RenderTarget.Bind();
+ _gpu.Renderer.RenderTarget.Bind();
- Gpu.Renderer.Rasterizer.ClearBuffers(Flags, Attachment, Red, Green, Blue, Alpha, Depth, Stencil);
+ _gpu.Renderer.Rasterizer.ClearBuffers(flags, attachment, red, green, blue, alpha, depth, stencil);
- Gpu.Renderer.Pipeline.ResetDepthMask();
- Gpu.Renderer.Pipeline.ResetColorMask(Attachment);
+ _gpu.Renderer.Pipeline.ResetDepthMask();
+ _gpu.Renderer.Pipeline.ResetColorMask(attachment);
}
- private void SetFrameBuffer(NvGpuVmm Vmm, int FbIndex)
+ private void SetFrameBuffer(NvGpuVmm vmm, int fbIndex)
{
- long VA = MakeInt64From2xInt32(NvGpuEngine3dReg.FrameBufferNAddress + FbIndex * 0x10);
+ long va = MakeInt64From2xInt32(NvGpuEngine3dReg.FrameBufferNAddress + fbIndex * 0x10);
- int SurfFormat = ReadRegister(NvGpuEngine3dReg.FrameBufferNFormat + FbIndex * 0x10);
+ int surfFormat = ReadRegister(NvGpuEngine3dReg.FrameBufferNFormat + fbIndex * 0x10);
- if (VA == 0 || SurfFormat == 0)
+ if (va == 0 || surfFormat == 0)
{
- Gpu.Renderer.RenderTarget.UnbindColor(FbIndex);
+ _gpu.Renderer.RenderTarget.UnbindColor(fbIndex);
return;
}
- long Key = Vmm.GetPhysicalAddress(VA);
+ long key = vmm.GetPhysicalAddress(va);
- int Width = ReadRegister(NvGpuEngine3dReg.FrameBufferNWidth + FbIndex * 0x10);
- int Height = ReadRegister(NvGpuEngine3dReg.FrameBufferNHeight + FbIndex * 0x10);
+ int width = ReadRegister(NvGpuEngine3dReg.FrameBufferNWidth + fbIndex * 0x10);
+ int height = ReadRegister(NvGpuEngine3dReg.FrameBufferNHeight + fbIndex * 0x10);
- int ArrayMode = ReadRegister(NvGpuEngine3dReg.FrameBufferNArrayMode + FbIndex * 0x10);
- int LayerCount = ArrayMode & 0xFFFF;
- int LayerStride = ReadRegister(NvGpuEngine3dReg.FrameBufferNLayerStride + FbIndex * 0x10);
- int BaseLayer = ReadRegister(NvGpuEngine3dReg.FrameBufferNBaseLayer + FbIndex * 0x10);
- int BlockDim = ReadRegister(NvGpuEngine3dReg.FrameBufferNBlockDim + FbIndex * 0x10);
+ int arrayMode = ReadRegister(NvGpuEngine3dReg.FrameBufferNArrayMode + fbIndex * 0x10);
+ int layerCount = arrayMode & 0xFFFF;
+ int layerStride = ReadRegister(NvGpuEngine3dReg.FrameBufferNLayerStride + fbIndex * 0x10);
+ int baseLayer = ReadRegister(NvGpuEngine3dReg.FrameBufferNBaseLayer + fbIndex * 0x10);
+ int blockDim = ReadRegister(NvGpuEngine3dReg.FrameBufferNBlockDim + fbIndex * 0x10);
- int GobBlockHeight = 1 << ((BlockDim >> 4) & 7);
+ int gobBlockHeight = 1 << ((blockDim >> 4) & 7);
- GalMemoryLayout Layout = (GalMemoryLayout)((BlockDim >> 12) & 1);
+ GalMemoryLayout layout = (GalMemoryLayout)((blockDim >> 12) & 1);
- float TX = ReadRegisterFloat(NvGpuEngine3dReg.ViewportNTranslateX + FbIndex * 8);
- float TY = ReadRegisterFloat(NvGpuEngine3dReg.ViewportNTranslateY + FbIndex * 8);
+ float tx = ReadRegisterFloat(NvGpuEngine3dReg.ViewportNTranslateX + fbIndex * 8);
+ float ty = ReadRegisterFloat(NvGpuEngine3dReg.ViewportNTranslateY + fbIndex * 8);
- float SX = ReadRegisterFloat(NvGpuEngine3dReg.ViewportNScaleX + FbIndex * 8);
- float SY = ReadRegisterFloat(NvGpuEngine3dReg.ViewportNScaleY + FbIndex * 8);
+ float sx = ReadRegisterFloat(NvGpuEngine3dReg.ViewportNScaleX + fbIndex * 8);
+ float sy = ReadRegisterFloat(NvGpuEngine3dReg.ViewportNScaleY + fbIndex * 8);
- ViewportX0 = (int)MathF.Max(0, TX - MathF.Abs(SX));
- ViewportY0 = (int)MathF.Max(0, TY - MathF.Abs(SY));
+ _viewportX0 = (int)MathF.Max(0, tx - MathF.Abs(sx));
+ _viewportY0 = (int)MathF.Max(0, ty - MathF.Abs(sy));
- ViewportX1 = (int)(TX + MathF.Abs(SX));
- ViewportY1 = (int)(TY + MathF.Abs(SY));
+ _viewportX1 = (int)(tx + MathF.Abs(sx));
+ _viewportY1 = (int)(ty + MathF.Abs(sy));
- GalImageFormat Format = ImageUtils.ConvertSurface((GalSurfaceFormat)SurfFormat);
+ GalImageFormat format = ImageUtils.ConvertSurface((GalSurfaceFormat)surfFormat);
- GalImage Image = new GalImage(Width, Height, 1, 1, 1, GobBlockHeight, 1, Layout, Format, GalTextureTarget.TwoD);
+ GalImage image = new GalImage(width, height, 1, 1, 1, gobBlockHeight, 1, layout, format, GalTextureTarget.TwoD);
- Gpu.ResourceManager.SendColorBuffer(Vmm, Key, FbIndex, Image);
+ _gpu.ResourceManager.SendColorBuffer(vmm, key, fbIndex, image);
- Gpu.Renderer.RenderTarget.SetViewport(FbIndex, ViewportX0, ViewportY0, ViewportX1 - ViewportX0, ViewportY1 - ViewportY0);
+ _gpu.Renderer.RenderTarget.SetViewport(fbIndex, _viewportX0, _viewportY0, _viewportX1 - _viewportX0, _viewportY1 - _viewportY0);
}
- private void SetFrameBuffer(GalPipelineState State)
+ private void SetFrameBuffer(GalPipelineState state)
{
- State.FramebufferSrgb = ReadRegisterBool(NvGpuEngine3dReg.FrameBufferSrgb);
+ state.FramebufferSrgb = ReadRegisterBool(NvGpuEngine3dReg.FrameBufferSrgb);
- State.FlipX = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleX);
- State.FlipY = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleY);
+ state.FlipX = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleX);
+ state.FlipY = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleY);
- int ScreenYControl = ReadRegister(NvGpuEngine3dReg.ScreenYControl);
+ int screenYControl = ReadRegister(NvGpuEngine3dReg.ScreenYControl);
- bool NegateY = (ScreenYControl & 1) != 0;
+ bool negateY = (screenYControl & 1) != 0;
- if (NegateY)
+ if (negateY)
{
- State.FlipY = -State.FlipY;
+ state.FlipY = -state.FlipY;
}
}
- private void SetZeta(NvGpuVmm Vmm)
+ private void SetZeta(NvGpuVmm vmm)
{
- long VA = MakeInt64From2xInt32(NvGpuEngine3dReg.ZetaAddress);
+ long va = MakeInt64From2xInt32(NvGpuEngine3dReg.ZetaAddress);
- int ZetaFormat = ReadRegister(NvGpuEngine3dReg.ZetaFormat);
+ int zetaFormat = ReadRegister(NvGpuEngine3dReg.ZetaFormat);
- int BlockDim = ReadRegister(NvGpuEngine3dReg.ZetaBlockDimensions);
+ int blockDim = ReadRegister(NvGpuEngine3dReg.ZetaBlockDimensions);
- int GobBlockHeight = 1 << ((BlockDim >> 4) & 7);
+ int gobBlockHeight = 1 << ((blockDim >> 4) & 7);
- GalMemoryLayout Layout = (GalMemoryLayout)((BlockDim >> 12) & 1); //?
+ GalMemoryLayout layout = (GalMemoryLayout)((blockDim >> 12) & 1); //?
- bool ZetaEnable = ReadRegisterBool(NvGpuEngine3dReg.ZetaEnable);
+ bool zetaEnable = ReadRegisterBool(NvGpuEngine3dReg.ZetaEnable);
- if (VA == 0 || ZetaFormat == 0 || !ZetaEnable)
+ if (va == 0 || zetaFormat == 0 || !zetaEnable)
{
- Gpu.Renderer.RenderTarget.UnbindZeta();
+ _gpu.Renderer.RenderTarget.UnbindZeta();
return;
}
- long Key = Vmm.GetPhysicalAddress(VA);
+ long key = vmm.GetPhysicalAddress(va);
- int Width = ReadRegister(NvGpuEngine3dReg.ZetaHoriz);
- int Height = ReadRegister(NvGpuEngine3dReg.ZetaVert);
+ int width = ReadRegister(NvGpuEngine3dReg.ZetaHoriz);
+ int height = ReadRegister(NvGpuEngine3dReg.ZetaVert);
- GalImageFormat Format = ImageUtils.ConvertZeta((GalZetaFormat)ZetaFormat);
+ GalImageFormat format = ImageUtils.ConvertZeta((GalZetaFormat)zetaFormat);
// TODO: Support non 2D?
- GalImage Image = new GalImage(Width, Height, 1, 1, 1, GobBlockHeight, 1, Layout, Format, GalTextureTarget.TwoD);
+ GalImage image = new GalImage(width, height, 1, 1, 1, gobBlockHeight, 1, layout, format, GalTextureTarget.TwoD);
- Gpu.ResourceManager.SendZetaBuffer(Vmm, Key, Image);
+ _gpu.ResourceManager.SendZetaBuffer(vmm, key, image);
}
- private long[] UploadShaders(NvGpuVmm Vmm)
+ private long[] UploadShaders(NvGpuVmm vmm)
{
- long[] Keys = new long[5];
+ long[] keys = new long[5];
- long BasePosition = MakeInt64From2xInt32(NvGpuEngine3dReg.ShaderAddress);
+ long basePosition = MakeInt64From2xInt32(NvGpuEngine3dReg.ShaderAddress);
- int Index = 1;
+ int index = 1;
- int VpAControl = ReadRegister(NvGpuEngine3dReg.ShaderNControl);
+ int vpAControl = ReadRegister(NvGpuEngine3dReg.ShaderNControl);
- bool VpAEnable = (VpAControl & 1) != 0;
+ bool vpAEnable = (vpAControl & 1) != 0;
- if (VpAEnable)
+ if (vpAEnable)
{
//Note: The maxwell supports 2 vertex programs, usually
//only VP B is used, but in some cases VP A is also used.
@@ -300,51 +299,51 @@ namespace Ryujinx.Graphics.Graphics3d
//shader stage.
//The graphics abstraction layer has a special overload for this
//case, which should merge the two shaders into one vertex shader.
- int VpAOffset = ReadRegister(NvGpuEngine3dReg.ShaderNOffset);
- int VpBOffset = ReadRegister(NvGpuEngine3dReg.ShaderNOffset + 0x10);
+ int vpAOffset = ReadRegister(NvGpuEngine3dReg.ShaderNOffset);
+ int vpBOffset = ReadRegister(NvGpuEngine3dReg.ShaderNOffset + 0x10);
- long VpAPos = BasePosition + (uint)VpAOffset;
- long VpBPos = BasePosition + (uint)VpBOffset;
+ long vpAPos = basePosition + (uint)vpAOffset;
+ long vpBPos = basePosition + (uint)vpBOffset;
- Keys[(int)GalShaderType.Vertex] = VpBPos;
+ keys[(int)GalShaderType.Vertex] = vpBPos;
- Gpu.Renderer.Shader.Create(Vmm, VpAPos, VpBPos, GalShaderType.Vertex);
- Gpu.Renderer.Shader.Bind(VpBPos);
+ _gpu.Renderer.Shader.Create(vmm, vpAPos, vpBPos, GalShaderType.Vertex);
+ _gpu.Renderer.Shader.Bind(vpBPos);
- Index = 2;
+ index = 2;
}
- for (; Index < 6; Index++)
+ for (; index < 6; index++)
{
- GalShaderType Type = GetTypeFromProgram(Index);
+ GalShaderType type = GetTypeFromProgram(index);
- int Control = ReadRegister(NvGpuEngine3dReg.ShaderNControl + Index * 0x10);
- int Offset = ReadRegister(NvGpuEngine3dReg.ShaderNOffset + Index * 0x10);
+ int control = ReadRegister(NvGpuEngine3dReg.ShaderNControl + index * 0x10);
+ int offset = ReadRegister(NvGpuEngine3dReg.ShaderNOffset + index * 0x10);
//Note: Vertex Program (B) is always enabled.
- bool Enable = (Control & 1) != 0 || Index == 1;
+ bool enable = (control & 1) != 0 || index == 1;
- if (!Enable)
+ if (!enable)
{
- Gpu.Renderer.Shader.Unbind(Type);
+ _gpu.Renderer.Shader.Unbind(type);
continue;
}
- long Key = BasePosition + (uint)Offset;
+ long key = basePosition + (uint)offset;
- Keys[(int)Type] = Key;
+ keys[(int)type] = key;
- Gpu.Renderer.Shader.Create(Vmm, Key, Type);
- Gpu.Renderer.Shader.Bind(Key);
+ _gpu.Renderer.Shader.Create(vmm, key, type);
+ _gpu.Renderer.Shader.Bind(key);
}
- return Keys;
+ return keys;
}
- private static GalShaderType GetTypeFromProgram(int Program)
+ private static GalShaderType GetTypeFromProgram(int program)
{
- switch (Program)
+ switch (program)
{
case 0:
case 1: return GalShaderType.Vertex;
@@ -354,104 +353,104 @@ namespace Ryujinx.Graphics.Graphics3d
case 5: return GalShaderType.Fragment;
}
- throw new ArgumentOutOfRangeException(nameof(Program));
+ throw new ArgumentOutOfRangeException(nameof(program));
}
- private void SetFrontFace(GalPipelineState State)
+ private void SetFrontFace(GalPipelineState state)
{
- float SignX = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleX);
- float SignY = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleY);
+ float signX = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleX);
+ float signY = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleY);
- GalFrontFace FrontFace = (GalFrontFace)ReadRegister(NvGpuEngine3dReg.FrontFace);
+ GalFrontFace frontFace = (GalFrontFace)ReadRegister(NvGpuEngine3dReg.FrontFace);
//Flipping breaks facing. Flipping front facing too fixes it
- if (SignX != SignY)
+ if (signX != signY)
{
- switch (FrontFace)
+ switch (frontFace)
{
- case GalFrontFace.CW: FrontFace = GalFrontFace.CCW; break;
- case GalFrontFace.CCW: FrontFace = GalFrontFace.CW; break;
+ case GalFrontFace.Cw: frontFace = GalFrontFace.Ccw; break;
+ case GalFrontFace.Ccw: frontFace = GalFrontFace.Cw; break;
}
}
- State.FrontFace = FrontFace;
+ state.FrontFace = frontFace;
}
- private void SetCullFace(GalPipelineState State)
+ private void SetCullFace(GalPipelineState state)
{
- State.CullFaceEnabled = ReadRegisterBool(NvGpuEngine3dReg.CullFaceEnable);
+ state.CullFaceEnabled = ReadRegisterBool(NvGpuEngine3dReg.CullFaceEnable);
- if (State.CullFaceEnabled)
+ if (state.CullFaceEnabled)
{
- State.CullFace = (GalCullFace)ReadRegister(NvGpuEngine3dReg.CullFace);
+ state.CullFace = (GalCullFace)ReadRegister(NvGpuEngine3dReg.CullFace);
}
}
- private void SetDepth(GalPipelineState State)
+ private void SetDepth(GalPipelineState state)
{
- State.DepthTestEnabled = ReadRegisterBool(NvGpuEngine3dReg.DepthTestEnable);
+ state.DepthTestEnabled = ReadRegisterBool(NvGpuEngine3dReg.DepthTestEnable);
- State.DepthWriteEnabled = ReadRegisterBool(NvGpuEngine3dReg.DepthWriteEnable);
+ state.DepthWriteEnabled = ReadRegisterBool(NvGpuEngine3dReg.DepthWriteEnable);
- if (State.DepthTestEnabled)
+ if (state.DepthTestEnabled)
{
- State.DepthFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.DepthTestFunction);
+ state.DepthFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.DepthTestFunction);
}
- State.DepthRangeNear = ReadRegisterFloat(NvGpuEngine3dReg.DepthRangeNNear);
- State.DepthRangeFar = ReadRegisterFloat(NvGpuEngine3dReg.DepthRangeNFar);
+ state.DepthRangeNear = ReadRegisterFloat(NvGpuEngine3dReg.DepthRangeNNear);
+ state.DepthRangeFar = ReadRegisterFloat(NvGpuEngine3dReg.DepthRangeNFar);
}
- private void SetStencil(GalPipelineState State)
+ private void SetStencil(GalPipelineState state)
{
- State.StencilTestEnabled = ReadRegisterBool(NvGpuEngine3dReg.StencilEnable);
+ state.StencilTestEnabled = ReadRegisterBool(NvGpuEngine3dReg.StencilEnable);
- if (State.StencilTestEnabled)
+ if (state.StencilTestEnabled)
{
- State.StencilBackFuncFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.StencilBackFuncFunc);
- State.StencilBackFuncRef = ReadRegister(NvGpuEngine3dReg.StencilBackFuncRef);
- State.StencilBackFuncMask = (uint)ReadRegister(NvGpuEngine3dReg.StencilBackFuncMask);
- State.StencilBackOpFail = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilBackOpFail);
- State.StencilBackOpZFail = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilBackOpZFail);
- State.StencilBackOpZPass = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilBackOpZPass);
- State.StencilBackMask = (uint)ReadRegister(NvGpuEngine3dReg.StencilBackMask);
-
- State.StencilFrontFuncFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.StencilFrontFuncFunc);
- State.StencilFrontFuncRef = ReadRegister(NvGpuEngine3dReg.StencilFrontFuncRef);
- State.StencilFrontFuncMask = (uint)ReadRegister(NvGpuEngine3dReg.StencilFrontFuncMask);
- State.StencilFrontOpFail = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilFrontOpFail);
- State.StencilFrontOpZFail = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilFrontOpZFail);
- State.StencilFrontOpZPass = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilFrontOpZPass);
- State.StencilFrontMask = (uint)ReadRegister(NvGpuEngine3dReg.StencilFrontMask);
+ state.StencilBackFuncFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.StencilBackFuncFunc);
+ state.StencilBackFuncRef = ReadRegister(NvGpuEngine3dReg.StencilBackFuncRef);
+ state.StencilBackFuncMask = (uint)ReadRegister(NvGpuEngine3dReg.StencilBackFuncMask);
+ state.StencilBackOpFail = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilBackOpFail);
+ state.StencilBackOpZFail = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilBackOpZFail);
+ state.StencilBackOpZPass = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilBackOpZPass);
+ state.StencilBackMask = (uint)ReadRegister(NvGpuEngine3dReg.StencilBackMask);
+
+ state.StencilFrontFuncFunc = (GalComparisonOp)ReadRegister(NvGpuEngine3dReg.StencilFrontFuncFunc);
+ state.StencilFrontFuncRef = ReadRegister(NvGpuEngine3dReg.StencilFrontFuncRef);
+ state.StencilFrontFuncMask = (uint)ReadRegister(NvGpuEngine3dReg.StencilFrontFuncMask);
+ state.StencilFrontOpFail = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilFrontOpFail);
+ state.StencilFrontOpZFail = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilFrontOpZFail);
+ state.StencilFrontOpZPass = (GalStencilOp)ReadRegister(NvGpuEngine3dReg.StencilFrontOpZPass);
+ state.StencilFrontMask = (uint)ReadRegister(NvGpuEngine3dReg.StencilFrontMask);
}
}
- private void SetScissor(GalPipelineState State)
+ private void SetScissor(GalPipelineState state)
{
int count = 0;
- for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+ for (int index = 0; index < GalPipelineState.RenderTargetsCount; index++)
{
- State.ScissorTestEnabled[Index] = ReadRegisterBool(NvGpuEngine3dReg.ScissorEnable + Index * 4);
+ state.ScissorTestEnabled[index] = ReadRegisterBool(NvGpuEngine3dReg.ScissorEnable + index * 4);
- if (State.ScissorTestEnabled[Index])
+ if (state.ScissorTestEnabled[index])
{
- uint ScissorHorizontal = (uint)ReadRegister(NvGpuEngine3dReg.ScissorHorizontal + Index * 4);
- uint ScissorVertical = (uint)ReadRegister(NvGpuEngine3dReg.ScissorVertical + Index * 4);
+ uint scissorHorizontal = (uint)ReadRegister(NvGpuEngine3dReg.ScissorHorizontal + index * 4);
+ uint scissorVertical = (uint)ReadRegister(NvGpuEngine3dReg.ScissorVertical + index * 4);
- int left = (int)(ScissorHorizontal & 0xFFFF); // Left, lower 16 bits
- int right = (int)(ScissorHorizontal >> 16); // Right, upper 16 bits
+ int left = (int)(scissorHorizontal & 0xFFFF); // Left, lower 16 bits
+ int right = (int)(scissorHorizontal >> 16); // Right, upper 16 bits
- int bottom = (int)(ScissorVertical & 0xFFFF); // Bottom, lower 16 bits
- int top = (int)(ScissorVertical >> 16); // Top, upper 16 bits
+ int bottom = (int)(scissorVertical & 0xFFFF); // Bottom, lower 16 bits
+ int top = (int)(scissorVertical >> 16); // Top, upper 16 bits
int width = Math.Abs(right - left);
int height = Math.Abs(top - bottom);
- // If the scissor test covers the whole possible viewport, i.e. uninititalized, disable scissor test
+ // If the scissor test covers the whole possible viewport, i.e. uninitialized, disable scissor test
if ((width > NvGpu.MaxViewportSize && height > NvGpu.MaxViewportSize) || width <= 0 || height <= 0)
{
- State.ScissorTestEnabled[Index] = false;
+ state.ScissorTestEnabled[index] = false;
continue;
}
@@ -460,10 +459,10 @@ namespace Ryujinx.Graphics.Graphics3d
count++;
// Flip X
- if (State.FlipX == -1)
+ if (state.FlipX == -1)
{
- left = ViewportX1 - (left - ViewportX0);
- right = ViewportX1 - (right - ViewportX0);
+ left = _viewportX1 - (left - _viewportX0);
+ right = _viewportX1 - (right - _viewportX0);
}
// Ensure X is in the right order
@@ -475,10 +474,10 @@ namespace Ryujinx.Graphics.Graphics3d
}
// Flip Y
- if (State.FlipY == -1)
+ if (state.FlipY == -1)
{
- bottom = ViewportY1 - (bottom - ViewportY0);
- top = ViewportY1 - (top - ViewportY0);
+ bottom = _viewportY1 - (bottom - _viewportY0);
+ top = _viewportY1 - (top - _viewportY0);
}
// Ensure Y is in the right order
@@ -490,102 +489,102 @@ namespace Ryujinx.Graphics.Graphics3d
}
// Handle out of active viewport dimensions
- left = Math.Clamp(left, ViewportX0, ViewportX1);
- right = Math.Clamp(right, ViewportX0, ViewportX1);
- top = Math.Clamp(top, ViewportY0, ViewportY1);
- bottom = Math.Clamp(bottom, ViewportY0, ViewportY1);
+ left = Math.Clamp(left, _viewportX0, _viewportX1);
+ right = Math.Clamp(right, _viewportX0, _viewportX1);
+ top = Math.Clamp(top, _viewportY0, _viewportY1);
+ bottom = Math.Clamp(bottom, _viewportY0, _viewportY1);
// Save values to state
- State.ScissorTestX[Index] = left;
- State.ScissorTestY[Index] = bottom;
+ state.ScissorTestX[index] = left;
+ state.ScissorTestY[index] = bottom;
- State.ScissorTestWidth[Index] = right - left;
- State.ScissorTestHeight[Index] = top - bottom;
+ state.ScissorTestWidth[index] = right - left;
+ state.ScissorTestHeight[index] = top - bottom;
}
}
- State.ScissorTestCount = count;
+ state.ScissorTestCount = count;
}
- private void SetBlending(GalPipelineState State)
+ private void SetBlending(GalPipelineState state)
{
- bool BlendIndependent = ReadRegisterBool(NvGpuEngine3dReg.BlendIndependent);
+ bool blendIndependent = ReadRegisterBool(NvGpuEngine3dReg.BlendIndependent);
- State.BlendIndependent = BlendIndependent;
+ state.BlendIndependent = blendIndependent;
- for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+ for (int index = 0; index < GalPipelineState.RenderTargetsCount; index++)
{
- if (BlendIndependent)
+ if (blendIndependent)
{
- State.Blends[Index].Enabled = ReadRegisterBool(NvGpuEngine3dReg.IBlendNEnable + Index);
+ state.Blends[index].Enabled = ReadRegisterBool(NvGpuEngine3dReg.IBlendNEnable + index);
- if (State.Blends[Index].Enabled)
+ if (state.Blends[index].Enabled)
{
- State.Blends[Index].SeparateAlpha = ReadRegisterBool(NvGpuEngine3dReg.IBlendNSeparateAlpha + Index * 8);
-
- State.Blends[Index].EquationRgb = ReadBlendEquation(NvGpuEngine3dReg.IBlendNEquationRgb + Index * 8);
- State.Blends[Index].FuncSrcRgb = ReadBlendFactor (NvGpuEngine3dReg.IBlendNFuncSrcRgb + Index * 8);
- State.Blends[Index].FuncDstRgb = ReadBlendFactor (NvGpuEngine3dReg.IBlendNFuncDstRgb + Index * 8);
- State.Blends[Index].EquationAlpha = ReadBlendEquation(NvGpuEngine3dReg.IBlendNEquationAlpha + Index * 8);
- State.Blends[Index].FuncSrcAlpha = ReadBlendFactor (NvGpuEngine3dReg.IBlendNFuncSrcAlpha + Index * 8);
- State.Blends[Index].FuncDstAlpha = ReadBlendFactor (NvGpuEngine3dReg.IBlendNFuncDstAlpha + Index * 8);
+ state.Blends[index].SeparateAlpha = ReadRegisterBool(NvGpuEngine3dReg.IBlendNSeparateAlpha + index * 8);
+
+ state.Blends[index].EquationRgb = ReadBlendEquation(NvGpuEngine3dReg.IBlendNEquationRgb + index * 8);
+ state.Blends[index].FuncSrcRgb = ReadBlendFactor (NvGpuEngine3dReg.IBlendNFuncSrcRgb + index * 8);
+ state.Blends[index].FuncDstRgb = ReadBlendFactor (NvGpuEngine3dReg.IBlendNFuncDstRgb + index * 8);
+ state.Blends[index].EquationAlpha = ReadBlendEquation(NvGpuEngine3dReg.IBlendNEquationAlpha + index * 8);
+ state.Blends[index].FuncSrcAlpha = ReadBlendFactor (NvGpuEngine3dReg.IBlendNFuncSrcAlpha + index * 8);
+ state.Blends[index].FuncDstAlpha = ReadBlendFactor (NvGpuEngine3dReg.IBlendNFuncDstAlpha + index * 8);
}
}
else
{
//It seems that even when independent blend is disabled, the first IBlend enable
//register is still set to indicate whenever blend is enabled or not (?).
- State.Blends[Index].Enabled = ReadRegisterBool(NvGpuEngine3dReg.IBlendNEnable);
+ state.Blends[index].Enabled = ReadRegisterBool(NvGpuEngine3dReg.IBlendNEnable);
- if (State.Blends[Index].Enabled)
+ if (state.Blends[index].Enabled)
{
- State.Blends[Index].SeparateAlpha = ReadRegisterBool(NvGpuEngine3dReg.BlendSeparateAlpha);
-
- State.Blends[Index].EquationRgb = ReadBlendEquation(NvGpuEngine3dReg.BlendEquationRgb);
- State.Blends[Index].FuncSrcRgb = ReadBlendFactor (NvGpuEngine3dReg.BlendFuncSrcRgb);
- State.Blends[Index].FuncDstRgb = ReadBlendFactor (NvGpuEngine3dReg.BlendFuncDstRgb);
- State.Blends[Index].EquationAlpha = ReadBlendEquation(NvGpuEngine3dReg.BlendEquationAlpha);
- State.Blends[Index].FuncSrcAlpha = ReadBlendFactor (NvGpuEngine3dReg.BlendFuncSrcAlpha);
- State.Blends[Index].FuncDstAlpha = ReadBlendFactor (NvGpuEngine3dReg.BlendFuncDstAlpha);
+ state.Blends[index].SeparateAlpha = ReadRegisterBool(NvGpuEngine3dReg.BlendSeparateAlpha);
+
+ state.Blends[index].EquationRgb = ReadBlendEquation(NvGpuEngine3dReg.BlendEquationRgb);
+ state.Blends[index].FuncSrcRgb = ReadBlendFactor (NvGpuEngine3dReg.BlendFuncSrcRgb);
+ state.Blends[index].FuncDstRgb = ReadBlendFactor (NvGpuEngine3dReg.BlendFuncDstRgb);
+ state.Blends[index].EquationAlpha = ReadBlendEquation(NvGpuEngine3dReg.BlendEquationAlpha);
+ state.Blends[index].FuncSrcAlpha = ReadBlendFactor (NvGpuEngine3dReg.BlendFuncSrcAlpha);
+ state.Blends[index].FuncDstAlpha = ReadBlendFactor (NvGpuEngine3dReg.BlendFuncDstAlpha);
}
}
}
}
- private GalBlendEquation ReadBlendEquation(NvGpuEngine3dReg Register)
+ private GalBlendEquation ReadBlendEquation(NvGpuEngine3dReg register)
{
- return (GalBlendEquation)ReadRegister(Register);
+ return (GalBlendEquation)ReadRegister(register);
}
- private GalBlendFactor ReadBlendFactor(NvGpuEngine3dReg Register)
+ private GalBlendFactor ReadBlendFactor(NvGpuEngine3dReg register)
{
- return (GalBlendFactor)ReadRegister(Register);
+ return (GalBlendFactor)ReadRegister(register);
}
- private void SetColorMask(GalPipelineState State)
+ private void SetColorMask(GalPipelineState state)
{
- bool ColorMaskCommon = ReadRegisterBool(NvGpuEngine3dReg.ColorMaskCommon);
+ bool colorMaskCommon = ReadRegisterBool(NvGpuEngine3dReg.ColorMaskCommon);
- State.ColorMaskCommon = ColorMaskCommon;
+ state.ColorMaskCommon = colorMaskCommon;
- for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
+ for (int index = 0; index < GalPipelineState.RenderTargetsCount; index++)
{
- int ColorMask = ReadRegister(NvGpuEngine3dReg.ColorMaskN + (ColorMaskCommon ? 0 : Index));
+ int colorMask = ReadRegister(NvGpuEngine3dReg.ColorMaskN + (colorMaskCommon ? 0 : index));
- State.ColorMasks[Index].Red = ((ColorMask >> 0) & 0xf) != 0;
- State.ColorMasks[Index].Green = ((ColorMask >> 4) & 0xf) != 0;
- State.ColorMasks[Index].Blue = ((ColorMask >> 8) & 0xf) != 0;
- State.ColorMasks[Index].Alpha = ((ColorMask >> 12) & 0xf) != 0;
+ state.ColorMasks[index].Red = ((colorMask >> 0) & 0xf) != 0;
+ state.ColorMasks[index].Green = ((colorMask >> 4) & 0xf) != 0;
+ state.ColorMasks[index].Blue = ((colorMask >> 8) & 0xf) != 0;
+ state.ColorMasks[index].Alpha = ((colorMask >> 12) & 0xf) != 0;
}
}
- private void SetPrimitiveRestart(GalPipelineState State)
+ private void SetPrimitiveRestart(GalPipelineState state)
{
- State.PrimitiveRestartEnabled = ReadRegisterBool(NvGpuEngine3dReg.PrimRestartEnable);
+ state.PrimitiveRestartEnabled = ReadRegisterBool(NvGpuEngine3dReg.PrimRestartEnable);
- if (State.PrimitiveRestartEnabled)
+ if (state.PrimitiveRestartEnabled)
{
- State.PrimitiveRestartIndex = (uint)ReadRegister(NvGpuEngine3dReg.PrimRestartIndex);
+ state.PrimitiveRestartIndex = (uint)ReadRegister(NvGpuEngine3dReg.PrimRestartIndex);
}
}
@@ -594,461 +593,461 @@ namespace Ryujinx.Graphics.Graphics3d
//Commercial games do not seem to
//bool SeparateFragData = ReadRegisterBool(NvGpuEngine3dReg.RTSeparateFragData);
- uint Control = (uint)(ReadRegister(NvGpuEngine3dReg.RTControl));
+ uint control = (uint)(ReadRegister(NvGpuEngine3dReg.RtControl));
- uint Count = Control & 0xf;
+ uint count = control & 0xf;
- if (Count > 0)
+ if (count > 0)
{
- int[] Map = new int[Count];
+ int[] map = new int[count];
- for (int Index = 0; Index < Count; Index++)
+ for (int index = 0; index < count; index++)
{
- int Shift = 4 + Index * 3;
+ int shift = 4 + index * 3;
- Map[Index] = (int)((Control >> Shift) & 7);
+ map[index] = (int)((control >> shift) & 7);
}
- Gpu.Renderer.RenderTarget.SetMap(Map);
+ _gpu.Renderer.RenderTarget.SetMap(map);
}
else
{
- Gpu.Renderer.RenderTarget.SetMap(null);
+ _gpu.Renderer.RenderTarget.SetMap(null);
}
}
- private void UploadTextures(NvGpuVmm Vmm, GalPipelineState State, long[] Keys)
+ private void UploadTextures(NvGpuVmm vmm, GalPipelineState state, long[] keys)
{
- long BaseShPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.ShaderAddress);
+ long baseShPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.ShaderAddress);
- int TextureCbIndex = ReadRegister(NvGpuEngine3dReg.TextureCbIndex);
+ int textureCbIndex = ReadRegister(NvGpuEngine3dReg.TextureCbIndex);
- List<(long, GalImage, GalTextureSampler)> UnboundTextures = new List<(long, GalImage, GalTextureSampler)>();
+ List<(long, GalImage, GalTextureSampler)> unboundTextures = new List<(long, GalImage, GalTextureSampler)>();
- for (int Index = 0; Index < Keys.Length; Index++)
+ for (int index = 0; index < keys.Length; index++)
{
- foreach (ShaderDeclInfo DeclInfo in Gpu.Renderer.Shader.GetTextureUsage(Keys[Index]))
+ foreach (ShaderDeclInfo declInfo in _gpu.Renderer.Shader.GetTextureUsage(keys[index]))
{
- long Position;
+ long position;
- if (DeclInfo.IsCb)
+ if (declInfo.IsCb)
{
- Position = ConstBuffers[Index][DeclInfo.Cbuf].Position;
+ position = _constBuffers[index][declInfo.Cbuf].Position;
}
else
{
- Position = ConstBuffers[Index][TextureCbIndex].Position;
+ position = _constBuffers[index][textureCbIndex].Position;
}
- int TextureHandle = Vmm.ReadInt32(Position + DeclInfo.Index * 4);
+ int textureHandle = vmm.ReadInt32(position + declInfo.Index * 4);
- UnboundTextures.Add(UploadTexture(Vmm, TextureHandle));
+ unboundTextures.Add(UploadTexture(vmm, textureHandle));
}
}
- for (int Index = 0; Index < UnboundTextures.Count; Index++)
+ for (int index = 0; index < unboundTextures.Count; index++)
{
- (long Key, GalImage Image, GalTextureSampler Sampler) = UnboundTextures[Index];
+ (long key, GalImage image, GalTextureSampler sampler) = unboundTextures[index];
- if (Key == 0)
+ if (key == 0)
{
continue;
}
- Gpu.Renderer.Texture.Bind(Key, Index, Image);
- Gpu.Renderer.Texture.SetSampler(Image, Sampler);
+ _gpu.Renderer.Texture.Bind(key, index, image);
+ _gpu.Renderer.Texture.SetSampler(image, sampler);
}
}
- private (long, GalImage, GalTextureSampler) UploadTexture(NvGpuVmm Vmm, int TextureHandle)
+ private (long, GalImage, GalTextureSampler) UploadTexture(NvGpuVmm vmm, int textureHandle)
{
- if (TextureHandle == 0)
+ if (textureHandle == 0)
{
//FIXME: Some games like puyo puyo will use handles with the value 0.
//This is a bug, most likely caused by sync issues.
return (0, default(GalImage), default(GalTextureSampler));
}
- bool LinkedTsc = ReadRegisterBool(NvGpuEngine3dReg.LinkedTsc);
+ bool linkedTsc = ReadRegisterBool(NvGpuEngine3dReg.LinkedTsc);
- int TicIndex = (TextureHandle >> 0) & 0xfffff;
+ int ticIndex = (textureHandle >> 0) & 0xfffff;
- int TscIndex = LinkedTsc ? TicIndex : (TextureHandle >> 20) & 0xfff;
+ int tscIndex = linkedTsc ? ticIndex : (textureHandle >> 20) & 0xfff;
- long TicPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.TexHeaderPoolOffset);
- long TscPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.TexSamplerPoolOffset);
+ long ticPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.TexHeaderPoolOffset);
+ long tscPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.TexSamplerPoolOffset);
- TicPosition += TicIndex * 0x20;
- TscPosition += TscIndex * 0x20;
+ ticPosition += ticIndex * 0x20;
+ tscPosition += tscIndex * 0x20;
- GalImage Image = TextureFactory.MakeTexture(Vmm, TicPosition);
+ GalImage image = TextureFactory.MakeTexture(vmm, ticPosition);
- GalTextureSampler Sampler = TextureFactory.MakeSampler(Gpu, Vmm, TscPosition);
+ GalTextureSampler sampler = TextureFactory.MakeSampler(_gpu, vmm, tscPosition);
- long Key = Vmm.ReadInt64(TicPosition + 4) & 0xffffffffffff;
+ long key = vmm.ReadInt64(ticPosition + 4) & 0xffffffffffff;
- if (Image.Layout == GalMemoryLayout.BlockLinear)
+ if (image.Layout == GalMemoryLayout.BlockLinear)
{
- Key &= ~0x1ffL;
+ key &= ~0x1ffL;
}
- else if (Image.Layout == GalMemoryLayout.Pitch)
+ else if (image.Layout == GalMemoryLayout.Pitch)
{
- Key &= ~0x1fL;
+ key &= ~0x1fL;
}
- Key = Vmm.GetPhysicalAddress(Key);
+ key = vmm.GetPhysicalAddress(key);
- if (Key == -1)
+ if (key == -1)
{
//FIXME: Shouldn't ignore invalid addresses.
return (0, default(GalImage), default(GalTextureSampler));
}
- Gpu.ResourceManager.SendTexture(Vmm, Key, Image);
+ _gpu.ResourceManager.SendTexture(vmm, key, image);
- return (Key, Image, Sampler);
+ return (key, image, sampler);
}
- private void UploadConstBuffers(NvGpuVmm Vmm, GalPipelineState State, long[] Keys)
+ private void UploadConstBuffers(NvGpuVmm vmm, GalPipelineState state, long[] keys)
{
- for (int Stage = 0; Stage < Keys.Length; Stage++)
+ for (int stage = 0; stage < keys.Length; stage++)
{
- foreach (ShaderDeclInfo DeclInfo in Gpu.Renderer.Shader.GetConstBufferUsage(Keys[Stage]))
+ foreach (ShaderDeclInfo declInfo in _gpu.Renderer.Shader.GetConstBufferUsage(keys[stage]))
{
- ConstBuffer Cb = ConstBuffers[Stage][DeclInfo.Cbuf];
+ ConstBuffer cb = _constBuffers[stage][declInfo.Cbuf];
- if (!Cb.Enabled)
+ if (!cb.Enabled)
{
continue;
}
- long Key = Vmm.GetPhysicalAddress(Cb.Position);
+ long key = vmm.GetPhysicalAddress(cb.Position);
- if (Gpu.ResourceManager.MemoryRegionModified(Vmm, Key, Cb.Size, NvGpuBufferType.ConstBuffer))
+ if (_gpu.ResourceManager.MemoryRegionModified(vmm, key, cb.Size, NvGpuBufferType.ConstBuffer))
{
- if (Vmm.TryGetHostAddress(Cb.Position, Cb.Size, out IntPtr CbPtr))
+ if (vmm.TryGetHostAddress(cb.Position, cb.Size, out IntPtr cbPtr))
{
- Gpu.Renderer.Buffer.SetData(Key, Cb.Size, CbPtr);
+ _gpu.Renderer.Buffer.SetData(key, cb.Size, cbPtr);
}
else
{
- Gpu.Renderer.Buffer.SetData(Key, Vmm.ReadBytes(Cb.Position, Cb.Size));
+ _gpu.Renderer.Buffer.SetData(key, vmm.ReadBytes(cb.Position, cb.Size));
}
}
- State.ConstBufferKeys[Stage][DeclInfo.Cbuf] = Key;
+ state.ConstBufferKeys[stage][declInfo.Cbuf] = key;
}
}
}
- private void UploadVertexArrays(NvGpuVmm Vmm, GalPipelineState State)
+ private void UploadVertexArrays(NvGpuVmm vmm, GalPipelineState state)
{
- long IbPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.IndexArrayAddress);
+ long ibPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.IndexArrayAddress);
- long IboKey = Vmm.GetPhysicalAddress(IbPosition);
+ long iboKey = vmm.GetPhysicalAddress(ibPosition);
- int IndexEntryFmt = ReadRegister(NvGpuEngine3dReg.IndexArrayFormat);
- int IndexCount = ReadRegister(NvGpuEngine3dReg.IndexBatchCount);
- int PrimCtrl = ReadRegister(NvGpuEngine3dReg.VertexBeginGl);
+ int indexEntryFmt = ReadRegister(NvGpuEngine3dReg.IndexArrayFormat);
+ int indexCount = ReadRegister(NvGpuEngine3dReg.IndexBatchCount);
+ int primCtrl = ReadRegister(NvGpuEngine3dReg.VertexBeginGl);
- GalPrimitiveType PrimType = (GalPrimitiveType)(PrimCtrl & 0xffff);
+ GalPrimitiveType primType = (GalPrimitiveType)(primCtrl & 0xffff);
- GalIndexFormat IndexFormat = (GalIndexFormat)IndexEntryFmt;
+ GalIndexFormat indexFormat = (GalIndexFormat)indexEntryFmt;
- int IndexEntrySize = 1 << IndexEntryFmt;
+ int indexEntrySize = 1 << indexEntryFmt;
- if (IndexEntrySize > 4)
+ if (indexEntrySize > 4)
{
- throw new InvalidOperationException("Invalid index entry size \"" + IndexEntrySize + "\"!");
+ throw new InvalidOperationException("Invalid index entry size \"" + indexEntrySize + "\"!");
}
- if (IndexCount != 0)
+ if (indexCount != 0)
{
- int IbSize = IndexCount * IndexEntrySize;
+ int ibSize = indexCount * indexEntrySize;
- bool IboCached = Gpu.Renderer.Rasterizer.IsIboCached(IboKey, (uint)IbSize);
+ bool iboCached = _gpu.Renderer.Rasterizer.IsIboCached(iboKey, (uint)ibSize);
- bool UsesLegacyQuads =
- PrimType == GalPrimitiveType.Quads ||
- PrimType == GalPrimitiveType.QuadStrip;
+ bool usesLegacyQuads =
+ primType == GalPrimitiveType.Quads ||
+ primType == GalPrimitiveType.QuadStrip;
- if (!IboCached || Gpu.ResourceManager.MemoryRegionModified(Vmm, IboKey, (uint)IbSize, NvGpuBufferType.Index))
+ if (!iboCached || _gpu.ResourceManager.MemoryRegionModified(vmm, iboKey, (uint)ibSize, NvGpuBufferType.Index))
{
- if (!UsesLegacyQuads)
+ if (!usesLegacyQuads)
{
- if (Vmm.TryGetHostAddress(IbPosition, IbSize, out IntPtr IbPtr))
+ if (vmm.TryGetHostAddress(ibPosition, ibSize, out IntPtr ibPtr))
{
- Gpu.Renderer.Rasterizer.CreateIbo(IboKey, IbSize, IbPtr);
+ _gpu.Renderer.Rasterizer.CreateIbo(iboKey, ibSize, ibPtr);
}
else
{
- Gpu.Renderer.Rasterizer.CreateIbo(IboKey, IbSize, Vmm.ReadBytes(IbPosition, IbSize));
+ _gpu.Renderer.Rasterizer.CreateIbo(iboKey, ibSize, vmm.ReadBytes(ibPosition, ibSize));
}
}
else
{
- byte[] Buffer = Vmm.ReadBytes(IbPosition, IbSize);
+ byte[] buffer = vmm.ReadBytes(ibPosition, ibSize);
- if (PrimType == GalPrimitiveType.Quads)
+ if (primType == GalPrimitiveType.Quads)
{
- Buffer = QuadHelper.ConvertQuadsToTris(Buffer, IndexEntrySize, IndexCount);
+ buffer = QuadHelper.ConvertQuadsToTris(buffer, indexEntrySize, indexCount);
}
else /* if (PrimType == GalPrimitiveType.QuadStrip) */
{
- Buffer = QuadHelper.ConvertQuadStripToTris(Buffer, IndexEntrySize, IndexCount);
+ buffer = QuadHelper.ConvertQuadStripToTris(buffer, indexEntrySize, indexCount);
}
- Gpu.Renderer.Rasterizer.CreateIbo(IboKey, IbSize, Buffer);
+ _gpu.Renderer.Rasterizer.CreateIbo(iboKey, ibSize, buffer);
}
}
- if (!UsesLegacyQuads)
+ if (!usesLegacyQuads)
{
- Gpu.Renderer.Rasterizer.SetIndexArray(IbSize, IndexFormat);
+ _gpu.Renderer.Rasterizer.SetIndexArray(ibSize, indexFormat);
}
else
{
- if (PrimType == GalPrimitiveType.Quads)
+ if (primType == GalPrimitiveType.Quads)
{
- Gpu.Renderer.Rasterizer.SetIndexArray(QuadHelper.ConvertSizeQuadsToTris(IbSize), IndexFormat);
+ _gpu.Renderer.Rasterizer.SetIndexArray(QuadHelper.ConvertSizeQuadsToTris(ibSize), indexFormat);
}
else /* if (PrimType == GalPrimitiveType.QuadStrip) */
{
- Gpu.Renderer.Rasterizer.SetIndexArray(QuadHelper.ConvertSizeQuadStripToTris(IbSize), IndexFormat);
+ _gpu.Renderer.Rasterizer.SetIndexArray(QuadHelper.ConvertSizeQuadStripToTris(ibSize), indexFormat);
}
}
}
- List<GalVertexAttrib>[] Attribs = new List<GalVertexAttrib>[32];
+ List<GalVertexAttrib>[] attribs = new List<GalVertexAttrib>[32];
- for (int Attr = 0; Attr < 16; Attr++)
+ for (int attr = 0; attr < 16; attr++)
{
- int Packed = ReadRegister(NvGpuEngine3dReg.VertexAttribNFormat + Attr);
+ int packed = ReadRegister(NvGpuEngine3dReg.VertexAttribNFormat + attr);
- int ArrayIndex = Packed & 0x1f;
+ int arrayIndex = packed & 0x1f;
- if (Attribs[ArrayIndex] == null)
+ if (attribs[arrayIndex] == null)
{
- Attribs[ArrayIndex] = new List<GalVertexAttrib>();
+ attribs[arrayIndex] = new List<GalVertexAttrib>();
}
- long VbPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.VertexArrayNAddress + ArrayIndex * 4);
+ long vbPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.VertexArrayNAddress + arrayIndex * 4);
- if (VbPosition == 0)
+ if (vbPosition == 0)
{
continue;
}
- bool IsConst = ((Packed >> 6) & 1) != 0;
+ bool isConst = ((packed >> 6) & 1) != 0;
- int Offset = (Packed >> 7) & 0x3fff;
+ int offset = (packed >> 7) & 0x3fff;
- GalVertexAttribSize Size = (GalVertexAttribSize)((Packed >> 21) & 0x3f);
- GalVertexAttribType Type = (GalVertexAttribType)((Packed >> 27) & 0x7);
+ GalVertexAttribSize size = (GalVertexAttribSize)((packed >> 21) & 0x3f);
+ GalVertexAttribType type = (GalVertexAttribType)((packed >> 27) & 0x7);
- bool IsRgba = ((Packed >> 31) & 1) != 0;
+ bool isRgba = ((packed >> 31) & 1) != 0;
// Check vertex array is enabled to avoid out of bounds exception when reading bytes
- bool Enable = (ReadRegister(NvGpuEngine3dReg.VertexArrayNControl + ArrayIndex * 4) & 0x1000) != 0;
+ bool enable = (ReadRegister(NvGpuEngine3dReg.VertexArrayNControl + arrayIndex * 4) & 0x1000) != 0;
//Note: 16 is the maximum size of an attribute,
//having a component size of 32-bits with 4 elements (a vec4).
- if (Enable)
+ if (enable)
{
- byte[] Data = Vmm.ReadBytes(VbPosition + Offset, 16);
+ byte[] data = vmm.ReadBytes(vbPosition + offset, 16);
- Attribs[ArrayIndex].Add(new GalVertexAttrib(Attr, IsConst, Offset, Data, Size, Type, IsRgba));
+ attribs[arrayIndex].Add(new GalVertexAttrib(attr, isConst, offset, data, size, type, isRgba));
}
}
- State.VertexBindings = new GalVertexBinding[32];
+ state.VertexBindings = new GalVertexBinding[32];
- for (int Index = 0; Index < 32; Index++)
+ for (int index = 0; index < 32; index++)
{
- if (Attribs[Index] == null)
+ if (attribs[index] == null)
{
continue;
}
- int Control = ReadRegister(NvGpuEngine3dReg.VertexArrayNControl + Index * 4);
+ int control = ReadRegister(NvGpuEngine3dReg.VertexArrayNControl + index * 4);
- bool Enable = (Control & 0x1000) != 0;
+ bool enable = (control & 0x1000) != 0;
- if (!Enable)
+ if (!enable)
{
continue;
}
- long VbPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.VertexArrayNAddress + Index * 4);
- long VbEndPos = MakeInt64From2xInt32(NvGpuEngine3dReg.VertexArrayNEndAddr + Index * 2);
+ long vbPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.VertexArrayNAddress + index * 4);
+ long vbEndPos = MakeInt64From2xInt32(NvGpuEngine3dReg.VertexArrayNEndAddr + index * 2);
- int VertexDivisor = ReadRegister(NvGpuEngine3dReg.VertexArrayNDivisor + Index * 4);
+ int vertexDivisor = ReadRegister(NvGpuEngine3dReg.VertexArrayNDivisor + index * 4);
- bool Instanced = ReadRegisterBool(NvGpuEngine3dReg.VertexArrayNInstance + Index);
+ bool instanced = ReadRegisterBool(NvGpuEngine3dReg.VertexArrayNInstance + index);
- int Stride = Control & 0xfff;
+ int stride = control & 0xfff;
- if (Instanced && VertexDivisor != 0)
+ if (instanced && vertexDivisor != 0)
{
- VbPosition += Stride * (CurrentInstance / VertexDivisor);
+ vbPosition += stride * (_currentInstance / vertexDivisor);
}
- if (VbPosition > VbEndPos)
+ if (vbPosition > vbEndPos)
{
//Instance is invalid, ignore the draw call
continue;
}
- long VboKey = Vmm.GetPhysicalAddress(VbPosition);
+ long vboKey = vmm.GetPhysicalAddress(vbPosition);
- long VbSize = (VbEndPos - VbPosition) + 1;
- int ModifiedVbSize = (int)VbSize;
+ long vbSize = (vbEndPos - vbPosition) + 1;
+ int modifiedVbSize = (int)vbSize;
// If quads convert size to triangle length
- if (Stride == 0)
+ if (stride == 0)
{
- if (PrimType == GalPrimitiveType.Quads)
+ if (primType == GalPrimitiveType.Quads)
{
- ModifiedVbSize = QuadHelper.ConvertSizeQuadsToTris(ModifiedVbSize);
+ modifiedVbSize = QuadHelper.ConvertSizeQuadsToTris(modifiedVbSize);
}
- else if (PrimType == GalPrimitiveType.QuadStrip)
+ else if (primType == GalPrimitiveType.QuadStrip)
{
- ModifiedVbSize = QuadHelper.ConvertSizeQuadStripToTris(ModifiedVbSize);
+ modifiedVbSize = QuadHelper.ConvertSizeQuadStripToTris(modifiedVbSize);
}
}
- bool VboCached = Gpu.Renderer.Rasterizer.IsVboCached(VboKey, ModifiedVbSize);
+ bool vboCached = _gpu.Renderer.Rasterizer.IsVboCached(vboKey, modifiedVbSize);
- if (!VboCached || Gpu.ResourceManager.MemoryRegionModified(Vmm, VboKey, VbSize, NvGpuBufferType.Vertex))
+ if (!vboCached || _gpu.ResourceManager.MemoryRegionModified(vmm, vboKey, vbSize, NvGpuBufferType.Vertex))
{
- if ((PrimType == GalPrimitiveType.Quads | PrimType == GalPrimitiveType.QuadStrip) && Stride != 0)
+ if ((primType == GalPrimitiveType.Quads | primType == GalPrimitiveType.QuadStrip) && stride != 0)
{
// Convert quad buffer to triangles
- byte[] data = Vmm.ReadBytes(VbPosition, VbSize);
+ byte[] data = vmm.ReadBytes(vbPosition, vbSize);
- if (PrimType == GalPrimitiveType.Quads)
+ if (primType == GalPrimitiveType.Quads)
{
- data = QuadHelper.ConvertQuadsToTris(data, Stride, (int)(VbSize / Stride));
+ data = QuadHelper.ConvertQuadsToTris(data, stride, (int)(vbSize / stride));
}
else
{
- data = QuadHelper.ConvertQuadStripToTris(data, Stride, (int)(VbSize / Stride));
+ data = QuadHelper.ConvertQuadStripToTris(data, stride, (int)(vbSize / stride));
}
- Gpu.Renderer.Rasterizer.CreateVbo(VboKey, data);
+ _gpu.Renderer.Rasterizer.CreateVbo(vboKey, data);
}
- else if (Vmm.TryGetHostAddress(VbPosition, VbSize, out IntPtr VbPtr))
+ else if (vmm.TryGetHostAddress(vbPosition, vbSize, out IntPtr vbPtr))
{
- Gpu.Renderer.Rasterizer.CreateVbo(VboKey, (int)VbSize, VbPtr);
+ _gpu.Renderer.Rasterizer.CreateVbo(vboKey, (int)vbSize, vbPtr);
}
else
{
- Gpu.Renderer.Rasterizer.CreateVbo(VboKey, Vmm.ReadBytes(VbPosition, VbSize));
+ _gpu.Renderer.Rasterizer.CreateVbo(vboKey, vmm.ReadBytes(vbPosition, vbSize));
}
}
- State.VertexBindings[Index].Enabled = true;
- State.VertexBindings[Index].Stride = Stride;
- State.VertexBindings[Index].VboKey = VboKey;
- State.VertexBindings[Index].Instanced = Instanced;
- State.VertexBindings[Index].Divisor = VertexDivisor;
- State.VertexBindings[Index].Attribs = Attribs[Index].ToArray();
+ state.VertexBindings[index].Enabled = true;
+ state.VertexBindings[index].Stride = stride;
+ state.VertexBindings[index].VboKey = vboKey;
+ state.VertexBindings[index].Instanced = instanced;
+ state.VertexBindings[index].Divisor = vertexDivisor;
+ state.VertexBindings[index].Attribs = attribs[index].ToArray();
}
}
- private void DispatchRender(NvGpuVmm Vmm, GalPipelineState State)
+ private void DispatchRender(NvGpuVmm vmm, GalPipelineState state)
{
- int IndexCount = ReadRegister(NvGpuEngine3dReg.IndexBatchCount);
- int PrimCtrl = ReadRegister(NvGpuEngine3dReg.VertexBeginGl);
+ int indexCount = ReadRegister(NvGpuEngine3dReg.IndexBatchCount);
+ int primCtrl = ReadRegister(NvGpuEngine3dReg.VertexBeginGl);
- GalPrimitiveType PrimType = (GalPrimitiveType)(PrimCtrl & 0xffff);
+ GalPrimitiveType primType = (GalPrimitiveType)(primCtrl & 0xffff);
- bool InstanceNext = ((PrimCtrl >> 26) & 1) != 0;
- bool InstanceCont = ((PrimCtrl >> 27) & 1) != 0;
+ bool instanceNext = ((primCtrl >> 26) & 1) != 0;
+ bool instanceCont = ((primCtrl >> 27) & 1) != 0;
- if (InstanceNext && InstanceCont)
+ if (instanceNext && instanceCont)
{
throw new InvalidOperationException("GPU tried to increase and reset instance count at the same time");
}
- if (InstanceNext)
+ if (instanceNext)
{
- CurrentInstance++;
+ _currentInstance++;
}
- else if (!InstanceCont)
+ else if (!instanceCont)
{
- CurrentInstance = 0;
+ _currentInstance = 0;
}
- State.Instance = CurrentInstance;
+ state.Instance = _currentInstance;
- Gpu.Renderer.Pipeline.Bind(State);
+ _gpu.Renderer.Pipeline.Bind(state);
- Gpu.Renderer.RenderTarget.Bind();
+ _gpu.Renderer.RenderTarget.Bind();
- if (IndexCount != 0)
+ if (indexCount != 0)
{
- int IndexEntryFmt = ReadRegister(NvGpuEngine3dReg.IndexArrayFormat);
- int IndexFirst = ReadRegister(NvGpuEngine3dReg.IndexBatchFirst);
- int VertexBase = ReadRegister(NvGpuEngine3dReg.VertexArrayElemBase);
+ int indexEntryFmt = ReadRegister(NvGpuEngine3dReg.IndexArrayFormat);
+ int indexFirst = ReadRegister(NvGpuEngine3dReg.IndexBatchFirst);
+ int vertexBase = ReadRegister(NvGpuEngine3dReg.VertexArrayElemBase);
- long IndexPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.IndexArrayAddress);
+ long indexPosition = MakeInt64From2xInt32(NvGpuEngine3dReg.IndexArrayAddress);
- long IboKey = Vmm.GetPhysicalAddress(IndexPosition);
+ long iboKey = vmm.GetPhysicalAddress(indexPosition);
//Quad primitive types were deprecated on OpenGL 3.x,
//they are converted to a triangles index buffer on IB creation,
//so we should use the triangles type here too.
- if (PrimType == GalPrimitiveType.Quads || PrimType == GalPrimitiveType.QuadStrip)
+ if (primType == GalPrimitiveType.Quads || primType == GalPrimitiveType.QuadStrip)
{
//Note: We assume that index first points to the first
//vertex of a quad, if it points to the middle of a
//quad (First % 4 != 0 for Quads) then it will not work properly.
- if (PrimType == GalPrimitiveType.Quads)
+ if (primType == GalPrimitiveType.Quads)
{
- IndexFirst = QuadHelper.ConvertSizeQuadsToTris(IndexFirst);
+ indexFirst = QuadHelper.ConvertSizeQuadsToTris(indexFirst);
}
else // QuadStrip
{
- IndexFirst = QuadHelper.ConvertSizeQuadStripToTris(IndexFirst);
+ indexFirst = QuadHelper.ConvertSizeQuadStripToTris(indexFirst);
}
- PrimType = GalPrimitiveType.Triangles;
+ primType = GalPrimitiveType.Triangles;
}
- Gpu.Renderer.Rasterizer.DrawElements(IboKey, IndexFirst, VertexBase, PrimType);
+ _gpu.Renderer.Rasterizer.DrawElements(iboKey, indexFirst, vertexBase, primType);
}
else
{
- int VertexFirst = ReadRegister(NvGpuEngine3dReg.VertexArrayFirst);
- int VertexCount = ReadRegister(NvGpuEngine3dReg.VertexArrayCount);
+ int vertexFirst = ReadRegister(NvGpuEngine3dReg.VertexArrayFirst);
+ int vertexCount = ReadRegister(NvGpuEngine3dReg.VertexArrayCount);
//Quad primitive types were deprecated on OpenGL 3.x,
//they are converted to a triangles index buffer on IB creation,
//so we should use the triangles type here too.
- if (PrimType == GalPrimitiveType.Quads || PrimType == GalPrimitiveType.QuadStrip)
+ if (primType == GalPrimitiveType.Quads || primType == GalPrimitiveType.QuadStrip)
{
//Note: We assume that index first points to the first
//vertex of a quad, if it points to the middle of a
//quad (First % 4 != 0 for Quads) then it will not work properly.
- if (PrimType == GalPrimitiveType.Quads)
+ if (primType == GalPrimitiveType.Quads)
{
- VertexFirst = QuadHelper.ConvertSizeQuadsToTris(VertexFirst);
+ vertexFirst = QuadHelper.ConvertSizeQuadsToTris(vertexFirst);
}
else // QuadStrip
{
- VertexFirst = QuadHelper.ConvertSizeQuadStripToTris(VertexFirst);
+ vertexFirst = QuadHelper.ConvertSizeQuadStripToTris(vertexFirst);
}
- PrimType = GalPrimitiveType.Triangles;
- VertexCount = QuadHelper.ConvertSizeQuadsToTris(VertexCount);
+ primType = GalPrimitiveType.Triangles;
+ vertexCount = QuadHelper.ConvertSizeQuadsToTris(vertexCount);
}
- Gpu.Renderer.Rasterizer.DrawArrays(VertexFirst, VertexCount, PrimType);
+ _gpu.Renderer.Rasterizer.DrawArrays(vertexFirst, vertexCount, primType);
}
// Reset pipeline for host OpenGL calls
- Gpu.Renderer.Pipeline.Unbind(State);
+ _gpu.Renderer.Pipeline.Unbind(state);
//Is the GPU really clearing those registers after draw?
WriteRegister(NvGpuEngine3dReg.IndexBatchFirst, 0);
@@ -1062,115 +1061,115 @@ namespace Ryujinx.Graphics.Graphics3d
WriteCounterAndTimestamp
}
- private void QueryControl(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void QueryControl(NvGpuVmm vmm, GpuMethodCall methCall)
{
- WriteRegister(MethCall);
+ WriteRegister(methCall);
- long Position = MakeInt64From2xInt32(NvGpuEngine3dReg.QueryAddress);
+ long position = MakeInt64From2xInt32(NvGpuEngine3dReg.QueryAddress);
- int Seq = Registers[(int)NvGpuEngine3dReg.QuerySequence];
- int Ctrl = Registers[(int)NvGpuEngine3dReg.QueryControl];
+ int seq = Registers[(int)NvGpuEngine3dReg.QuerySequence];
+ int ctrl = Registers[(int)NvGpuEngine3dReg.QueryControl];
- QueryMode Mode = (QueryMode)(Ctrl & 3);
+ QueryMode mode = (QueryMode)(ctrl & 3);
- switch (Mode)
+ switch (mode)
{
- case QueryMode.WriteSeq: Vmm.WriteInt32(Position, Seq); break;
+ case QueryMode.WriteSeq: vmm.WriteInt32(position, seq); break;
case QueryMode.WriteCounterAndTimestamp:
{
//TODO: Implement counters.
- long Counter = 1;
+ long counter = 1;
- long Timestamp = PerformanceCounter.ElapsedMilliseconds;
+ long timestamp = PerformanceCounter.ElapsedMilliseconds;
- Vmm.WriteInt64(Position + 0, Counter);
- Vmm.WriteInt64(Position + 8, Timestamp);
+ vmm.WriteInt64(position + 0, counter);
+ vmm.WriteInt64(position + 8, timestamp);
break;
}
}
}
- private void CbData(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void CbData(NvGpuVmm vmm, GpuMethodCall methCall)
{
- long Position = MakeInt64From2xInt32(NvGpuEngine3dReg.ConstBufferAddress);
+ long position = MakeInt64From2xInt32(NvGpuEngine3dReg.ConstBufferAddress);
- int Offset = ReadRegister(NvGpuEngine3dReg.ConstBufferOffset);
+ int offset = ReadRegister(NvGpuEngine3dReg.ConstBufferOffset);
- Vmm.WriteInt32(Position + Offset, MethCall.Argument);
+ vmm.WriteInt32(position + offset, methCall.Argument);
- WriteRegister(NvGpuEngine3dReg.ConstBufferOffset, Offset + 4);
+ WriteRegister(NvGpuEngine3dReg.ConstBufferOffset, offset + 4);
- Gpu.ResourceManager.ClearPbCache(NvGpuBufferType.ConstBuffer);
+ _gpu.ResourceManager.ClearPbCache(NvGpuBufferType.ConstBuffer);
}
- private void CbBind(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void CbBind(NvGpuVmm vmm, GpuMethodCall methCall)
{
- int Stage = (MethCall.Method - 0x904) >> 3;
+ int stage = (methCall.Method - 0x904) >> 3;
- int Index = MethCall.Argument;
+ int index = methCall.Argument;
- bool Enabled = (Index & 1) != 0;
+ bool enabled = (index & 1) != 0;
- Index = (Index >> 4) & 0x1f;
+ index = (index >> 4) & 0x1f;
- long Position = MakeInt64From2xInt32(NvGpuEngine3dReg.ConstBufferAddress);
+ long position = MakeInt64From2xInt32(NvGpuEngine3dReg.ConstBufferAddress);
- long CbKey = Vmm.GetPhysicalAddress(Position);
+ long cbKey = vmm.GetPhysicalAddress(position);
- int Size = ReadRegister(NvGpuEngine3dReg.ConstBufferSize);
+ int size = ReadRegister(NvGpuEngine3dReg.ConstBufferSize);
- if (!Gpu.Renderer.Buffer.IsCached(CbKey, Size))
+ if (!_gpu.Renderer.Buffer.IsCached(cbKey, size))
{
- Gpu.Renderer.Buffer.Create(CbKey, Size);
+ _gpu.Renderer.Buffer.Create(cbKey, size);
}
- ConstBuffer Cb = ConstBuffers[Stage][Index];
+ ConstBuffer cb = _constBuffers[stage][index];
- if (Cb.Position != Position || Cb.Enabled != Enabled || Cb.Size != Size)
+ if (cb.Position != position || cb.Enabled != enabled || cb.Size != size)
{
- ConstBuffers[Stage][Index].Position = Position;
- ConstBuffers[Stage][Index].Enabled = Enabled;
- ConstBuffers[Stage][Index].Size = Size;
+ _constBuffers[stage][index].Position = position;
+ _constBuffers[stage][index].Enabled = enabled;
+ _constBuffers[stage][index].Size = size;
}
}
- private float GetFlipSign(NvGpuEngine3dReg Reg)
+ private float GetFlipSign(NvGpuEngine3dReg reg)
{
- return MathF.Sign(ReadRegisterFloat(Reg));
+ return MathF.Sign(ReadRegisterFloat(reg));
}
- private long MakeInt64From2xInt32(NvGpuEngine3dReg Reg)
+ private long MakeInt64From2xInt32(NvGpuEngine3dReg reg)
{
return
- (long)Registers[(int)Reg + 0] << 32 |
- (uint)Registers[(int)Reg + 1];
+ (long)Registers[(int)reg + 0] << 32 |
+ (uint)Registers[(int)reg + 1];
}
- private void WriteRegister(GpuMethodCall MethCall)
+ private void WriteRegister(GpuMethodCall methCall)
{
- Registers[MethCall.Method] = MethCall.Argument;
+ Registers[methCall.Method] = methCall.Argument;
}
- private int ReadRegister(NvGpuEngine3dReg Reg)
+ private int ReadRegister(NvGpuEngine3dReg reg)
{
- return Registers[(int)Reg];
+ return Registers[(int)reg];
}
- private float ReadRegisterFloat(NvGpuEngine3dReg Reg)
+ private float ReadRegisterFloat(NvGpuEngine3dReg reg)
{
- return BitConverter.Int32BitsToSingle(ReadRegister(Reg));
+ return BitConverter.Int32BitsToSingle(ReadRegister(reg));
}
- private bool ReadRegisterBool(NvGpuEngine3dReg Reg)
+ private bool ReadRegisterBool(NvGpuEngine3dReg reg)
{
- return (ReadRegister(Reg) & 1) != 0;
+ return (ReadRegister(reg) & 1) != 0;
}
- private void WriteRegister(NvGpuEngine3dReg Reg, int Value)
+ private void WriteRegister(NvGpuEngine3dReg reg, int value)
{
- Registers[(int)Reg] = Value;
+ Registers[(int)reg] = value;
}
}
}
diff --git a/Ryujinx.Graphics/Graphics3d/NvGpuEngine3dReg.cs b/Ryujinx.Graphics/Graphics3d/NvGpuEngine3dReg.cs
index 91346464..c6596a30 100644
--- a/Ryujinx.Graphics/Graphics3d/NvGpuEngine3dReg.cs
+++ b/Ryujinx.Graphics/Graphics3d/NvGpuEngine3dReg.cs
@@ -32,13 +32,13 @@ namespace Ryujinx.Graphics.Graphics3d
StencilBackMask = 0x3d6,
StencilBackFuncMask = 0x3d7,
ColorMaskCommon = 0x3e4,
- RTSeparateFragData = 0x3eb,
+ RtSeparateFragData = 0x3eb,
ZetaAddress = 0x3f8,
ZetaFormat = 0x3fa,
ZetaBlockDimensions = 0x3fb,
ZetaLayerStride = 0x3fc,
VertexAttribNFormat = 0x458,
- RTControl = 0x487,
+ RtControl = 0x487,
ZetaHoriz = 0x48a,
ZetaVert = 0x48b,
ZetaArrayMode = 0x48c,
diff --git a/Ryujinx.Graphics/Graphics3d/NvGpuEngineM2mf.cs b/Ryujinx.Graphics/Graphics3d/NvGpuEngineM2mf.cs
index 2f1df3d3..c0f444c3 100644
--- a/Ryujinx.Graphics/Graphics3d/NvGpuEngineM2mf.cs
+++ b/Ryujinx.Graphics/Graphics3d/NvGpuEngineM2mf.cs
@@ -1,4 +1,3 @@
-using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Memory;
using Ryujinx.Graphics.Texture;
using System.Collections.Generic;
@@ -9,188 +8,188 @@ namespace Ryujinx.Graphics.Graphics3d
{
public int[] Registers { get; private set; }
- private NvGpu Gpu;
+ private NvGpu _gpu;
- private Dictionary<int, NvGpuMethod> Methods;
+ private Dictionary<int, NvGpuMethod> _methods;
- public NvGpuEngineM2mf(NvGpu Gpu)
+ public NvGpuEngineM2mf(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
Registers = new int[0x1d6];
- Methods = new Dictionary<int, NvGpuMethod>();
+ _methods = new Dictionary<int, NvGpuMethod>();
- void AddMethod(int Meth, int Count, int Stride, NvGpuMethod Method)
+ void AddMethod(int meth, int count, int stride, NvGpuMethod method)
{
- while (Count-- > 0)
+ while (count-- > 0)
{
- Methods.Add(Meth, Method);
+ _methods.Add(meth, method);
- Meth += Stride;
+ meth += stride;
}
}
AddMethod(0xc0, 1, 1, Execute);
}
- public void CallMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ public void CallMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- if (Methods.TryGetValue(MethCall.Method, out NvGpuMethod Method))
+ if (_methods.TryGetValue(methCall.Method, out NvGpuMethod method))
{
- Method(Vmm, MethCall);
+ method(vmm, methCall);
}
else
{
- WriteRegister(MethCall);
+ WriteRegister(methCall);
}
}
- private void Execute(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void Execute(NvGpuVmm vmm, GpuMethodCall methCall)
{
//TODO: Some registers and copy modes are still not implemented.
- int Control = MethCall.Argument;
+ int control = methCall.Argument;
- bool SrcLinear = ((Control >> 7) & 1) != 0;
- bool DstLinear = ((Control >> 8) & 1) != 0;
- bool Copy2d = ((Control >> 9) & 1) != 0;
+ bool srcLinear = ((control >> 7) & 1) != 0;
+ bool dstLinear = ((control >> 8) & 1) != 0;
+ bool copy2D = ((control >> 9) & 1) != 0;
- long SrcAddress = MakeInt64From2xInt32(NvGpuEngineM2mfReg.SrcAddress);
- long DstAddress = MakeInt64From2xInt32(NvGpuEngineM2mfReg.DstAddress);
+ long srcAddress = MakeInt64From2xInt32(NvGpuEngineM2mfReg.SrcAddress);
+ long dstAddress = MakeInt64From2xInt32(NvGpuEngineM2mfReg.DstAddress);
- int SrcPitch = ReadRegister(NvGpuEngineM2mfReg.SrcPitch);
- int DstPitch = ReadRegister(NvGpuEngineM2mfReg.DstPitch);
+ int srcPitch = ReadRegister(NvGpuEngineM2mfReg.SrcPitch);
+ int dstPitch = ReadRegister(NvGpuEngineM2mfReg.DstPitch);
- int XCount = ReadRegister(NvGpuEngineM2mfReg.XCount);
- int YCount = ReadRegister(NvGpuEngineM2mfReg.YCount);
+ int xCount = ReadRegister(NvGpuEngineM2mfReg.XCount);
+ int yCount = ReadRegister(NvGpuEngineM2mfReg.YCount);
- int Swizzle = ReadRegister(NvGpuEngineM2mfReg.Swizzle);
+ int swizzle = ReadRegister(NvGpuEngineM2mfReg.Swizzle);
- int DstBlkDim = ReadRegister(NvGpuEngineM2mfReg.DstBlkDim);
- int DstSizeX = ReadRegister(NvGpuEngineM2mfReg.DstSizeX);
- int DstSizeY = ReadRegister(NvGpuEngineM2mfReg.DstSizeY);
- int DstSizeZ = ReadRegister(NvGpuEngineM2mfReg.DstSizeZ);
- int DstPosXY = ReadRegister(NvGpuEngineM2mfReg.DstPosXY);
- int DstPosZ = ReadRegister(NvGpuEngineM2mfReg.DstPosZ);
+ int dstBlkDim = ReadRegister(NvGpuEngineM2mfReg.DstBlkDim);
+ int dstSizeX = ReadRegister(NvGpuEngineM2mfReg.DstSizeX);
+ int dstSizeY = ReadRegister(NvGpuEngineM2mfReg.DstSizeY);
+ int dstSizeZ = ReadRegister(NvGpuEngineM2mfReg.DstSizeZ);
+ int dstPosXY = ReadRegister(NvGpuEngineM2mfReg.DstPosXY);
+ int dstPosZ = ReadRegister(NvGpuEngineM2mfReg.DstPosZ);
- int SrcBlkDim = ReadRegister(NvGpuEngineM2mfReg.SrcBlkDim);
- int SrcSizeX = ReadRegister(NvGpuEngineM2mfReg.SrcSizeX);
- int SrcSizeY = ReadRegister(NvGpuEngineM2mfReg.SrcSizeY);
- int SrcSizeZ = ReadRegister(NvGpuEngineM2mfReg.SrcSizeZ);
- int SrcPosXY = ReadRegister(NvGpuEngineM2mfReg.SrcPosXY);
- int SrcPosZ = ReadRegister(NvGpuEngineM2mfReg.SrcPosZ);
+ int srcBlkDim = ReadRegister(NvGpuEngineM2mfReg.SrcBlkDim);
+ int srcSizeX = ReadRegister(NvGpuEngineM2mfReg.SrcSizeX);
+ int srcSizeY = ReadRegister(NvGpuEngineM2mfReg.SrcSizeY);
+ int srcSizeZ = ReadRegister(NvGpuEngineM2mfReg.SrcSizeZ);
+ int srcPosXY = ReadRegister(NvGpuEngineM2mfReg.SrcPosXY);
+ int srcPosZ = ReadRegister(NvGpuEngineM2mfReg.SrcPosZ);
- int SrcCpp = ((Swizzle >> 20) & 7) + 1;
- int DstCpp = ((Swizzle >> 24) & 7) + 1;
+ int srcCpp = ((swizzle >> 20) & 7) + 1;
+ int dstCpp = ((swizzle >> 24) & 7) + 1;
- int DstPosX = (DstPosXY >> 0) & 0xffff;
- int DstPosY = (DstPosXY >> 16) & 0xffff;
+ int dstPosX = (dstPosXY >> 0) & 0xffff;
+ int dstPosY = (dstPosXY >> 16) & 0xffff;
- int SrcPosX = (SrcPosXY >> 0) & 0xffff;
- int SrcPosY = (SrcPosXY >> 16) & 0xffff;
+ int srcPosX = (srcPosXY >> 0) & 0xffff;
+ int srcPosY = (srcPosXY >> 16) & 0xffff;
- int SrcBlockHeight = 1 << ((SrcBlkDim >> 4) & 0xf);
- int DstBlockHeight = 1 << ((DstBlkDim >> 4) & 0xf);
+ int srcBlockHeight = 1 << ((srcBlkDim >> 4) & 0xf);
+ int dstBlockHeight = 1 << ((dstBlkDim >> 4) & 0xf);
- long SrcPA = Vmm.GetPhysicalAddress(SrcAddress);
- long DstPA = Vmm.GetPhysicalAddress(DstAddress);
+ long srcPa = vmm.GetPhysicalAddress(srcAddress);
+ long dstPa = vmm.GetPhysicalAddress(dstAddress);
- if (Copy2d)
+ if (copy2D)
{
- if (SrcLinear)
+ if (srcLinear)
{
- SrcPosX = SrcPosY = SrcPosZ = 0;
+ srcPosX = srcPosY = srcPosZ = 0;
}
- if (DstLinear)
+ if (dstLinear)
{
- DstPosX = DstPosY = DstPosZ = 0;
+ dstPosX = dstPosY = dstPosZ = 0;
}
- if (SrcLinear && DstLinear)
+ if (srcLinear && dstLinear)
{
- for (int Y = 0; Y < YCount; Y++)
+ for (int y = 0; y < yCount; y++)
{
- int SrcOffset = (SrcPosY + Y) * SrcPitch + SrcPosX * SrcCpp;
- int DstOffset = (DstPosY + Y) * DstPitch + DstPosX * DstCpp;
+ int srcOffset = (srcPosY + y) * srcPitch + srcPosX * srcCpp;
+ int dstOffset = (dstPosY + y) * dstPitch + dstPosX * dstCpp;
- long Src = SrcPA + (uint)SrcOffset;
- long Dst = DstPA + (uint)DstOffset;
+ long src = srcPa + (uint)srcOffset;
+ long dst = dstPa + (uint)dstOffset;
- Vmm.Memory.CopyBytes(Src, Dst, XCount * SrcCpp);
+ vmm.Memory.CopyBytes(src, dst, xCount * srcCpp);
}
}
else
{
- ISwizzle SrcSwizzle;
+ ISwizzle srcSwizzle;
- if (SrcLinear)
+ if (srcLinear)
{
- SrcSwizzle = new LinearSwizzle(SrcPitch, SrcCpp, SrcSizeX, SrcSizeY);
+ srcSwizzle = new LinearSwizzle(srcPitch, srcCpp, srcSizeX, srcSizeY);
}
else
{
- SrcSwizzle = new BlockLinearSwizzle(
- SrcSizeX,
- SrcSizeY, 1,
- SrcBlockHeight, 1,
- SrcCpp);
+ srcSwizzle = new BlockLinearSwizzle(
+ srcSizeX,
+ srcSizeY, 1,
+ srcBlockHeight, 1,
+ srcCpp);
}
- ISwizzle DstSwizzle;
+ ISwizzle dstSwizzle;
- if (DstLinear)
+ if (dstLinear)
{
- DstSwizzle = new LinearSwizzle(DstPitch, DstCpp, SrcSizeX, SrcSizeY);
+ dstSwizzle = new LinearSwizzle(dstPitch, dstCpp, srcSizeX, srcSizeY);
}
else
{
- DstSwizzle = new BlockLinearSwizzle(
- DstSizeX,
- DstSizeY, 1,
- DstBlockHeight, 1,
- DstCpp);
+ dstSwizzle = new BlockLinearSwizzle(
+ dstSizeX,
+ dstSizeY, 1,
+ dstBlockHeight, 1,
+ dstCpp);
}
- for (int Y = 0; Y < YCount; Y++)
- for (int X = 0; X < XCount; X++)
+ for (int y = 0; y < yCount; y++)
+ for (int x = 0; x < xCount; x++)
{
- int SrcOffset = SrcSwizzle.GetSwizzleOffset(SrcPosX + X, SrcPosY + Y, 0);
- int DstOffset = DstSwizzle.GetSwizzleOffset(DstPosX + X, DstPosY + Y, 0);
+ int srcOffset = srcSwizzle.GetSwizzleOffset(srcPosX + x, srcPosY + y, 0);
+ int dstOffset = dstSwizzle.GetSwizzleOffset(dstPosX + x, dstPosY + y, 0);
- long Src = SrcPA + (uint)SrcOffset;
- long Dst = DstPA + (uint)DstOffset;
+ long src = srcPa + (uint)srcOffset;
+ long dst = dstPa + (uint)dstOffset;
- Vmm.Memory.CopyBytes(Src, Dst, SrcCpp);
+ vmm.Memory.CopyBytes(src, dst, srcCpp);
}
}
}
else
{
- Vmm.Memory.CopyBytes(SrcPA, DstPA, XCount);
+ vmm.Memory.CopyBytes(srcPa, dstPa, xCount);
}
}
- private long MakeInt64From2xInt32(NvGpuEngineM2mfReg Reg)
+ private long MakeInt64From2xInt32(NvGpuEngineM2mfReg reg)
{
return
- (long)Registers[(int)Reg + 0] << 32 |
- (uint)Registers[(int)Reg + 1];
+ (long)Registers[(int)reg + 0] << 32 |
+ (uint)Registers[(int)reg + 1];
}
- private void WriteRegister(GpuMethodCall MethCall)
+ private void WriteRegister(GpuMethodCall methCall)
{
- Registers[MethCall.Method] = MethCall.Argument;
+ Registers[methCall.Method] = methCall.Argument;
}
- private int ReadRegister(NvGpuEngineM2mfReg Reg)
+ private int ReadRegister(NvGpuEngineM2mfReg reg)
{
- return Registers[(int)Reg];
+ return Registers[(int)reg];
}
- private void WriteRegister(NvGpuEngineM2mfReg Reg, int Value)
+ private void WriteRegister(NvGpuEngineM2mfReg reg, int value)
{
- Registers[(int)Reg] = Value;
+ Registers[(int)reg] = value;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/NvGpuEngineP2mf.cs b/Ryujinx.Graphics/Graphics3d/NvGpuEngineP2mf.cs
index 62872ba1..d24f2303 100644
--- a/Ryujinx.Graphics/Graphics3d/NvGpuEngineP2mf.cs
+++ b/Ryujinx.Graphics/Graphics3d/NvGpuEngineP2mf.cs
@@ -1,4 +1,3 @@
-using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Memory;
using Ryujinx.Graphics.Texture;
using System.Collections.Generic;
@@ -9,41 +8,41 @@ namespace Ryujinx.Graphics.Graphics3d
{
public int[] Registers { get; private set; }
- private NvGpu Gpu;
+ private NvGpu _gpu;
- private Dictionary<int, NvGpuMethod> Methods;
+ private Dictionary<int, NvGpuMethod> _methods;
- private int CopyStartX;
- private int CopyStartY;
+ private int _copyStartX;
+ private int _copyStartY;
- private int CopyWidth;
- private int CopyHeight;
- private int CopyGobBlockHeight;
+ private int _copyWidth;
+ private int _copyHeight;
+ private int _copyGobBlockHeight;
- private long CopyAddress;
+ private long _copyAddress;
- private int CopyOffset;
- private int CopySize;
+ private int _copyOffset;
+ private int _copySize;
- private bool CopyLinear;
+ private bool _copyLinear;
- private byte[] Buffer;
+ private byte[] _buffer;
- public NvGpuEngineP2mf(NvGpu Gpu)
+ public NvGpuEngineP2mf(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
Registers = new int[0x80];
- Methods = new Dictionary<int, NvGpuMethod>();
+ _methods = new Dictionary<int, NvGpuMethod>();
- void AddMethod(int Meth, int Count, int Stride, NvGpuMethod Method)
+ void AddMethod(int meth, int count, int stride, NvGpuMethod method)
{
- while (Count-- > 0)
+ while (count-- > 0)
{
- Methods.Add(Meth, Method);
+ _methods.Add(meth, method);
- Meth += Stride;
+ meth += stride;
}
}
@@ -51,115 +50,115 @@ namespace Ryujinx.Graphics.Graphics3d
AddMethod(0x6d, 1, 1, PushData);
}
- public void CallMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ public void CallMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- if (Methods.TryGetValue(MethCall.Method, out NvGpuMethod Method))
+ if (_methods.TryGetValue(methCall.Method, out NvGpuMethod method))
{
- Method(Vmm, MethCall);
+ method(vmm, methCall);
}
else
{
- WriteRegister(MethCall);
+ WriteRegister(methCall);
}
}
- private void Execute(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void Execute(NvGpuVmm vmm, GpuMethodCall methCall)
{
//TODO: Some registers and copy modes are still not implemented.
- int Control = MethCall.Argument;
+ int control = methCall.Argument;
- long DstAddress = MakeInt64From2xInt32(NvGpuEngineP2mfReg.DstAddress);
+ long dstAddress = MakeInt64From2xInt32(NvGpuEngineP2mfReg.DstAddress);
- int DstPitch = ReadRegister(NvGpuEngineP2mfReg.DstPitch);
- int DstBlkDim = ReadRegister(NvGpuEngineP2mfReg.DstBlockDim);
+ int dstPitch = ReadRegister(NvGpuEngineP2mfReg.DstPitch);
+ int dstBlkDim = ReadRegister(NvGpuEngineP2mfReg.DstBlockDim);
- int DstX = ReadRegister(NvGpuEngineP2mfReg.DstX);
- int DstY = ReadRegister(NvGpuEngineP2mfReg.DstY);
+ int dstX = ReadRegister(NvGpuEngineP2mfReg.DstX);
+ int dstY = ReadRegister(NvGpuEngineP2mfReg.DstY);
- int DstWidth = ReadRegister(NvGpuEngineP2mfReg.DstWidth);
- int DstHeight = ReadRegister(NvGpuEngineP2mfReg.DstHeight);
+ int dstWidth = ReadRegister(NvGpuEngineP2mfReg.DstWidth);
+ int dstHeight = ReadRegister(NvGpuEngineP2mfReg.DstHeight);
- int LineLengthIn = ReadRegister(NvGpuEngineP2mfReg.LineLengthIn);
- int LineCount = ReadRegister(NvGpuEngineP2mfReg.LineCount);
+ int lineLengthIn = ReadRegister(NvGpuEngineP2mfReg.LineLengthIn);
+ int lineCount = ReadRegister(NvGpuEngineP2mfReg.LineCount);
- CopyLinear = (Control & 1) != 0;
+ _copyLinear = (control & 1) != 0;
- CopyGobBlockHeight = 1 << ((DstBlkDim >> 4) & 0xf);
+ _copyGobBlockHeight = 1 << ((dstBlkDim >> 4) & 0xf);
- CopyStartX = DstX;
- CopyStartY = DstY;
+ _copyStartX = dstX;
+ _copyStartY = dstY;
- CopyWidth = DstWidth;
- CopyHeight = DstHeight;
+ _copyWidth = dstWidth;
+ _copyHeight = dstHeight;
- CopyAddress = DstAddress;
+ _copyAddress = dstAddress;
- CopyOffset = 0;
- CopySize = LineLengthIn * LineCount;
+ _copyOffset = 0;
+ _copySize = lineLengthIn * lineCount;
- Buffer = new byte[CopySize];
+ _buffer = new byte[_copySize];
}
- private void PushData(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void PushData(NvGpuVmm vmm, GpuMethodCall methCall)
{
- if (Buffer == null)
+ if (_buffer == null)
{
return;
}
- for (int Shift = 0; Shift < 32 && CopyOffset < CopySize; Shift += 8, CopyOffset++)
+ for (int shift = 0; shift < 32 && _copyOffset < _copySize; shift += 8, _copyOffset++)
{
- Buffer[CopyOffset] = (byte)(MethCall.Argument >> Shift);
+ _buffer[_copyOffset] = (byte)(methCall.Argument >> shift);
}
- if (MethCall.IsLastCall)
+ if (methCall.IsLastCall)
{
- if (CopyLinear)
+ if (_copyLinear)
{
- Vmm.WriteBytes(CopyAddress, Buffer);
+ vmm.WriteBytes(_copyAddress, _buffer);
}
else
{
- BlockLinearSwizzle Swizzle = new BlockLinearSwizzle(
- CopyWidth,
- CopyHeight, 1,
- CopyGobBlockHeight, 1, 1);
+ BlockLinearSwizzle swizzle = new BlockLinearSwizzle(
+ _copyWidth,
+ _copyHeight, 1,
+ _copyGobBlockHeight, 1, 1);
- int SrcOffset = 0;
+ int srcOffset = 0;
- for (int Y = CopyStartY; Y < CopyHeight && SrcOffset < CopySize; Y++)
- for (int X = CopyStartX; X < CopyWidth && SrcOffset < CopySize; X++)
+ for (int y = _copyStartY; y < _copyHeight && srcOffset < _copySize; y++)
+ for (int x = _copyStartX; x < _copyWidth && srcOffset < _copySize; x++)
{
- int DstOffset = Swizzle.GetSwizzleOffset(X, Y, 0);
+ int dstOffset = swizzle.GetSwizzleOffset(x, y, 0);
- Vmm.WriteByte(CopyAddress + DstOffset, Buffer[SrcOffset++]);
+ vmm.WriteByte(_copyAddress + dstOffset, _buffer[srcOffset++]);
}
}
- Buffer = null;
+ _buffer = null;
}
}
- private long MakeInt64From2xInt32(NvGpuEngineP2mfReg Reg)
+ private long MakeInt64From2xInt32(NvGpuEngineP2mfReg reg)
{
return
- (long)Registers[(int)Reg + 0] << 32 |
- (uint)Registers[(int)Reg + 1];
+ (long)Registers[(int)reg + 0] << 32 |
+ (uint)Registers[(int)reg + 1];
}
- private void WriteRegister(GpuMethodCall MethCall)
+ private void WriteRegister(GpuMethodCall methCall)
{
- Registers[MethCall.Method] = MethCall.Argument;
+ Registers[methCall.Method] = methCall.Argument;
}
- private int ReadRegister(NvGpuEngineP2mfReg Reg)
+ private int ReadRegister(NvGpuEngineP2mfReg reg)
{
- return Registers[(int)Reg];
+ return Registers[(int)reg];
}
- private void WriteRegister(NvGpuEngineP2mfReg Reg, int Value)
+ private void WriteRegister(NvGpuEngineP2mfReg reg, int value)
{
- Registers[(int)Reg] = Value;
+ Registers[(int)reg] = value;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/NvGpuFifo.cs b/Ryujinx.Graphics/Graphics3d/NvGpuFifo.cs
index f834ade7..25c1a9cd 100644
--- a/Ryujinx.Graphics/Graphics3d/NvGpuFifo.cs
+++ b/Ryujinx.Graphics/Graphics3d/NvGpuFifo.cs
@@ -11,166 +11,166 @@ namespace Ryujinx.Graphics.Graphics3d
//a guess here and use 256kb as the size. Increase if needed.
private const int MmeWords = 256 * 256;
- private NvGpu Gpu;
+ private NvGpu _gpu;
- private NvGpuEngine[] SubChannels;
+ private NvGpuEngine[] _subChannels;
private struct CachedMacro
{
public int Position { get; private set; }
- private bool ExecutionPending;
- private int Argument;
+ private bool _executionPending;
+ private int _argument;
- private MacroInterpreter Interpreter;
+ private MacroInterpreter _interpreter;
- public CachedMacro(NvGpuFifo PFifo, INvGpuEngine Engine, int Position)
+ public CachedMacro(NvGpuFifo pFifo, INvGpuEngine engine, int position)
{
- this.Position = Position;
+ Position = position;
- ExecutionPending = false;
- Argument = 0;
+ _executionPending = false;
+ _argument = 0;
- Interpreter = new MacroInterpreter(PFifo, Engine);
+ _interpreter = new MacroInterpreter(pFifo, engine);
}
- public void StartExecution(int Argument)
+ public void StartExecution(int argument)
{
- this.Argument = Argument;
+ _argument = argument;
- ExecutionPending = true;
+ _executionPending = true;
}
- public void Execute(NvGpuVmm Vmm, int[] Mme)
+ public void Execute(NvGpuVmm vmm, int[] mme)
{
- if (ExecutionPending)
+ if (_executionPending)
{
- ExecutionPending = false;
+ _executionPending = false;
- Interpreter?.Execute(Vmm, Mme, Position, Argument);
+ _interpreter?.Execute(vmm, mme, Position, _argument);
}
}
- public void PushArgument(int Argument)
+ public void PushArgument(int argument)
{
- Interpreter?.Fifo.Enqueue(Argument);
+ _interpreter?.Fifo.Enqueue(argument);
}
}
- private int CurrMacroPosition;
- private int CurrMacroBindIndex;
+ private int _currMacroPosition;
+ private int _currMacroBindIndex;
- private CachedMacro[] Macros;
+ private CachedMacro[] _macros;
- private int[] Mme;
+ private int[] _mme;
- public NvGpuFifo(NvGpu Gpu)
+ public NvGpuFifo(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
- SubChannels = new NvGpuEngine[8];
+ _subChannels = new NvGpuEngine[8];
- Macros = new CachedMacro[MacrosCount];
+ _macros = new CachedMacro[MacrosCount];
- Mme = new int[MmeWords];
+ _mme = new int[MmeWords];
}
- public void CallMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ public void CallMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- if ((NvGpuFifoMeth)MethCall.Method == NvGpuFifoMeth.BindChannel)
+ if ((NvGpuFifoMeth)methCall.Method == NvGpuFifoMeth.BindChannel)
{
- NvGpuEngine Engine = (NvGpuEngine)MethCall.Argument;
+ NvGpuEngine engine = (NvGpuEngine)methCall.Argument;
- SubChannels[MethCall.SubChannel] = Engine;
+ _subChannels[methCall.SubChannel] = engine;
}
else
{
- switch (SubChannels[MethCall.SubChannel])
+ switch (_subChannels[methCall.SubChannel])
{
- case NvGpuEngine._2d: Call2dMethod (Vmm, MethCall); break;
- case NvGpuEngine._3d: Call3dMethod (Vmm, MethCall); break;
- case NvGpuEngine.P2mf: CallP2mfMethod(Vmm, MethCall); break;
- case NvGpuEngine.M2mf: CallM2mfMethod(Vmm, MethCall); break;
+ case NvGpuEngine._2d: Call2dMethod (vmm, methCall); break;
+ case NvGpuEngine._3d: Call3dMethod (vmm, methCall); break;
+ case NvGpuEngine.P2mf: CallP2mfMethod(vmm, methCall); break;
+ case NvGpuEngine.M2mf: CallM2mfMethod(vmm, methCall); break;
}
}
}
- private void Call2dMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void Call2dMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- Gpu.Engine2d.CallMethod(Vmm, MethCall);
+ _gpu.Engine2d.CallMethod(vmm, methCall);
}
- private void Call3dMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void Call3dMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- if (MethCall.Method < 0x80)
+ if (methCall.Method < 0x80)
{
- switch ((NvGpuFifoMeth)MethCall.Method)
+ switch ((NvGpuFifoMeth)methCall.Method)
{
case NvGpuFifoMeth.SetMacroUploadAddress:
{
- CurrMacroPosition = MethCall.Argument;
+ _currMacroPosition = methCall.Argument;
break;
}
case NvGpuFifoMeth.SendMacroCodeData:
{
- Mme[CurrMacroPosition++] = MethCall.Argument;
+ _mme[_currMacroPosition++] = methCall.Argument;
break;
}
case NvGpuFifoMeth.SetMacroBindingIndex:
{
- CurrMacroBindIndex = MethCall.Argument;
+ _currMacroBindIndex = methCall.Argument;
break;
}
case NvGpuFifoMeth.BindMacro:
{
- int Position = MethCall.Argument;
+ int position = methCall.Argument;
- Macros[CurrMacroBindIndex] = new CachedMacro(this, Gpu.Engine3d, Position);
+ _macros[_currMacroBindIndex] = new CachedMacro(this, _gpu.Engine3d, position);
break;
}
- default: CallP2mfMethod(Vmm, MethCall); break;
+ default: CallP2mfMethod(vmm, methCall); break;
}
}
- else if (MethCall.Method < 0xe00)
+ else if (methCall.Method < 0xe00)
{
- Gpu.Engine3d.CallMethod(Vmm, MethCall);
+ _gpu.Engine3d.CallMethod(vmm, methCall);
}
else
{
- int MacroIndex = (MethCall.Method >> 1) & MacroIndexMask;
+ int macroIndex = (methCall.Method >> 1) & MacroIndexMask;
- if ((MethCall.Method & 1) != 0)
+ if ((methCall.Method & 1) != 0)
{
- Macros[MacroIndex].PushArgument(MethCall.Argument);
+ _macros[macroIndex].PushArgument(methCall.Argument);
}
else
{
- Macros[MacroIndex].StartExecution(MethCall.Argument);
+ _macros[macroIndex].StartExecution(methCall.Argument);
}
- if (MethCall.IsLastCall)
+ if (methCall.IsLastCall)
{
- Macros[MacroIndex].Execute(Vmm, Mme);
+ _macros[macroIndex].Execute(vmm, _mme);
}
}
}
- private void CallP2mfMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void CallP2mfMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- Gpu.EngineP2mf.CallMethod(Vmm, MethCall);
+ _gpu.EngineP2mf.CallMethod(vmm, methCall);
}
- private void CallM2mfMethod(NvGpuVmm Vmm, GpuMethodCall MethCall)
+ private void CallM2mfMethod(NvGpuVmm vmm, GpuMethodCall methCall)
{
- Gpu.EngineM2mf.CallMethod(Vmm, MethCall);
+ _gpu.EngineM2mf.CallMethod(vmm, methCall);
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/NvGpuMethod.cs b/Ryujinx.Graphics/Graphics3d/NvGpuMethod.cs
index 8730d144..23185c81 100644
--- a/Ryujinx.Graphics/Graphics3d/NvGpuMethod.cs
+++ b/Ryujinx.Graphics/Graphics3d/NvGpuMethod.cs
@@ -2,5 +2,5 @@ using Ryujinx.Graphics.Memory;
namespace Ryujinx.Graphics.Graphics3d
{
- delegate void NvGpuMethod(NvGpuVmm Vmm, GpuMethodCall MethCall);
+ delegate void NvGpuMethod(NvGpuVmm vmm, GpuMethodCall methCall);
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/ASTCDecoder.cs b/Ryujinx.Graphics/Graphics3d/Texture/ASTCDecoder.cs
deleted file mode 100644
index 00158dc1..00000000
--- a/Ryujinx.Graphics/Graphics3d/Texture/ASTCDecoder.cs
+++ /dev/null
@@ -1,1385 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-
-namespace Ryujinx.Graphics.Texture
-{
- public class ASTCDecoderException : Exception
- {
- public ASTCDecoderException(string ExMsg) : base(ExMsg) { }
- }
-
- //https://github.com/GammaUNC/FasTC/blob/master/ASTCEncoder/src/Decompressor.cpp
- public static class ASTCDecoder
- {
- struct TexelWeightParams
- {
- public int Width;
- public int Height;
- public bool DualPlane;
- public int MaxWeight;
- public bool Error;
- public bool VoidExtentLDR;
- public bool VoidExtentHDR;
-
- public int GetPackedBitSize()
- {
- // How many indices do we have?
- int Indices = Height * Width;
-
- if (DualPlane)
- {
- Indices *= 2;
- }
-
- IntegerEncoded IntEncoded = IntegerEncoded.CreateEncoding(MaxWeight);
-
- return IntEncoded.GetBitLength(Indices);
- }
-
- public int GetNumWeightValues()
- {
- int Ret = Width * Height;
-
- if (DualPlane)
- {
- Ret *= 2;
- }
-
- return Ret;
- }
- }
-
- public static byte[] DecodeToRGBA8888(
- byte[] InputBuffer,
- int BlockX,
- int BlockY,
- int BlockZ,
- int X,
- int Y,
- int Z)
- {
- using (MemoryStream InputStream = new MemoryStream(InputBuffer))
- {
- BinaryReader BinReader = new BinaryReader(InputStream);
-
- if (BlockX > 12 || BlockY > 12)
- {
- throw new ASTCDecoderException("Block size unsupported!");
- }
-
- if (BlockZ != 1 || Z != 1)
- {
- // TODO: Support 3D textures?
- throw new ASTCDecoderException("3D compressed textures unsupported!");
- }
-
- using (MemoryStream OutputStream = new MemoryStream())
- {
- int BlockIndex = 0;
-
- for (int j = 0; j < Y; j += BlockY)
- {
- for (int i = 0; i < X; i += BlockX)
- {
- int[] DecompressedData = new int[144];
-
- DecompressBlock(BinReader.ReadBytes(0x10), DecompressedData, BlockX, BlockY);
-
- int DecompressedWidth = Math.Min(BlockX, X - i);
- int DecompressedHeight = Math.Min(BlockY, Y - j);
- int BaseOffsets = (j * X + i) * 4;
-
- for (int jj = 0; jj < DecompressedHeight; jj++)
- {
- OutputStream.Seek(BaseOffsets + jj * X * 4, SeekOrigin.Begin);
-
- byte[] OutputBuffer = new byte[DecompressedData.Length * sizeof(int)];
- Buffer.BlockCopy(DecompressedData, 0, OutputBuffer, 0, OutputBuffer.Length);
-
- OutputStream.Write(OutputBuffer, jj * BlockX * 4, DecompressedWidth * 4);
- }
-
- BlockIndex++;
- }
- }
-
- return OutputStream.ToArray();
- }
- }
- }
-
- public static bool DecompressBlock(
- byte[] InputBuffer,
- int[] OutputBuffer,
- int BlockWidth,
- int BlockHeight)
- {
- BitArrayStream BitStream = new BitArrayStream(new BitArray(InputBuffer));
- TexelWeightParams TexelParams = DecodeBlockInfo(BitStream);
-
- if (TexelParams.Error)
- {
- throw new ASTCDecoderException("Invalid block mode");
- }
-
- if (TexelParams.VoidExtentLDR)
- {
- FillVoidExtentLDR(BitStream, OutputBuffer, BlockWidth, BlockHeight);
-
- return true;
- }
-
- if (TexelParams.VoidExtentHDR)
- {
- throw new ASTCDecoderException("HDR void extent blocks are unsupported!");
- }
-
- if (TexelParams.Width > BlockWidth)
- {
- throw new ASTCDecoderException("Texel weight grid width should be smaller than block width");
- }
-
- if (TexelParams.Height > BlockHeight)
- {
- throw new ASTCDecoderException("Texel weight grid height should be smaller than block height");
- }
-
- // Read num partitions
- int NumberPartitions = BitStream.ReadBits(2) + 1;
- Debug.Assert(NumberPartitions <= 4);
-
- if (NumberPartitions == 4 && TexelParams.DualPlane)
- {
- throw new ASTCDecoderException("Dual plane mode is incompatible with four partition blocks");
- }
-
- // Based on the number of partitions, read the color endpoint mode for
- // each partition.
-
- // Determine partitions, partition index, and color endpoint modes
- int PlaneIndices = -1;
- int PartitionIndex;
- uint[] ColorEndpointMode = { 0, 0, 0, 0 };
-
- BitArrayStream ColorEndpointStream = new BitArrayStream(new BitArray(16 * 8));
-
- // Read extra config data...
- uint BaseColorEndpointMode = 0;
-
- if (NumberPartitions == 1)
- {
- ColorEndpointMode[0] = (uint)BitStream.ReadBits(4);
- PartitionIndex = 0;
- }
- else
- {
- PartitionIndex = BitStream.ReadBits(10);
- BaseColorEndpointMode = (uint)BitStream.ReadBits(6);
- }
-
- uint BaseMode = (BaseColorEndpointMode & 3);
-
- // Remaining bits are color endpoint data...
- int NumberWeightBits = TexelParams.GetPackedBitSize();
- int RemainingBits = 128 - NumberWeightBits - BitStream.Position;
-
- // Consider extra bits prior to texel data...
- uint ExtraColorEndpointModeBits = 0;
-
- if (BaseMode != 0)
- {
- switch (NumberPartitions)
- {
- case 2: ExtraColorEndpointModeBits += 2; break;
- case 3: ExtraColorEndpointModeBits += 5; break;
- case 4: ExtraColorEndpointModeBits += 8; break;
- default: Debug.Assert(false); break;
- }
- }
-
- RemainingBits -= (int)ExtraColorEndpointModeBits;
-
- // Do we have a dual plane situation?
- int PlaneSelectorBits = 0;
-
- if (TexelParams.DualPlane)
- {
- PlaneSelectorBits = 2;
- }
-
- RemainingBits -= PlaneSelectorBits;
-
- // Read color data...
- int ColorDataBits = RemainingBits;
-
- while (RemainingBits > 0)
- {
- int NumberBits = Math.Min(RemainingBits, 8);
- int Bits = BitStream.ReadBits(NumberBits);
- ColorEndpointStream.WriteBits(Bits, NumberBits);
- RemainingBits -= 8;
- }
-
- // Read the plane selection bits
- PlaneIndices = BitStream.ReadBits(PlaneSelectorBits);
-
- // Read the rest of the CEM
- if (BaseMode != 0)
- {
- uint ExtraColorEndpointMode = (uint)BitStream.ReadBits((int)ExtraColorEndpointModeBits);
- uint TempColorEndpointMode = (ExtraColorEndpointMode << 6) | BaseColorEndpointMode;
- TempColorEndpointMode >>= 2;
-
- bool[] C = new bool[4];
-
- for (int i = 0; i < NumberPartitions; i++)
- {
- C[i] = (TempColorEndpointMode & 1) != 0;
- TempColorEndpointMode >>= 1;
- }
-
- byte[] M = new byte[4];
-
- for (int i = 0; i < NumberPartitions; i++)
- {
- M[i] = (byte)(TempColorEndpointMode & 3);
- TempColorEndpointMode >>= 2;
- Debug.Assert(M[i] <= 3);
- }
-
- for (int i = 0; i < NumberPartitions; i++)
- {
- ColorEndpointMode[i] = BaseMode;
- if (!(C[i])) ColorEndpointMode[i] -= 1;
- ColorEndpointMode[i] <<= 2;
- ColorEndpointMode[i] |= M[i];
- }
- }
- else if (NumberPartitions > 1)
- {
- uint TempColorEndpointMode = BaseColorEndpointMode >> 2;
-
- for (uint i = 0; i < NumberPartitions; i++)
- {
- ColorEndpointMode[i] = TempColorEndpointMode;
- }
- }
-
- // Make sure everything up till here is sane.
- for (int i = 0; i < NumberPartitions; i++)
- {
- Debug.Assert(ColorEndpointMode[i] < 16);
- }
- Debug.Assert(BitStream.Position + TexelParams.GetPackedBitSize() == 128);
-
- // Decode both color data and texel weight data
- int[] ColorValues = new int[32]; // Four values * two endpoints * four maximum partitions
- DecodeColorValues(ColorValues, ColorEndpointStream.ToByteArray(), ColorEndpointMode, NumberPartitions, ColorDataBits);
-
- ASTCPixel[][] EndPoints = new ASTCPixel[4][];
- EndPoints[0] = new ASTCPixel[2];
- EndPoints[1] = new ASTCPixel[2];
- EndPoints[2] = new ASTCPixel[2];
- EndPoints[3] = new ASTCPixel[2];
-
- int ColorValuesPosition = 0;
-
- for (int i = 0; i < NumberPartitions; i++)
- {
- ComputeEndpoints(EndPoints[i], ColorValues, ColorEndpointMode[i], ref ColorValuesPosition);
- }
-
- // Read the texel weight data.
- byte[] TexelWeightData = (byte[])InputBuffer.Clone();
-
- // Reverse everything
- for (int i = 0; i < 8; i++)
- {
- byte a = ReverseByte(TexelWeightData[i]);
- byte b = ReverseByte(TexelWeightData[15 - i]);
-
- TexelWeightData[i] = b;
- TexelWeightData[15 - i] = a;
- }
-
- // Make sure that higher non-texel bits are set to zero
- int ClearByteStart = (TexelParams.GetPackedBitSize() >> 3) + 1;
- TexelWeightData[ClearByteStart - 1] &= (byte)((1 << (TexelParams.GetPackedBitSize() % 8)) - 1);
-
- int cLen = 16 - ClearByteStart;
- for (int i = ClearByteStart; i < ClearByteStart + cLen; i++) TexelWeightData[i] = 0;
-
- List<IntegerEncoded> TexelWeightValues = new List<IntegerEncoded>();
- BitArrayStream WeightBitStream = new BitArrayStream(new BitArray(TexelWeightData));
-
- IntegerEncoded.DecodeIntegerSequence(TexelWeightValues, WeightBitStream, TexelParams.MaxWeight, TexelParams.GetNumWeightValues());
-
- // Blocks can be at most 12x12, so we can have as many as 144 weights
- int[][] Weights = new int[2][];
- Weights[0] = new int[144];
- Weights[1] = new int[144];
-
- UnquantizeTexelWeights(Weights, TexelWeightValues, TexelParams, BlockWidth, BlockHeight);
-
- // Now that we have endpoints and weights, we can interpolate and generate
- // the proper decoding...
- for (int j = 0; j < BlockHeight; j++)
- {
- for (int i = 0; i < BlockWidth; i++)
- {
- int Partition = Select2DPartition(PartitionIndex, i, j, NumberPartitions, ((BlockHeight * BlockWidth) < 32));
- Debug.Assert(Partition < NumberPartitions);
-
- ASTCPixel Pixel = new ASTCPixel(0, 0, 0, 0);
- for (int Component = 0; Component < 4; Component++)
- {
- int Component0 = EndPoints[Partition][0].GetComponent(Component);
- Component0 = BitArrayStream.Replicate(Component0, 8, 16);
- int Component1 = EndPoints[Partition][1].GetComponent(Component);
- Component1 = BitArrayStream.Replicate(Component1, 8, 16);
-
- int Plane = 0;
-
- if (TexelParams.DualPlane && (((PlaneIndices + 1) & 3) == Component))
- {
- Plane = 1;
- }
-
- int Weight = Weights[Plane][j * BlockWidth + i];
- int FinalComponent = (Component0 * (64 - Weight) + Component1 * Weight + 32) / 64;
-
- if (FinalComponent == 65535)
- {
- Pixel.SetComponent(Component, 255);
- }
- else
- {
- double FinalComponentFloat = FinalComponent;
- Pixel.SetComponent(Component, (int)(255.0 * (FinalComponentFloat / 65536.0) + 0.5));
- }
- }
-
- OutputBuffer[j * BlockWidth + i] = Pixel.Pack();
- }
- }
-
- return true;
- }
-
- private static int Select2DPartition(int Seed, int X, int Y, int PartitionCount, bool IsSmallBlock)
- {
- return SelectPartition(Seed, X, Y, 0, PartitionCount, IsSmallBlock);
- }
-
- private static int SelectPartition(int Seed, int X, int Y, int Z, int PartitionCount, bool IsSmallBlock)
- {
- if (PartitionCount == 1)
- {
- return 0;
- }
-
- if (IsSmallBlock)
- {
- X <<= 1;
- Y <<= 1;
- Z <<= 1;
- }
-
- Seed += (PartitionCount - 1) * 1024;
-
- int RightNum = Hash52((uint)Seed);
- byte Seed01 = (byte)(RightNum & 0xF);
- byte Seed02 = (byte)((RightNum >> 4) & 0xF);
- byte Seed03 = (byte)((RightNum >> 8) & 0xF);
- byte Seed04 = (byte)((RightNum >> 12) & 0xF);
- byte Seed05 = (byte)((RightNum >> 16) & 0xF);
- byte Seed06 = (byte)((RightNum >> 20) & 0xF);
- byte Seed07 = (byte)((RightNum >> 24) & 0xF);
- byte Seed08 = (byte)((RightNum >> 28) & 0xF);
- byte Seed09 = (byte)((RightNum >> 18) & 0xF);
- byte Seed10 = (byte)((RightNum >> 22) & 0xF);
- byte Seed11 = (byte)((RightNum >> 26) & 0xF);
- byte Seed12 = (byte)(((RightNum >> 30) | (RightNum << 2)) & 0xF);
-
- Seed01 *= Seed01; Seed02 *= Seed02;
- Seed03 *= Seed03; Seed04 *= Seed04;
- Seed05 *= Seed05; Seed06 *= Seed06;
- Seed07 *= Seed07; Seed08 *= Seed08;
- Seed09 *= Seed09; Seed10 *= Seed10;
- Seed11 *= Seed11; Seed12 *= Seed12;
-
- int SeedHash1, SeedHash2, SeedHash3;
-
- if ((Seed & 1) != 0)
- {
- SeedHash1 = (Seed & 2) != 0 ? 4 : 5;
- SeedHash2 = (PartitionCount == 3) ? 6 : 5;
- }
- else
- {
- SeedHash1 = (PartitionCount == 3) ? 6 : 5;
- SeedHash2 = (Seed & 2) != 0 ? 4 : 5;
- }
-
- SeedHash3 = (Seed & 0x10) != 0 ? SeedHash1 : SeedHash2;
-
- Seed01 >>= SeedHash1; Seed02 >>= SeedHash2; Seed03 >>= SeedHash1; Seed04 >>= SeedHash2;
- Seed05 >>= SeedHash1; Seed06 >>= SeedHash2; Seed07 >>= SeedHash1; Seed08 >>= SeedHash2;
- Seed09 >>= SeedHash3; Seed10 >>= SeedHash3; Seed11 >>= SeedHash3; Seed12 >>= SeedHash3;
-
- int a = Seed01 * X + Seed02 * Y + Seed11 * Z + (RightNum >> 14);
- int b = Seed03 * X + Seed04 * Y + Seed12 * Z + (RightNum >> 10);
- int c = Seed05 * X + Seed06 * Y + Seed09 * Z + (RightNum >> 6);
- int d = Seed07 * X + Seed08 * Y + Seed10 * Z + (RightNum >> 2);
-
- a &= 0x3F; b &= 0x3F; c &= 0x3F; d &= 0x3F;
-
- if (PartitionCount < 4) d = 0;
- if (PartitionCount < 3) c = 0;
-
- if (a >= b && a >= c && a >= d) return 0;
- else if (b >= c && b >= d) return 1;
- else if (c >= d) return 2;
- return 3;
- }
-
- static int Hash52(uint Val)
- {
- Val ^= Val >> 15; Val -= Val << 17; Val += Val << 7; Val += Val << 4;
- Val ^= Val >> 5; Val += Val << 16; Val ^= Val >> 7; Val ^= Val >> 3;
- Val ^= Val << 6; Val ^= Val >> 17;
-
- return (int)Val;
- }
-
- static void UnquantizeTexelWeights(
- int[][] OutputBuffer,
- List<IntegerEncoded> Weights,
- TexelWeightParams TexelParams,
- int BlockWidth,
- int BlockHeight)
- {
- int WeightIndices = 0;
- int[][] Unquantized = new int[2][];
- Unquantized[0] = new int[144];
- Unquantized[1] = new int[144];
-
- for (int i = 0; i < Weights.Count; i++)
- {
- Unquantized[0][WeightIndices] = UnquantizeTexelWeight(Weights[i]);
-
- if (TexelParams.DualPlane)
- {
- i++;
- Unquantized[1][WeightIndices] = UnquantizeTexelWeight(Weights[i]);
-
- if (i == Weights.Count)
- {
- break;
- }
- }
-
- if (++WeightIndices >= (TexelParams.Width * TexelParams.Height)) break;
- }
-
- // Do infill if necessary (Section C.2.18) ...
- int Ds = (1024 + (BlockWidth / 2)) / (BlockWidth - 1);
- int Dt = (1024 + (BlockHeight / 2)) / (BlockHeight - 1);
-
- int PlaneScale = TexelParams.DualPlane ? 2 : 1;
-
- for (int Plane = 0; Plane < PlaneScale; Plane++)
- {
- for (int t = 0; t < BlockHeight; t++)
- {
- for (int s = 0; s < BlockWidth; s++)
- {
- int cs = Ds * s;
- int ct = Dt * t;
-
- int gs = (cs * (TexelParams.Width - 1) + 32) >> 6;
- int gt = (ct * (TexelParams.Height - 1) + 32) >> 6;
-
- int js = gs >> 4;
- int fs = gs & 0xF;
-
- int jt = gt >> 4;
- int ft = gt & 0x0F;
-
- int w11 = (fs * ft + 8) >> 4;
- int w10 = ft - w11;
- int w01 = fs - w11;
- int w00 = 16 - fs - ft + w11;
-
- int v0 = js + jt * TexelParams.Width;
-
- int p00 = 0;
- int p01 = 0;
- int p10 = 0;
- int p11 = 0;
-
- if (v0 < (TexelParams.Width * TexelParams.Height))
- {
- p00 = Unquantized[Plane][v0];
- }
-
- if (v0 + 1 < (TexelParams.Width * TexelParams.Height))
- {
- p01 = Unquantized[Plane][v0 + 1];
- }
-
- if (v0 + TexelParams.Width < (TexelParams.Width * TexelParams.Height))
- {
- p10 = Unquantized[Plane][v0 + TexelParams.Width];
- }
-
- if (v0 + TexelParams.Width + 1 < (TexelParams.Width * TexelParams.Height))
- {
- p11 = Unquantized[Plane][v0 + TexelParams.Width + 1];
- }
-
- OutputBuffer[Plane][t * BlockWidth + s] = (p00 * w00 + p01 * w01 + p10 * w10 + p11 * w11 + 8) >> 4;
- }
- }
- }
- }
-
- static int UnquantizeTexelWeight(IntegerEncoded IntEncoded)
- {
- int BitValue = IntEncoded.BitValue;
- int BitLength = IntEncoded.NumberBits;
-
- int A = BitArrayStream.Replicate(BitValue & 1, 1, 7);
- int B = 0, C = 0, D = 0;
-
- int Result = 0;
-
- switch (IntEncoded.GetEncoding())
- {
- case IntegerEncoded.EIntegerEncoding.JustBits:
- Result = BitArrayStream.Replicate(BitValue, BitLength, 6);
- break;
-
- case IntegerEncoded.EIntegerEncoding.Trit:
- {
- D = IntEncoded.TritValue;
- Debug.Assert(D < 3);
-
- switch (BitLength)
- {
- case 0:
- {
- int[] Results = { 0, 32, 63 };
- Result = Results[D];
-
- break;
- }
-
- case 1:
- {
- C = 50;
- break;
- }
-
- case 2:
- {
- C = 23;
- int b = (BitValue >> 1) & 1;
- B = (b << 6) | (b << 2) | b;
-
- break;
- }
-
- case 3:
- {
- C = 11;
- int cb = (BitValue >> 1) & 3;
- B = (cb << 5) | cb;
-
- break;
- }
-
- default:
- throw new ASTCDecoderException("Invalid trit encoding for texel weight");
- }
-
- break;
- }
-
- case IntegerEncoded.EIntegerEncoding.Quint:
- {
- D = IntEncoded.QuintValue;
- Debug.Assert(D < 5);
-
- switch (BitLength)
- {
- case 0:
- {
- int[] Results = { 0, 16, 32, 47, 63 };
- Result = Results[D];
-
- break;
- }
-
- case 1:
- {
- C = 28;
-
- break;
- }
-
- case 2:
- {
- C = 13;
- int b = (BitValue >> 1) & 1;
- B = (b << 6) | (b << 1);
-
- break;
- }
-
- default:
- throw new ASTCDecoderException("Invalid quint encoding for texel weight");
- }
-
- break;
- }
- }
-
- if (IntEncoded.GetEncoding() != IntegerEncoded.EIntegerEncoding.JustBits && BitLength > 0)
- {
- // Decode the value...
- Result = D * C + B;
- Result ^= A;
- Result = (A & 0x20) | (Result >> 2);
- }
-
- Debug.Assert(Result < 64);
-
- // Change from [0,63] to [0,64]
- if (Result > 32)
- {
- Result += 1;
- }
-
- return Result;
- }
-
- static byte ReverseByte(byte b)
- {
- // Taken from http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64Bits
- return (byte)((((b) * 0x80200802L) & 0x0884422110L) * 0x0101010101L >> 32);
- }
-
- static uint[] ReadUintColorValues(int Number, int[] ColorValues, ref int ColorValuesPosition)
- {
- uint[] Ret = new uint[Number];
-
- for (int i = 0; i < Number; i++)
- {
- Ret[i] = (uint)ColorValues[ColorValuesPosition++];
- }
-
- return Ret;
- }
-
- static int[] ReadIntColorValues(int Number, int[] ColorValues, ref int ColorValuesPosition)
- {
- int[] Ret = new int[Number];
-
- for (int i = 0; i < Number; i++)
- {
- Ret[i] = ColorValues[ColorValuesPosition++];
- }
-
- return Ret;
- }
-
- static void ComputeEndpoints(
- ASTCPixel[] EndPoints,
- int[] ColorValues,
- uint ColorEndpointMode,
- ref int ColorValuesPosition)
- {
- switch (ColorEndpointMode)
- {
- case 0:
- {
- uint[] Val = ReadUintColorValues(2, ColorValues, ref ColorValuesPosition);
-
- EndPoints[0] = new ASTCPixel(0xFF, (short)Val[0], (short)Val[0], (short)Val[0]);
- EndPoints[1] = new ASTCPixel(0xFF, (short)Val[1], (short)Val[1], (short)Val[1]);
-
- break;
- }
-
-
- case 1:
- {
- uint[] Val = ReadUintColorValues(2, ColorValues, ref ColorValuesPosition);
- int L0 = (int)((Val[0] >> 2) | (Val[1] & 0xC0));
- int L1 = (int)Math.Max(L0 + (Val[1] & 0x3F), 0xFFU);
-
- EndPoints[0] = new ASTCPixel(0xFF, (short)L0, (short)L0, (short)L0);
- EndPoints[1] = new ASTCPixel(0xFF, (short)L1, (short)L1, (short)L1);
-
- break;
- }
-
- case 4:
- {
- uint[] Val = ReadUintColorValues(4, ColorValues, ref ColorValuesPosition);
-
- EndPoints[0] = new ASTCPixel((short)Val[2], (short)Val[0], (short)Val[0], (short)Val[0]);
- EndPoints[1] = new ASTCPixel((short)Val[3], (short)Val[1], (short)Val[1], (short)Val[1]);
-
- break;
- }
-
- case 5:
- {
- int[] Val = ReadIntColorValues(4, ColorValues, ref ColorValuesPosition);
-
- BitArrayStream.BitTransferSigned(ref Val[1], ref Val[0]);
- BitArrayStream.BitTransferSigned(ref Val[3], ref Val[2]);
-
- EndPoints[0] = new ASTCPixel((short)Val[2], (short)Val[0], (short)Val[0], (short)Val[0]);
- EndPoints[1] = new ASTCPixel((short)(Val[2] + Val[3]), (short)(Val[0] + Val[1]), (short)(Val[0] + Val[1]), (short)(Val[0] + Val[1]));
-
- EndPoints[0].ClampByte();
- EndPoints[1].ClampByte();
-
- break;
- }
-
- case 6:
- {
- uint[] Val = ReadUintColorValues(4, ColorValues, ref ColorValuesPosition);
-
- EndPoints[0] = new ASTCPixel(0xFF, (short)(Val[0] * Val[3] >> 8), (short)(Val[1] * Val[3] >> 8), (short)(Val[2] * Val[3] >> 8));
- EndPoints[1] = new ASTCPixel(0xFF, (short)Val[0], (short)Val[1], (short)Val[2]);
-
- break;
- }
-
- case 8:
- {
- uint[] Val = ReadUintColorValues(6, ColorValues, ref ColorValuesPosition);
-
- if (Val[1] + Val[3] + Val[5] >= Val[0] + Val[2] + Val[4])
- {
- EndPoints[0] = new ASTCPixel(0xFF, (short)Val[0], (short)Val[2], (short)Val[4]);
- EndPoints[1] = new ASTCPixel(0xFF, (short)Val[1], (short)Val[3], (short)Val[5]);
- }
- else
- {
- EndPoints[0] = ASTCPixel.BlueContract(0xFF, (short)Val[1], (short)Val[3], (short)Val[5]);
- EndPoints[1] = ASTCPixel.BlueContract(0xFF, (short)Val[0], (short)Val[2], (short)Val[4]);
- }
-
- break;
- }
-
- case 9:
- {
- int[] Val = ReadIntColorValues(6, ColorValues, ref ColorValuesPosition);
-
- BitArrayStream.BitTransferSigned(ref Val[1], ref Val[0]);
- BitArrayStream.BitTransferSigned(ref Val[3], ref Val[2]);
- BitArrayStream.BitTransferSigned(ref Val[5], ref Val[4]);
-
- if (Val[1] + Val[3] + Val[5] >= 0)
- {
- EndPoints[0] = new ASTCPixel(0xFF, (short)Val[0], (short)Val[2], (short)Val[4]);
- EndPoints[1] = new ASTCPixel(0xFF, (short)(Val[0] + Val[1]), (short)(Val[2] + Val[3]), (short)(Val[4] + Val[5]));
- }
- else
- {
- EndPoints[0] = ASTCPixel.BlueContract(0xFF, Val[0] + Val[1], Val[2] + Val[3], Val[4] + Val[5]);
- EndPoints[1] = ASTCPixel.BlueContract(0xFF, Val[0], Val[2], Val[4]);
- }
-
- EndPoints[0].ClampByte();
- EndPoints[1].ClampByte();
-
- break;
- }
-
- case 10:
- {
- uint[] Val = ReadUintColorValues(6, ColorValues, ref ColorValuesPosition);
-
- EndPoints[0] = new ASTCPixel((short)Val[4], (short)(Val[0] * Val[3] >> 8), (short)(Val[1] * Val[3] >> 8), (short)(Val[2] * Val[3] >> 8));
- EndPoints[1] = new ASTCPixel((short)Val[5], (short)Val[0], (short)Val[1], (short)Val[2]);
-
- break;
- }
-
- case 12:
- {
- uint[] Val = ReadUintColorValues(8, ColorValues, ref ColorValuesPosition);
-
- if (Val[1] + Val[3] + Val[5] >= Val[0] + Val[2] + Val[4])
- {
- EndPoints[0] = new ASTCPixel((short)Val[6], (short)Val[0], (short)Val[2], (short)Val[4]);
- EndPoints[1] = new ASTCPixel((short)Val[7], (short)Val[1], (short)Val[3], (short)Val[5]);
- }
- else
- {
- EndPoints[0] = ASTCPixel.BlueContract((short)Val[7], (short)Val[1], (short)Val[3], (short)Val[5]);
- EndPoints[1] = ASTCPixel.BlueContract((short)Val[6], (short)Val[0], (short)Val[2], (short)Val[4]);
- }
-
- break;
- }
-
- case 13:
- {
- int[] Val = ReadIntColorValues(8, ColorValues, ref ColorValuesPosition);
-
- BitArrayStream.BitTransferSigned(ref Val[1], ref Val[0]);
- BitArrayStream.BitTransferSigned(ref Val[3], ref Val[2]);
- BitArrayStream.BitTransferSigned(ref Val[5], ref Val[4]);
- BitArrayStream.BitTransferSigned(ref Val[7], ref Val[6]);
-
- if (Val[1] + Val[3] + Val[5] >= 0)
- {
- EndPoints[0] = new ASTCPixel((short)Val[6], (short)Val[0], (short)Val[2], (short)Val[4]);
- EndPoints[1] = new ASTCPixel((short)(Val[7] + Val[6]), (short)(Val[0] + Val[1]), (short)(Val[2] + Val[3]), (short)(Val[4] + Val[5]));
- }
- else
- {
- EndPoints[0] = ASTCPixel.BlueContract(Val[6] + Val[7], Val[0] + Val[1], Val[2] + Val[3], Val[4] + Val[5]);
- EndPoints[1] = ASTCPixel.BlueContract(Val[6], Val[0], Val[2], Val[4]);
- }
-
- EndPoints[0].ClampByte();
- EndPoints[1].ClampByte();
-
- break;
- }
-
- default:
- throw new ASTCDecoderException("Unsupported color endpoint mode (is it HDR?)");
- }
- }
-
- static void DecodeColorValues(
- int[] OutputValues,
- byte[] InputData,
- uint[] Modes,
- int NumberPartitions,
- int NumberBitsForColorData)
- {
- // First figure out how many color values we have
- int NumberValues = 0;
-
- for (int i = 0; i < NumberPartitions; i++)
- {
- NumberValues += (int)((Modes[i] >> 2) + 1) << 1;
- }
-
- // Then based on the number of values and the remaining number of bits,
- // figure out the max value for each of them...
- int Range = 256;
-
- while (--Range > 0)
- {
- IntegerEncoded IntEncoded = IntegerEncoded.CreateEncoding(Range);
- int BitLength = IntEncoded.GetBitLength(NumberValues);
-
- if (BitLength <= NumberBitsForColorData)
- {
- // Find the smallest possible range that matches the given encoding
- while (--Range > 0)
- {
- IntegerEncoded NewIntEncoded = IntegerEncoded.CreateEncoding(Range);
- if (!NewIntEncoded.MatchesEncoding(IntEncoded))
- {
- break;
- }
- }
-
- // Return to last matching range.
- Range++;
- break;
- }
- }
-
- // We now have enough to decode our integer sequence.
- List<IntegerEncoded> IntegerEncodedSequence = new List<IntegerEncoded>();
- BitArrayStream ColorBitStream = new BitArrayStream(new BitArray(InputData));
-
- IntegerEncoded.DecodeIntegerSequence(IntegerEncodedSequence, ColorBitStream, Range, NumberValues);
-
- // Once we have the decoded values, we need to dequantize them to the 0-255 range
- // This procedure is outlined in ASTC spec C.2.13
- int OutputIndices = 0;
-
- foreach (IntegerEncoded IntEncoded in IntegerEncodedSequence)
- {
- int BitLength = IntEncoded.NumberBits;
- int BitValue = IntEncoded.BitValue;
-
- Debug.Assert(BitLength >= 1);
-
- int A = 0, B = 0, C = 0, D = 0;
- // A is just the lsb replicated 9 times.
- A = BitArrayStream.Replicate(BitValue & 1, 1, 9);
-
- switch (IntEncoded.GetEncoding())
- {
- case IntegerEncoded.EIntegerEncoding.JustBits:
- {
- OutputValues[OutputIndices++] = BitArrayStream.Replicate(BitValue, BitLength, 8);
-
- break;
- }
-
- case IntegerEncoded.EIntegerEncoding.Trit:
- {
- D = IntEncoded.TritValue;
-
- switch (BitLength)
- {
- case 1:
- {
- C = 204;
-
- break;
- }
-
- case 2:
- {
- C = 93;
- // B = b000b0bb0
- int b = (BitValue >> 1) & 1;
- B = (b << 8) | (b << 4) | (b << 2) | (b << 1);
-
- break;
- }
-
- case 3:
- {
- C = 44;
- // B = cb000cbcb
- int cb = (BitValue >> 1) & 3;
- B = (cb << 7) | (cb << 2) | cb;
-
- break;
- }
-
-
- case 4:
- {
- C = 22;
- // B = dcb000dcb
- int dcb = (BitValue >> 1) & 7;
- B = (dcb << 6) | dcb;
-
- break;
- }
-
- case 5:
- {
- C = 11;
- // B = edcb000ed
- int edcb = (BitValue >> 1) & 0xF;
- B = (edcb << 5) | (edcb >> 2);
-
- break;
- }
-
- case 6:
- {
- C = 5;
- // B = fedcb000f
- int fedcb = (BitValue >> 1) & 0x1F;
- B = (fedcb << 4) | (fedcb >> 4);
-
- break;
- }
-
- default:
- throw new ASTCDecoderException("Unsupported trit encoding for color values!");
- }
-
- break;
- }
-
- case IntegerEncoded.EIntegerEncoding.Quint:
- {
- D = IntEncoded.QuintValue;
-
- switch (BitLength)
- {
- case 1:
- {
- C = 113;
-
- break;
- }
-
- case 2:
- {
- C = 54;
- // B = b0000bb00
- int b = (BitValue >> 1) & 1;
- B = (b << 8) | (b << 3) | (b << 2);
-
- break;
- }
-
- case 3:
- {
- C = 26;
- // B = cb0000cbc
- int cb = (BitValue >> 1) & 3;
- B = (cb << 7) | (cb << 1) | (cb >> 1);
-
- break;
- }
-
- case 4:
- {
- C = 13;
- // B = dcb0000dc
- int dcb = (BitValue >> 1) & 7;
- B = (dcb << 6) | (dcb >> 1);
-
- break;
- }
-
- case 5:
- {
- C = 6;
- // B = edcb0000e
- int edcb = (BitValue >> 1) & 0xF;
- B = (edcb << 5) | (edcb >> 3);
-
- break;
- }
-
- default:
- throw new ASTCDecoderException("Unsupported quint encoding for color values!");
- }
- break;
- }
- }
-
- if (IntEncoded.GetEncoding() != IntegerEncoded.EIntegerEncoding.JustBits)
- {
- int T = D * C + B;
- T ^= A;
- T = (A & 0x80) | (T >> 2);
-
- OutputValues[OutputIndices++] = T;
- }
- }
-
- // Make sure that each of our values is in the proper range...
- for (int i = 0; i < NumberValues; i++)
- {
- Debug.Assert(OutputValues[i] <= 255);
- }
- }
-
- static void FillVoidExtentLDR(BitArrayStream BitStream, int[] OutputBuffer, int BlockWidth, int BlockHeight)
- {
- // Don't actually care about the void extent, just read the bits...
- for (int i = 0; i < 4; ++i)
- {
- BitStream.ReadBits(13);
- }
-
- // Decode the RGBA components and renormalize them to the range [0, 255]
- ushort R = (ushort)BitStream.ReadBits(16);
- ushort G = (ushort)BitStream.ReadBits(16);
- ushort B = (ushort)BitStream.ReadBits(16);
- ushort A = (ushort)BitStream.ReadBits(16);
-
- int RGBA = (R >> 8) | (G & 0xFF00) | ((B) & 0xFF00) << 8 | ((A) & 0xFF00) << 16;
-
- for (int j = 0; j < BlockHeight; j++)
- {
- for (int i = 0; i < BlockWidth; i++)
- {
- OutputBuffer[j * BlockWidth + i] = RGBA;
- }
- }
- }
-
- static TexelWeightParams DecodeBlockInfo(BitArrayStream BitStream)
- {
- TexelWeightParams TexelParams = new TexelWeightParams();
-
- // Read the entire block mode all at once
- ushort ModeBits = (ushort)BitStream.ReadBits(11);
-
- // Does this match the void extent block mode?
- if ((ModeBits & 0x01FF) == 0x1FC)
- {
- if ((ModeBits & 0x200) != 0)
- {
- TexelParams.VoidExtentHDR = true;
- }
- else
- {
- TexelParams.VoidExtentLDR = true;
- }
-
- // Next two bits must be one.
- if ((ModeBits & 0x400) == 0 || BitStream.ReadBits(1) == 0)
- {
- TexelParams.Error = true;
- }
-
- return TexelParams;
- }
-
- // First check if the last four bits are zero
- if ((ModeBits & 0xF) == 0)
- {
- TexelParams.Error = true;
- return TexelParams;
- }
-
- // If the last two bits are zero, then if bits
- // [6-8] are all ones, this is also reserved.
- if ((ModeBits & 0x3) == 0 && (ModeBits & 0x1C0) == 0x1C0)
- {
- TexelParams.Error = true;
-
- return TexelParams;
- }
-
- // Otherwise, there is no error... Figure out the layout
- // of the block mode. Layout is determined by a number
- // between 0 and 9 corresponding to table C.2.8 of the
- // ASTC spec.
- int Layout = 0;
-
- if ((ModeBits & 0x1) != 0 || (ModeBits & 0x2) != 0)
- {
- // layout is in [0-4]
- if ((ModeBits & 0x8) != 0)
- {
- // layout is in [2-4]
- if ((ModeBits & 0x4) != 0)
- {
- // layout is in [3-4]
- if ((ModeBits & 0x100) != 0)
- {
- Layout = 4;
- }
- else
- {
- Layout = 3;
- }
- }
- else
- {
- Layout = 2;
- }
- }
- else
- {
- // layout is in [0-1]
- if ((ModeBits & 0x4) != 0)
- {
- Layout = 1;
- }
- else
- {
- Layout = 0;
- }
- }
- }
- else
- {
- // layout is in [5-9]
- if ((ModeBits & 0x100) != 0)
- {
- // layout is in [7-9]
- if ((ModeBits & 0x80) != 0)
- {
- // layout is in [7-8]
- Debug.Assert((ModeBits & 0x40) == 0);
-
- if ((ModeBits & 0x20) != 0)
- {
- Layout = 8;
- }
- else
- {
- Layout = 7;
- }
- }
- else
- {
- Layout = 9;
- }
- }
- else
- {
- // layout is in [5-6]
- if ((ModeBits & 0x80) != 0)
- {
- Layout = 6;
- }
- else
- {
- Layout = 5;
- }
- }
- }
-
- Debug.Assert(Layout < 10);
-
- // Determine R
- int R = (ModeBits >> 4) & 1;
- if (Layout < 5)
- {
- R |= (ModeBits & 0x3) << 1;
- }
- else
- {
- R |= (ModeBits & 0xC) >> 1;
- }
-
- Debug.Assert(2 <= R && R <= 7);
-
- // Determine width & height
- switch (Layout)
- {
- case 0:
- {
- int A = (ModeBits >> 5) & 0x3;
- int B = (ModeBits >> 7) & 0x3;
-
- TexelParams.Width = B + 4;
- TexelParams.Height = A + 2;
-
- break;
- }
-
- case 1:
- {
- int A = (ModeBits >> 5) & 0x3;
- int B = (ModeBits >> 7) & 0x3;
-
- TexelParams.Width = B + 8;
- TexelParams.Height = A + 2;
-
- break;
- }
-
- case 2:
- {
- int A = (ModeBits >> 5) & 0x3;
- int B = (ModeBits >> 7) & 0x3;
-
- TexelParams.Width = A + 2;
- TexelParams.Height = B + 8;
-
- break;
- }
-
- case 3:
- {
- int A = (ModeBits >> 5) & 0x3;
- int B = (ModeBits >> 7) & 0x1;
-
- TexelParams.Width = A + 2;
- TexelParams.Height = B + 6;
-
- break;
- }
-
- case 4:
- {
- int A = (ModeBits >> 5) & 0x3;
- int B = (ModeBits >> 7) & 0x1;
-
- TexelParams.Width = B + 2;
- TexelParams.Height = A + 2;
-
- break;
- }
-
- case 5:
- {
- int A = (ModeBits >> 5) & 0x3;
-
- TexelParams.Width = 12;
- TexelParams.Height = A + 2;
-
- break;
- }
-
- case 6:
- {
- int A = (ModeBits >> 5) & 0x3;
-
- TexelParams.Width = A + 2;
- TexelParams.Height = 12;
-
- break;
- }
-
- case 7:
- {
- TexelParams.Width = 6;
- TexelParams.Height = 10;
-
- break;
- }
-
- case 8:
- {
- TexelParams.Width = 10;
- TexelParams.Height = 6;
- break;
- }
-
- case 9:
- {
- int A = (ModeBits >> 5) & 0x3;
- int B = (ModeBits >> 9) & 0x3;
-
- TexelParams.Width = A + 6;
- TexelParams.Height = B + 6;
-
- break;
- }
-
- default:
- //Don't know this layout...
- TexelParams.Error = true;
- break;
- }
-
- // Determine whether or not we're using dual planes
- // and/or high precision layouts.
- bool D = ((Layout != 9) && ((ModeBits & 0x400) != 0));
- bool H = (Layout != 9) && ((ModeBits & 0x200) != 0);
-
- if (H)
- {
- int[] MaxWeights = { 9, 11, 15, 19, 23, 31 };
- TexelParams.MaxWeight = MaxWeights[R - 2];
- }
- else
- {
- int[] MaxWeights = { 1, 2, 3, 4, 5, 7 };
- TexelParams.MaxWeight = MaxWeights[R - 2];
- }
-
- TexelParams.DualPlane = D;
-
- return TexelParams;
- }
- }
-}
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/ASTCPixel.cs b/Ryujinx.Graphics/Graphics3d/Texture/ASTCPixel.cs
deleted file mode 100644
index c43eaf93..00000000
--- a/Ryujinx.Graphics/Graphics3d/Texture/ASTCPixel.cs
+++ /dev/null
@@ -1,138 +0,0 @@
-using System;
-using System.Diagnostics;
-
-namespace Ryujinx.Graphics.Texture
-{
- class ASTCPixel
- {
- public short R { get; set; }
- public short G { get; set; }
- public short B { get; set; }
- public short A { get; set; }
-
- byte[] BitDepth = new byte[4];
-
- public ASTCPixel(short _A, short _R, short _G, short _B)
- {
- A = _A;
- R = _R;
- G = _G;
- B = _B;
-
- for (int i = 0; i < 4; i++)
- BitDepth[i] = 8;
- }
-
- public void ClampByte()
- {
- R = Math.Min(Math.Max(R, (short)0), (short)255);
- G = Math.Min(Math.Max(G, (short)0), (short)255);
- B = Math.Min(Math.Max(B, (short)0), (short)255);
- A = Math.Min(Math.Max(A, (short)0), (short)255);
- }
-
- public short GetComponent(int Index)
- {
- switch(Index)
- {
- case 0: return A;
- case 1: return R;
- case 2: return G;
- case 3: return B;
- }
-
- return 0;
- }
-
- public void SetComponent(int Index, int Value)
- {
- switch (Index)
- {
- case 0:
- A = (short)Value;
- break;
- case 1:
- R = (short)Value;
- break;
- case 2:
- G = (short)Value;
- break;
- case 3:
- B = (short)Value;
- break;
- }
- }
-
- public void ChangeBitDepth(byte[] Depth)
- {
- for(int i = 0; i< 4; i++)
- {
- int Value = ChangeBitDepth(GetComponent(i), BitDepth[i], Depth[i]);
-
- SetComponent(i, Value);
- BitDepth[i] = Depth[i];
- }
- }
-
- short ChangeBitDepth(short Value, byte OldDepth, byte NewDepth)
- {
- Debug.Assert(NewDepth <= 8);
- Debug.Assert(OldDepth <= 8);
-
- if (OldDepth == NewDepth)
- {
- // Do nothing
- return Value;
- }
- else if (OldDepth == 0 && NewDepth != 0)
- {
- return (short)((1 << NewDepth) - 1);
- }
- else if (NewDepth > OldDepth)
- {
- return (short)BitArrayStream.Replicate(Value, OldDepth, NewDepth);
- }
- else
- {
- // oldDepth > newDepth
- if (NewDepth == 0)
- {
- return 0xFF;
- }
- else
- {
- byte BitsWasted = (byte)(OldDepth - NewDepth);
- short TempValue = Value;
-
- TempValue = (short)((TempValue + (1 << (BitsWasted - 1))) >> BitsWasted);
- TempValue = Math.Min(Math.Max((short)0, TempValue), (short)((1 << NewDepth) - 1));
-
- return (byte)(TempValue);
- }
- }
- }
-
- public int Pack()
- {
- ASTCPixel NewPixel = new ASTCPixel(A, R, G, B);
- byte[] eightBitDepth = { 8, 8, 8, 8 };
-
- NewPixel.ChangeBitDepth(eightBitDepth);
-
- return (byte)NewPixel.A << 24 |
- (byte)NewPixel.B << 16 |
- (byte)NewPixel.G << 8 |
- (byte)NewPixel.R << 0;
- }
-
- // Adds more precision to the blue channel as described
- // in C.2.14
- public static ASTCPixel BlueContract(int a, int r, int g, int b)
- {
- return new ASTCPixel((short)(a),
- (short)((r + b) >> 1),
- (short)((g + b) >> 1),
- (short)(b));
- }
- }
-}
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/AstcDecoder.cs b/Ryujinx.Graphics/Graphics3d/Texture/AstcDecoder.cs
new file mode 100644
index 00000000..99b166f3
--- /dev/null
+++ b/Ryujinx.Graphics/Graphics3d/Texture/AstcDecoder.cs
@@ -0,0 +1,1385 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+
+namespace Ryujinx.Graphics.Texture
+{
+ public class AstcDecoderException : Exception
+ {
+ public AstcDecoderException(string exMsg) : base(exMsg) { }
+ }
+
+ //https://github.com/GammaUNC/FasTC/blob/master/ASTCEncoder/src/Decompressor.cpp
+ public static class AstcDecoder
+ {
+ struct TexelWeightParams
+ {
+ public int Width;
+ public int Height;
+ public bool DualPlane;
+ public int MaxWeight;
+ public bool Error;
+ public bool VoidExtentLdr;
+ public bool VoidExtentHdr;
+
+ public int GetPackedBitSize()
+ {
+ // How many indices do we have?
+ int indices = Height * Width;
+
+ if (DualPlane)
+ {
+ indices *= 2;
+ }
+
+ IntegerEncoded intEncoded = IntegerEncoded.CreateEncoding(MaxWeight);
+
+ return intEncoded.GetBitLength(indices);
+ }
+
+ public int GetNumWeightValues()
+ {
+ int ret = Width * Height;
+
+ if (DualPlane)
+ {
+ ret *= 2;
+ }
+
+ return ret;
+ }
+ }
+
+ public static byte[] DecodeToRgba8888(
+ byte[] inputBuffer,
+ int blockX,
+ int blockY,
+ int blockZ,
+ int x,
+ int y,
+ int z)
+ {
+ using (MemoryStream inputStream = new MemoryStream(inputBuffer))
+ {
+ BinaryReader binReader = new BinaryReader(inputStream);
+
+ if (blockX > 12 || blockY > 12)
+ {
+ throw new AstcDecoderException("Block size unsupported!");
+ }
+
+ if (blockZ != 1 || z != 1)
+ {
+ // TODO: Support 3D textures?
+ throw new AstcDecoderException("3D compressed textures unsupported!");
+ }
+
+ using (MemoryStream outputStream = new MemoryStream())
+ {
+ int blockIndex = 0;
+
+ for (int j = 0; j < y; j += blockY)
+ {
+ for (int i = 0; i < x; i += blockX)
+ {
+ int[] decompressedData = new int[144];
+
+ DecompressBlock(binReader.ReadBytes(0x10), decompressedData, blockX, blockY);
+
+ int decompressedWidth = Math.Min(blockX, x - i);
+ int decompressedHeight = Math.Min(blockY, y - j);
+ int baseOffsets = (j * x + i) * 4;
+
+ for (int jj = 0; jj < decompressedHeight; jj++)
+ {
+ outputStream.Seek(baseOffsets + jj * x * 4, SeekOrigin.Begin);
+
+ byte[] outputBuffer = new byte[decompressedData.Length * sizeof(int)];
+ Buffer.BlockCopy(decompressedData, 0, outputBuffer, 0, outputBuffer.Length);
+
+ outputStream.Write(outputBuffer, jj * blockX * 4, decompressedWidth * 4);
+ }
+
+ blockIndex++;
+ }
+ }
+
+ return outputStream.ToArray();
+ }
+ }
+ }
+
+ public static bool DecompressBlock(
+ byte[] inputBuffer,
+ int[] outputBuffer,
+ int blockWidth,
+ int blockHeight)
+ {
+ BitArrayStream bitStream = new BitArrayStream(new BitArray(inputBuffer));
+ TexelWeightParams texelParams = DecodeBlockInfo(bitStream);
+
+ if (texelParams.Error)
+ {
+ throw new AstcDecoderException("Invalid block mode");
+ }
+
+ if (texelParams.VoidExtentLdr)
+ {
+ FillVoidExtentLdr(bitStream, outputBuffer, blockWidth, blockHeight);
+
+ return true;
+ }
+
+ if (texelParams.VoidExtentHdr)
+ {
+ throw new AstcDecoderException("HDR void extent blocks are unsupported!");
+ }
+
+ if (texelParams.Width > blockWidth)
+ {
+ throw new AstcDecoderException("Texel weight grid width should be smaller than block width");
+ }
+
+ if (texelParams.Height > blockHeight)
+ {
+ throw new AstcDecoderException("Texel weight grid height should be smaller than block height");
+ }
+
+ // Read num partitions
+ int numberPartitions = bitStream.ReadBits(2) + 1;
+ Debug.Assert(numberPartitions <= 4);
+
+ if (numberPartitions == 4 && texelParams.DualPlane)
+ {
+ throw new AstcDecoderException("Dual plane mode is incompatible with four partition blocks");
+ }
+
+ // Based on the number of partitions, read the color endpoint mode for
+ // each partition.
+
+ // Determine partitions, partition index, and color endpoint modes
+ int planeIndices = -1;
+ int partitionIndex;
+ uint[] colorEndpointMode = { 0, 0, 0, 0 };
+
+ BitArrayStream colorEndpointStream = new BitArrayStream(new BitArray(16 * 8));
+
+ // Read extra config data...
+ uint baseColorEndpointMode = 0;
+
+ if (numberPartitions == 1)
+ {
+ colorEndpointMode[0] = (uint)bitStream.ReadBits(4);
+ partitionIndex = 0;
+ }
+ else
+ {
+ partitionIndex = bitStream.ReadBits(10);
+ baseColorEndpointMode = (uint)bitStream.ReadBits(6);
+ }
+
+ uint baseMode = (baseColorEndpointMode & 3);
+
+ // Remaining bits are color endpoint data...
+ int numberWeightBits = texelParams.GetPackedBitSize();
+ int remainingBits = 128 - numberWeightBits - bitStream.Position;
+
+ // Consider extra bits prior to texel data...
+ uint extraColorEndpointModeBits = 0;
+
+ if (baseMode != 0)
+ {
+ switch (numberPartitions)
+ {
+ case 2: extraColorEndpointModeBits += 2; break;
+ case 3: extraColorEndpointModeBits += 5; break;
+ case 4: extraColorEndpointModeBits += 8; break;
+ default: Debug.Assert(false); break;
+ }
+ }
+
+ remainingBits -= (int)extraColorEndpointModeBits;
+
+ // Do we have a dual plane situation?
+ int planeSelectorBits = 0;
+
+ if (texelParams.DualPlane)
+ {
+ planeSelectorBits = 2;
+ }
+
+ remainingBits -= planeSelectorBits;
+
+ // Read color data...
+ int colorDataBits = remainingBits;
+
+ while (remainingBits > 0)
+ {
+ int numberBits = Math.Min(remainingBits, 8);
+ int bits = bitStream.ReadBits(numberBits);
+ colorEndpointStream.WriteBits(bits, numberBits);
+ remainingBits -= 8;
+ }
+
+ // Read the plane selection bits
+ planeIndices = bitStream.ReadBits(planeSelectorBits);
+
+ // Read the rest of the CEM
+ if (baseMode != 0)
+ {
+ uint extraColorEndpointMode = (uint)bitStream.ReadBits((int)extraColorEndpointModeBits);
+ uint tempColorEndpointMode = (extraColorEndpointMode << 6) | baseColorEndpointMode;
+ tempColorEndpointMode >>= 2;
+
+ bool[] c = new bool[4];
+
+ for (int i = 0; i < numberPartitions; i++)
+ {
+ c[i] = (tempColorEndpointMode & 1) != 0;
+ tempColorEndpointMode >>= 1;
+ }
+
+ byte[] m = new byte[4];
+
+ for (int i = 0; i < numberPartitions; i++)
+ {
+ m[i] = (byte)(tempColorEndpointMode & 3);
+ tempColorEndpointMode >>= 2;
+ Debug.Assert(m[i] <= 3);
+ }
+
+ for (int i = 0; i < numberPartitions; i++)
+ {
+ colorEndpointMode[i] = baseMode;
+ if (!(c[i])) colorEndpointMode[i] -= 1;
+ colorEndpointMode[i] <<= 2;
+ colorEndpointMode[i] |= m[i];
+ }
+ }
+ else if (numberPartitions > 1)
+ {
+ uint tempColorEndpointMode = baseColorEndpointMode >> 2;
+
+ for (uint i = 0; i < numberPartitions; i++)
+ {
+ colorEndpointMode[i] = tempColorEndpointMode;
+ }
+ }
+
+ // Make sure everything up till here is sane.
+ for (int i = 0; i < numberPartitions; i++)
+ {
+ Debug.Assert(colorEndpointMode[i] < 16);
+ }
+ Debug.Assert(bitStream.Position + texelParams.GetPackedBitSize() == 128);
+
+ // Decode both color data and texel weight data
+ int[] colorValues = new int[32]; // Four values * two endpoints * four maximum partitions
+ DecodeColorValues(colorValues, colorEndpointStream.ToByteArray(), colorEndpointMode, numberPartitions, colorDataBits);
+
+ AstcPixel[][] endPoints = new AstcPixel[4][];
+ endPoints[0] = new AstcPixel[2];
+ endPoints[1] = new AstcPixel[2];
+ endPoints[2] = new AstcPixel[2];
+ endPoints[3] = new AstcPixel[2];
+
+ int colorValuesPosition = 0;
+
+ for (int i = 0; i < numberPartitions; i++)
+ {
+ ComputeEndpoints(endPoints[i], colorValues, colorEndpointMode[i], ref colorValuesPosition);
+ }
+
+ // Read the texel weight data.
+ byte[] texelWeightData = (byte[])inputBuffer.Clone();
+
+ // Reverse everything
+ for (int i = 0; i < 8; i++)
+ {
+ byte a = ReverseByte(texelWeightData[i]);
+ byte b = ReverseByte(texelWeightData[15 - i]);
+
+ texelWeightData[i] = b;
+ texelWeightData[15 - i] = a;
+ }
+
+ // Make sure that higher non-texel bits are set to zero
+ int clearByteStart = (texelParams.GetPackedBitSize() >> 3) + 1;
+ texelWeightData[clearByteStart - 1] &= (byte)((1 << (texelParams.GetPackedBitSize() % 8)) - 1);
+
+ int cLen = 16 - clearByteStart;
+ for (int i = clearByteStart; i < clearByteStart + cLen; i++) texelWeightData[i] = 0;
+
+ List<IntegerEncoded> texelWeightValues = new List<IntegerEncoded>();
+ BitArrayStream weightBitStream = new BitArrayStream(new BitArray(texelWeightData));
+
+ IntegerEncoded.DecodeIntegerSequence(texelWeightValues, weightBitStream, texelParams.MaxWeight, texelParams.GetNumWeightValues());
+
+ // Blocks can be at most 12x12, so we can have as many as 144 weights
+ int[][] weights = new int[2][];
+ weights[0] = new int[144];
+ weights[1] = new int[144];
+
+ UnquantizeTexelWeights(weights, texelWeightValues, texelParams, blockWidth, blockHeight);
+
+ // Now that we have endpoints and weights, we can interpolate and generate
+ // the proper decoding...
+ for (int j = 0; j < blockHeight; j++)
+ {
+ for (int i = 0; i < blockWidth; i++)
+ {
+ int partition = Select2dPartition(partitionIndex, i, j, numberPartitions, ((blockHeight * blockWidth) < 32));
+ Debug.Assert(partition < numberPartitions);
+
+ AstcPixel pixel = new AstcPixel(0, 0, 0, 0);
+ for (int component = 0; component < 4; component++)
+ {
+ int component0 = endPoints[partition][0].GetComponent(component);
+ component0 = BitArrayStream.Replicate(component0, 8, 16);
+ int component1 = endPoints[partition][1].GetComponent(component);
+ component1 = BitArrayStream.Replicate(component1, 8, 16);
+
+ int plane = 0;
+
+ if (texelParams.DualPlane && (((planeIndices + 1) & 3) == component))
+ {
+ plane = 1;
+ }
+
+ int weight = weights[plane][j * blockWidth + i];
+ int finalComponent = (component0 * (64 - weight) + component1 * weight + 32) / 64;
+
+ if (finalComponent == 65535)
+ {
+ pixel.SetComponent(component, 255);
+ }
+ else
+ {
+ double finalComponentFloat = finalComponent;
+ pixel.SetComponent(component, (int)(255.0 * (finalComponentFloat / 65536.0) + 0.5));
+ }
+ }
+
+ outputBuffer[j * blockWidth + i] = pixel.Pack();
+ }
+ }
+
+ return true;
+ }
+
+ private static int Select2dPartition(int seed, int x, int y, int partitionCount, bool isSmallBlock)
+ {
+ return SelectPartition(seed, x, y, 0, partitionCount, isSmallBlock);
+ }
+
+ private static int SelectPartition(int seed, int x, int y, int z, int partitionCount, bool isSmallBlock)
+ {
+ if (partitionCount == 1)
+ {
+ return 0;
+ }
+
+ if (isSmallBlock)
+ {
+ x <<= 1;
+ y <<= 1;
+ z <<= 1;
+ }
+
+ seed += (partitionCount - 1) * 1024;
+
+ int rightNum = Hash52((uint)seed);
+ byte seed01 = (byte)(rightNum & 0xF);
+ byte seed02 = (byte)((rightNum >> 4) & 0xF);
+ byte seed03 = (byte)((rightNum >> 8) & 0xF);
+ byte seed04 = (byte)((rightNum >> 12) & 0xF);
+ byte seed05 = (byte)((rightNum >> 16) & 0xF);
+ byte seed06 = (byte)((rightNum >> 20) & 0xF);
+ byte seed07 = (byte)((rightNum >> 24) & 0xF);
+ byte seed08 = (byte)((rightNum >> 28) & 0xF);
+ byte seed09 = (byte)((rightNum >> 18) & 0xF);
+ byte seed10 = (byte)((rightNum >> 22) & 0xF);
+ byte seed11 = (byte)((rightNum >> 26) & 0xF);
+ byte seed12 = (byte)(((rightNum >> 30) | (rightNum << 2)) & 0xF);
+
+ seed01 *= seed01; seed02 *= seed02;
+ seed03 *= seed03; seed04 *= seed04;
+ seed05 *= seed05; seed06 *= seed06;
+ seed07 *= seed07; seed08 *= seed08;
+ seed09 *= seed09; seed10 *= seed10;
+ seed11 *= seed11; seed12 *= seed12;
+
+ int seedHash1, seedHash2, seedHash3;
+
+ if ((seed & 1) != 0)
+ {
+ seedHash1 = (seed & 2) != 0 ? 4 : 5;
+ seedHash2 = (partitionCount == 3) ? 6 : 5;
+ }
+ else
+ {
+ seedHash1 = (partitionCount == 3) ? 6 : 5;
+ seedHash2 = (seed & 2) != 0 ? 4 : 5;
+ }
+
+ seedHash3 = (seed & 0x10) != 0 ? seedHash1 : seedHash2;
+
+ seed01 >>= seedHash1; seed02 >>= seedHash2; seed03 >>= seedHash1; seed04 >>= seedHash2;
+ seed05 >>= seedHash1; seed06 >>= seedHash2; seed07 >>= seedHash1; seed08 >>= seedHash2;
+ seed09 >>= seedHash3; seed10 >>= seedHash3; seed11 >>= seedHash3; seed12 >>= seedHash3;
+
+ int a = seed01 * x + seed02 * y + seed11 * z + (rightNum >> 14);
+ int b = seed03 * x + seed04 * y + seed12 * z + (rightNum >> 10);
+ int c = seed05 * x + seed06 * y + seed09 * z + (rightNum >> 6);
+ int d = seed07 * x + seed08 * y + seed10 * z + (rightNum >> 2);
+
+ a &= 0x3F; b &= 0x3F; c &= 0x3F; d &= 0x3F;
+
+ if (partitionCount < 4) d = 0;
+ if (partitionCount < 3) c = 0;
+
+ if (a >= b && a >= c && a >= d) return 0;
+ else if (b >= c && b >= d) return 1;
+ else if (c >= d) return 2;
+ return 3;
+ }
+
+ static int Hash52(uint val)
+ {
+ val ^= val >> 15; val -= val << 17; val += val << 7; val += val << 4;
+ val ^= val >> 5; val += val << 16; val ^= val >> 7; val ^= val >> 3;
+ val ^= val << 6; val ^= val >> 17;
+
+ return (int)val;
+ }
+
+ static void UnquantizeTexelWeights(
+ int[][] outputBuffer,
+ List<IntegerEncoded> weights,
+ TexelWeightParams texelParams,
+ int blockWidth,
+ int blockHeight)
+ {
+ int weightIndices = 0;
+ int[][] unquantized = new int[2][];
+ unquantized[0] = new int[144];
+ unquantized[1] = new int[144];
+
+ for (int i = 0; i < weights.Count; i++)
+ {
+ unquantized[0][weightIndices] = UnquantizeTexelWeight(weights[i]);
+
+ if (texelParams.DualPlane)
+ {
+ i++;
+ unquantized[1][weightIndices] = UnquantizeTexelWeight(weights[i]);
+
+ if (i == weights.Count)
+ {
+ break;
+ }
+ }
+
+ if (++weightIndices >= (texelParams.Width * texelParams.Height)) break;
+ }
+
+ // Do infill if necessary (Section C.2.18) ...
+ int ds = (1024 + (blockWidth / 2)) / (blockWidth - 1);
+ int dt = (1024 + (blockHeight / 2)) / (blockHeight - 1);
+
+ int planeScale = texelParams.DualPlane ? 2 : 1;
+
+ for (int plane = 0; plane < planeScale; plane++)
+ {
+ for (int t = 0; t < blockHeight; t++)
+ {
+ for (int s = 0; s < blockWidth; s++)
+ {
+ int cs = ds * s;
+ int ct = dt * t;
+
+ int gs = (cs * (texelParams.Width - 1) + 32) >> 6;
+ int gt = (ct * (texelParams.Height - 1) + 32) >> 6;
+
+ int js = gs >> 4;
+ int fs = gs & 0xF;
+
+ int jt = gt >> 4;
+ int ft = gt & 0x0F;
+
+ int w11 = (fs * ft + 8) >> 4;
+ int w10 = ft - w11;
+ int w01 = fs - w11;
+ int w00 = 16 - fs - ft + w11;
+
+ int v0 = js + jt * texelParams.Width;
+
+ int p00 = 0;
+ int p01 = 0;
+ int p10 = 0;
+ int p11 = 0;
+
+ if (v0 < (texelParams.Width * texelParams.Height))
+ {
+ p00 = unquantized[plane][v0];
+ }
+
+ if (v0 + 1 < (texelParams.Width * texelParams.Height))
+ {
+ p01 = unquantized[plane][v0 + 1];
+ }
+
+ if (v0 + texelParams.Width < (texelParams.Width * texelParams.Height))
+ {
+ p10 = unquantized[plane][v0 + texelParams.Width];
+ }
+
+ if (v0 + texelParams.Width + 1 < (texelParams.Width * texelParams.Height))
+ {
+ p11 = unquantized[plane][v0 + texelParams.Width + 1];
+ }
+
+ outputBuffer[plane][t * blockWidth + s] = (p00 * w00 + p01 * w01 + p10 * w10 + p11 * w11 + 8) >> 4;
+ }
+ }
+ }
+ }
+
+ static int UnquantizeTexelWeight(IntegerEncoded intEncoded)
+ {
+ int bitValue = intEncoded.BitValue;
+ int bitLength = intEncoded.NumberBits;
+
+ int a = BitArrayStream.Replicate(bitValue & 1, 1, 7);
+ int b = 0, c = 0, d = 0;
+
+ int result = 0;
+
+ switch (intEncoded.GetEncoding())
+ {
+ case IntegerEncoded.EIntegerEncoding.JustBits:
+ result = BitArrayStream.Replicate(bitValue, bitLength, 6);
+ break;
+
+ case IntegerEncoded.EIntegerEncoding.Trit:
+ {
+ d = intEncoded.TritValue;
+ Debug.Assert(d < 3);
+
+ switch (bitLength)
+ {
+ case 0:
+ {
+ int[] results = { 0, 32, 63 };
+ result = results[d];
+
+ break;
+ }
+
+ case 1:
+ {
+ c = 50;
+ break;
+ }
+
+ case 2:
+ {
+ c = 23;
+ int b2 = (bitValue >> 1) & 1;
+ b = (b2 << 6) | (b2 << 2) | b2;
+
+ break;
+ }
+
+ case 3:
+ {
+ c = 11;
+ int cb = (bitValue >> 1) & 3;
+ b = (cb << 5) | cb;
+
+ break;
+ }
+
+ default:
+ throw new AstcDecoderException("Invalid trit encoding for texel weight");
+ }
+
+ break;
+ }
+
+ case IntegerEncoded.EIntegerEncoding.Quint:
+ {
+ d = intEncoded.QuintValue;
+ Debug.Assert(d < 5);
+
+ switch (bitLength)
+ {
+ case 0:
+ {
+ int[] results = { 0, 16, 32, 47, 63 };
+ result = results[d];
+
+ break;
+ }
+
+ case 1:
+ {
+ c = 28;
+
+ break;
+ }
+
+ case 2:
+ {
+ c = 13;
+ int b2 = (bitValue >> 1) & 1;
+ b = (b2 << 6) | (b2 << 1);
+
+ break;
+ }
+
+ default:
+ throw new AstcDecoderException("Invalid quint encoding for texel weight");
+ }
+
+ break;
+ }
+ }
+
+ if (intEncoded.GetEncoding() != IntegerEncoded.EIntegerEncoding.JustBits && bitLength > 0)
+ {
+ // Decode the value...
+ result = d * c + b;
+ result ^= a;
+ result = (a & 0x20) | (result >> 2);
+ }
+
+ Debug.Assert(result < 64);
+
+ // Change from [0,63] to [0,64]
+ if (result > 32)
+ {
+ result += 1;
+ }
+
+ return result;
+ }
+
+ static byte ReverseByte(byte b)
+ {
+ // Taken from http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64Bits
+ return (byte)((((b) * 0x80200802L) & 0x0884422110L) * 0x0101010101L >> 32);
+ }
+
+ static uint[] ReadUintColorValues(int number, int[] colorValues, ref int colorValuesPosition)
+ {
+ uint[] ret = new uint[number];
+
+ for (int i = 0; i < number; i++)
+ {
+ ret[i] = (uint)colorValues[colorValuesPosition++];
+ }
+
+ return ret;
+ }
+
+ static int[] ReadIntColorValues(int number, int[] colorValues, ref int colorValuesPosition)
+ {
+ int[] ret = new int[number];
+
+ for (int i = 0; i < number; i++)
+ {
+ ret[i] = colorValues[colorValuesPosition++];
+ }
+
+ return ret;
+ }
+
+ static void ComputeEndpoints(
+ AstcPixel[] endPoints,
+ int[] colorValues,
+ uint colorEndpointMode,
+ ref int colorValuesPosition)
+ {
+ switch (colorEndpointMode)
+ {
+ case 0:
+ {
+ uint[] val = ReadUintColorValues(2, colorValues, ref colorValuesPosition);
+
+ endPoints[0] = new AstcPixel(0xFF, (short)val[0], (short)val[0], (short)val[0]);
+ endPoints[1] = new AstcPixel(0xFF, (short)val[1], (short)val[1], (short)val[1]);
+
+ break;
+ }
+
+
+ case 1:
+ {
+ uint[] val = ReadUintColorValues(2, colorValues, ref colorValuesPosition);
+ int l0 = (int)((val[0] >> 2) | (val[1] & 0xC0));
+ int l1 = (int)Math.Max(l0 + (val[1] & 0x3F), 0xFFU);
+
+ endPoints[0] = new AstcPixel(0xFF, (short)l0, (short)l0, (short)l0);
+ endPoints[1] = new AstcPixel(0xFF, (short)l1, (short)l1, (short)l1);
+
+ break;
+ }
+
+ case 4:
+ {
+ uint[] val = ReadUintColorValues(4, colorValues, ref colorValuesPosition);
+
+ endPoints[0] = new AstcPixel((short)val[2], (short)val[0], (short)val[0], (short)val[0]);
+ endPoints[1] = new AstcPixel((short)val[3], (short)val[1], (short)val[1], (short)val[1]);
+
+ break;
+ }
+
+ case 5:
+ {
+ int[] val = ReadIntColorValues(4, colorValues, ref colorValuesPosition);
+
+ BitArrayStream.BitTransferSigned(ref val[1], ref val[0]);
+ BitArrayStream.BitTransferSigned(ref val[3], ref val[2]);
+
+ endPoints[0] = new AstcPixel((short)val[2], (short)val[0], (short)val[0], (short)val[0]);
+ endPoints[1] = new AstcPixel((short)(val[2] + val[3]), (short)(val[0] + val[1]), (short)(val[0] + val[1]), (short)(val[0] + val[1]));
+
+ endPoints[0].ClampByte();
+ endPoints[1].ClampByte();
+
+ break;
+ }
+
+ case 6:
+ {
+ uint[] val = ReadUintColorValues(4, colorValues, ref colorValuesPosition);
+
+ endPoints[0] = new AstcPixel(0xFF, (short)(val[0] * val[3] >> 8), (short)(val[1] * val[3] >> 8), (short)(val[2] * val[3] >> 8));
+ endPoints[1] = new AstcPixel(0xFF, (short)val[0], (short)val[1], (short)val[2]);
+
+ break;
+ }
+
+ case 8:
+ {
+ uint[] val = ReadUintColorValues(6, colorValues, ref colorValuesPosition);
+
+ if (val[1] + val[3] + val[5] >= val[0] + val[2] + val[4])
+ {
+ endPoints[0] = new AstcPixel(0xFF, (short)val[0], (short)val[2], (short)val[4]);
+ endPoints[1] = new AstcPixel(0xFF, (short)val[1], (short)val[3], (short)val[5]);
+ }
+ else
+ {
+ endPoints[0] = AstcPixel.BlueContract(0xFF, (short)val[1], (short)val[3], (short)val[5]);
+ endPoints[1] = AstcPixel.BlueContract(0xFF, (short)val[0], (short)val[2], (short)val[4]);
+ }
+
+ break;
+ }
+
+ case 9:
+ {
+ int[] val = ReadIntColorValues(6, colorValues, ref colorValuesPosition);
+
+ BitArrayStream.BitTransferSigned(ref val[1], ref val[0]);
+ BitArrayStream.BitTransferSigned(ref val[3], ref val[2]);
+ BitArrayStream.BitTransferSigned(ref val[5], ref val[4]);
+
+ if (val[1] + val[3] + val[5] >= 0)
+ {
+ endPoints[0] = new AstcPixel(0xFF, (short)val[0], (short)val[2], (short)val[4]);
+ endPoints[1] = new AstcPixel(0xFF, (short)(val[0] + val[1]), (short)(val[2] + val[3]), (short)(val[4] + val[5]));
+ }
+ else
+ {
+ endPoints[0] = AstcPixel.BlueContract(0xFF, val[0] + val[1], val[2] + val[3], val[4] + val[5]);
+ endPoints[1] = AstcPixel.BlueContract(0xFF, val[0], val[2], val[4]);
+ }
+
+ endPoints[0].ClampByte();
+ endPoints[1].ClampByte();
+
+ break;
+ }
+
+ case 10:
+ {
+ uint[] val = ReadUintColorValues(6, colorValues, ref colorValuesPosition);
+
+ endPoints[0] = new AstcPixel((short)val[4], (short)(val[0] * val[3] >> 8), (short)(val[1] * val[3] >> 8), (short)(val[2] * val[3] >> 8));
+ endPoints[1] = new AstcPixel((short)val[5], (short)val[0], (short)val[1], (short)val[2]);
+
+ break;
+ }
+
+ case 12:
+ {
+ uint[] val = ReadUintColorValues(8, colorValues, ref colorValuesPosition);
+
+ if (val[1] + val[3] + val[5] >= val[0] + val[2] + val[4])
+ {
+ endPoints[0] = new AstcPixel((short)val[6], (short)val[0], (short)val[2], (short)val[4]);
+ endPoints[1] = new AstcPixel((short)val[7], (short)val[1], (short)val[3], (short)val[5]);
+ }
+ else
+ {
+ endPoints[0] = AstcPixel.BlueContract((short)val[7], (short)val[1], (short)val[3], (short)val[5]);
+ endPoints[1] = AstcPixel.BlueContract((short)val[6], (short)val[0], (short)val[2], (short)val[4]);
+ }
+
+ break;
+ }
+
+ case 13:
+ {
+ int[] val = ReadIntColorValues(8, colorValues, ref colorValuesPosition);
+
+ BitArrayStream.BitTransferSigned(ref val[1], ref val[0]);
+ BitArrayStream.BitTransferSigned(ref val[3], ref val[2]);
+ BitArrayStream.BitTransferSigned(ref val[5], ref val[4]);
+ BitArrayStream.BitTransferSigned(ref val[7], ref val[6]);
+
+ if (val[1] + val[3] + val[5] >= 0)
+ {
+ endPoints[0] = new AstcPixel((short)val[6], (short)val[0], (short)val[2], (short)val[4]);
+ endPoints[1] = new AstcPixel((short)(val[7] + val[6]), (short)(val[0] + val[1]), (short)(val[2] + val[3]), (short)(val[4] + val[5]));
+ }
+ else
+ {
+ endPoints[0] = AstcPixel.BlueContract(val[6] + val[7], val[0] + val[1], val[2] + val[3], val[4] + val[5]);
+ endPoints[1] = AstcPixel.BlueContract(val[6], val[0], val[2], val[4]);
+ }
+
+ endPoints[0].ClampByte();
+ endPoints[1].ClampByte();
+
+ break;
+ }
+
+ default:
+ throw new AstcDecoderException("Unsupported color endpoint mode (is it HDR?)");
+ }
+ }
+
+ static void DecodeColorValues(
+ int[] outputValues,
+ byte[] inputData,
+ uint[] modes,
+ int numberPartitions,
+ int numberBitsForColorData)
+ {
+ // First figure out how many color values we have
+ int numberValues = 0;
+
+ for (int i = 0; i < numberPartitions; i++)
+ {
+ numberValues += (int)((modes[i] >> 2) + 1) << 1;
+ }
+
+ // Then based on the number of values and the remaining number of bits,
+ // figure out the max value for each of them...
+ int range = 256;
+
+ while (--range > 0)
+ {
+ IntegerEncoded intEncoded = IntegerEncoded.CreateEncoding(range);
+ int bitLength = intEncoded.GetBitLength(numberValues);
+
+ if (bitLength <= numberBitsForColorData)
+ {
+ // Find the smallest possible range that matches the given encoding
+ while (--range > 0)
+ {
+ IntegerEncoded newIntEncoded = IntegerEncoded.CreateEncoding(range);
+ if (!newIntEncoded.MatchesEncoding(intEncoded))
+ {
+ break;
+ }
+ }
+
+ // Return to last matching range.
+ range++;
+ break;
+ }
+ }
+
+ // We now have enough to decode our integer sequence.
+ List<IntegerEncoded> integerEncodedSequence = new List<IntegerEncoded>();
+ BitArrayStream colorBitStream = new BitArrayStream(new BitArray(inputData));
+
+ IntegerEncoded.DecodeIntegerSequence(integerEncodedSequence, colorBitStream, range, numberValues);
+
+ // Once we have the decoded values, we need to dequantize them to the 0-255 range
+ // This procedure is outlined in ASTC spec C.2.13
+ int outputIndices = 0;
+
+ foreach (IntegerEncoded intEncoded in integerEncodedSequence)
+ {
+ int bitLength = intEncoded.NumberBits;
+ int bitValue = intEncoded.BitValue;
+
+ Debug.Assert(bitLength >= 1);
+
+ int a = 0, b = 0, c = 0, d = 0;
+ // A is just the lsb replicated 9 times.
+ a = BitArrayStream.Replicate(bitValue & 1, 1, 9);
+
+ switch (intEncoded.GetEncoding())
+ {
+ case IntegerEncoded.EIntegerEncoding.JustBits:
+ {
+ outputValues[outputIndices++] = BitArrayStream.Replicate(bitValue, bitLength, 8);
+
+ break;
+ }
+
+ case IntegerEncoded.EIntegerEncoding.Trit:
+ {
+ d = intEncoded.TritValue;
+
+ switch (bitLength)
+ {
+ case 1:
+ {
+ c = 204;
+
+ break;
+ }
+
+ case 2:
+ {
+ c = 93;
+ // B = b000b0bb0
+ int b2 = (bitValue >> 1) & 1;
+ b = (b2 << 8) | (b2 << 4) | (b2 << 2) | (b2 << 1);
+
+ break;
+ }
+
+ case 3:
+ {
+ c = 44;
+ // B = cb000cbcb
+ int cb = (bitValue >> 1) & 3;
+ b = (cb << 7) | (cb << 2) | cb;
+
+ break;
+ }
+
+
+ case 4:
+ {
+ c = 22;
+ // B = dcb000dcb
+ int dcb = (bitValue >> 1) & 7;
+ b = (dcb << 6) | dcb;
+
+ break;
+ }
+
+ case 5:
+ {
+ c = 11;
+ // B = edcb000ed
+ int edcb = (bitValue >> 1) & 0xF;
+ b = (edcb << 5) | (edcb >> 2);
+
+ break;
+ }
+
+ case 6:
+ {
+ c = 5;
+ // B = fedcb000f
+ int fedcb = (bitValue >> 1) & 0x1F;
+ b = (fedcb << 4) | (fedcb >> 4);
+
+ break;
+ }
+
+ default:
+ throw new AstcDecoderException("Unsupported trit encoding for color values!");
+ }
+
+ break;
+ }
+
+ case IntegerEncoded.EIntegerEncoding.Quint:
+ {
+ d = intEncoded.QuintValue;
+
+ switch (bitLength)
+ {
+ case 1:
+ {
+ c = 113;
+
+ break;
+ }
+
+ case 2:
+ {
+ c = 54;
+ // B = b0000bb00
+ int b2 = (bitValue >> 1) & 1;
+ b = (b2 << 8) | (b2 << 3) | (b2 << 2);
+
+ break;
+ }
+
+ case 3:
+ {
+ c = 26;
+ // B = cb0000cbc
+ int cb = (bitValue >> 1) & 3;
+ b = (cb << 7) | (cb << 1) | (cb >> 1);
+
+ break;
+ }
+
+ case 4:
+ {
+ c = 13;
+ // B = dcb0000dc
+ int dcb = (bitValue >> 1) & 7;
+ b = (dcb << 6) | (dcb >> 1);
+
+ break;
+ }
+
+ case 5:
+ {
+ c = 6;
+ // B = edcb0000e
+ int edcb = (bitValue >> 1) & 0xF;
+ b = (edcb << 5) | (edcb >> 3);
+
+ break;
+ }
+
+ default:
+ throw new AstcDecoderException("Unsupported quint encoding for color values!");
+ }
+ break;
+ }
+ }
+
+ if (intEncoded.GetEncoding() != IntegerEncoded.EIntegerEncoding.JustBits)
+ {
+ int T = d * c + b;
+ T ^= a;
+ T = (a & 0x80) | (T >> 2);
+
+ outputValues[outputIndices++] = T;
+ }
+ }
+
+ // Make sure that each of our values is in the proper range...
+ for (int i = 0; i < numberValues; i++)
+ {
+ Debug.Assert(outputValues[i] <= 255);
+ }
+ }
+
+ static void FillVoidExtentLdr(BitArrayStream bitStream, int[] outputBuffer, int blockWidth, int blockHeight)
+ {
+ // Don't actually care about the void extent, just read the bits...
+ for (int i = 0; i < 4; ++i)
+ {
+ bitStream.ReadBits(13);
+ }
+
+ // Decode the RGBA components and renormalize them to the range [0, 255]
+ ushort r = (ushort)bitStream.ReadBits(16);
+ ushort g = (ushort)bitStream.ReadBits(16);
+ ushort b = (ushort)bitStream.ReadBits(16);
+ ushort a = (ushort)bitStream.ReadBits(16);
+
+ int rgba = (r >> 8) | (g & 0xFF00) | ((b) & 0xFF00) << 8 | ((a) & 0xFF00) << 16;
+
+ for (int j = 0; j < blockHeight; j++)
+ {
+ for (int i = 0; i < blockWidth; i++)
+ {
+ outputBuffer[j * blockWidth + i] = rgba;
+ }
+ }
+ }
+
+ static TexelWeightParams DecodeBlockInfo(BitArrayStream bitStream)
+ {
+ TexelWeightParams texelParams = new TexelWeightParams();
+
+ // Read the entire block mode all at once
+ ushort modeBits = (ushort)bitStream.ReadBits(11);
+
+ // Does this match the void extent block mode?
+ if ((modeBits & 0x01FF) == 0x1FC)
+ {
+ if ((modeBits & 0x200) != 0)
+ {
+ texelParams.VoidExtentHdr = true;
+ }
+ else
+ {
+ texelParams.VoidExtentLdr = true;
+ }
+
+ // Next two bits must be one.
+ if ((modeBits & 0x400) == 0 || bitStream.ReadBits(1) == 0)
+ {
+ texelParams.Error = true;
+ }
+
+ return texelParams;
+ }
+
+ // First check if the last four bits are zero
+ if ((modeBits & 0xF) == 0)
+ {
+ texelParams.Error = true;
+ return texelParams;
+ }
+
+ // If the last two bits are zero, then if bits
+ // [6-8] are all ones, this is also reserved.
+ if ((modeBits & 0x3) == 0 && (modeBits & 0x1C0) == 0x1C0)
+ {
+ texelParams.Error = true;
+
+ return texelParams;
+ }
+
+ // Otherwise, there is no error... Figure out the layout
+ // of the block mode. Layout is determined by a number
+ // between 0 and 9 corresponding to table C.2.8 of the
+ // ASTC spec.
+ int layout = 0;
+
+ if ((modeBits & 0x1) != 0 || (modeBits & 0x2) != 0)
+ {
+ // layout is in [0-4]
+ if ((modeBits & 0x8) != 0)
+ {
+ // layout is in [2-4]
+ if ((modeBits & 0x4) != 0)
+ {
+ // layout is in [3-4]
+ if ((modeBits & 0x100) != 0)
+ {
+ layout = 4;
+ }
+ else
+ {
+ layout = 3;
+ }
+ }
+ else
+ {
+ layout = 2;
+ }
+ }
+ else
+ {
+ // layout is in [0-1]
+ if ((modeBits & 0x4) != 0)
+ {
+ layout = 1;
+ }
+ else
+ {
+ layout = 0;
+ }
+ }
+ }
+ else
+ {
+ // layout is in [5-9]
+ if ((modeBits & 0x100) != 0)
+ {
+ // layout is in [7-9]
+ if ((modeBits & 0x80) != 0)
+ {
+ // layout is in [7-8]
+ Debug.Assert((modeBits & 0x40) == 0);
+
+ if ((modeBits & 0x20) != 0)
+ {
+ layout = 8;
+ }
+ else
+ {
+ layout = 7;
+ }
+ }
+ else
+ {
+ layout = 9;
+ }
+ }
+ else
+ {
+ // layout is in [5-6]
+ if ((modeBits & 0x80) != 0)
+ {
+ layout = 6;
+ }
+ else
+ {
+ layout = 5;
+ }
+ }
+ }
+
+ Debug.Assert(layout < 10);
+
+ // Determine R
+ int r = (modeBits >> 4) & 1;
+ if (layout < 5)
+ {
+ r |= (modeBits & 0x3) << 1;
+ }
+ else
+ {
+ r |= (modeBits & 0xC) >> 1;
+ }
+
+ Debug.Assert(2 <= r && r <= 7);
+
+ // Determine width & height
+ switch (layout)
+ {
+ case 0:
+ {
+ int a = (modeBits >> 5) & 0x3;
+ int b = (modeBits >> 7) & 0x3;
+
+ texelParams.Width = b + 4;
+ texelParams.Height = a + 2;
+
+ break;
+ }
+
+ case 1:
+ {
+ int a = (modeBits >> 5) & 0x3;
+ int b = (modeBits >> 7) & 0x3;
+
+ texelParams.Width = b + 8;
+ texelParams.Height = a + 2;
+
+ break;
+ }
+
+ case 2:
+ {
+ int a = (modeBits >> 5) & 0x3;
+ int b = (modeBits >> 7) & 0x3;
+
+ texelParams.Width = a + 2;
+ texelParams.Height = b + 8;
+
+ break;
+ }
+
+ case 3:
+ {
+ int a = (modeBits >> 5) & 0x3;
+ int b = (modeBits >> 7) & 0x1;
+
+ texelParams.Width = a + 2;
+ texelParams.Height = b + 6;
+
+ break;
+ }
+
+ case 4:
+ {
+ int a = (modeBits >> 5) & 0x3;
+ int b = (modeBits >> 7) & 0x1;
+
+ texelParams.Width = b + 2;
+ texelParams.Height = a + 2;
+
+ break;
+ }
+
+ case 5:
+ {
+ int a = (modeBits >> 5) & 0x3;
+
+ texelParams.Width = 12;
+ texelParams.Height = a + 2;
+
+ break;
+ }
+
+ case 6:
+ {
+ int a = (modeBits >> 5) & 0x3;
+
+ texelParams.Width = a + 2;
+ texelParams.Height = 12;
+
+ break;
+ }
+
+ case 7:
+ {
+ texelParams.Width = 6;
+ texelParams.Height = 10;
+
+ break;
+ }
+
+ case 8:
+ {
+ texelParams.Width = 10;
+ texelParams.Height = 6;
+ break;
+ }
+
+ case 9:
+ {
+ int a = (modeBits >> 5) & 0x3;
+ int b = (modeBits >> 9) & 0x3;
+
+ texelParams.Width = a + 6;
+ texelParams.Height = b + 6;
+
+ break;
+ }
+
+ default:
+ //Don't know this layout...
+ texelParams.Error = true;
+ break;
+ }
+
+ // Determine whether or not we're using dual planes
+ // and/or high precision layouts.
+ bool d = ((layout != 9) && ((modeBits & 0x400) != 0));
+ bool h = (layout != 9) && ((modeBits & 0x200) != 0);
+
+ if (h)
+ {
+ int[] maxWeights = { 9, 11, 15, 19, 23, 31 };
+ texelParams.MaxWeight = maxWeights[r - 2];
+ }
+ else
+ {
+ int[] maxWeights = { 1, 2, 3, 4, 5, 7 };
+ texelParams.MaxWeight = maxWeights[r - 2];
+ }
+
+ texelParams.DualPlane = d;
+
+ return texelParams;
+ }
+ }
+}
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/AstcPixel.cs b/Ryujinx.Graphics/Graphics3d/Texture/AstcPixel.cs
new file mode 100644
index 00000000..cd30acca
--- /dev/null
+++ b/Ryujinx.Graphics/Graphics3d/Texture/AstcPixel.cs
@@ -0,0 +1,138 @@
+using System;
+using System.Diagnostics;
+
+namespace Ryujinx.Graphics.Texture
+{
+ class AstcPixel
+ {
+ public short R { get; set; }
+ public short G { get; set; }
+ public short B { get; set; }
+ public short A { get; set; }
+
+ byte[] _bitDepth = new byte[4];
+
+ public AstcPixel(short a, short r, short g, short b)
+ {
+ A = a;
+ R = r;
+ G = g;
+ B = b;
+
+ for (int i = 0; i < 4; i++)
+ _bitDepth[i] = 8;
+ }
+
+ public void ClampByte()
+ {
+ R = Math.Min(Math.Max(R, (short)0), (short)255);
+ G = Math.Min(Math.Max(G, (short)0), (short)255);
+ B = Math.Min(Math.Max(B, (short)0), (short)255);
+ A = Math.Min(Math.Max(A, (short)0), (short)255);
+ }
+
+ public short GetComponent(int index)
+ {
+ switch(index)
+ {
+ case 0: return A;
+ case 1: return R;
+ case 2: return G;
+ case 3: return B;
+ }
+
+ return 0;
+ }
+
+ public void SetComponent(int index, int value)
+ {
+ switch (index)
+ {
+ case 0:
+ A = (short)value;
+ break;
+ case 1:
+ R = (short)value;
+ break;
+ case 2:
+ G = (short)value;
+ break;
+ case 3:
+ B = (short)value;
+ break;
+ }
+ }
+
+ public void ChangeBitDepth(byte[] depth)
+ {
+ for(int i = 0; i< 4; i++)
+ {
+ int value = ChangeBitDepth(GetComponent(i), _bitDepth[i], depth[i]);
+
+ SetComponent(i, value);
+ _bitDepth[i] = depth[i];
+ }
+ }
+
+ short ChangeBitDepth(short value, byte oldDepth, byte newDepth)
+ {
+ Debug.Assert(newDepth <= 8);
+ Debug.Assert(oldDepth <= 8);
+
+ if (oldDepth == newDepth)
+ {
+ // Do nothing
+ return value;
+ }
+ else if (oldDepth == 0 && newDepth != 0)
+ {
+ return (short)((1 << newDepth) - 1);
+ }
+ else if (newDepth > oldDepth)
+ {
+ return (short)BitArrayStream.Replicate(value, oldDepth, newDepth);
+ }
+ else
+ {
+ // oldDepth > newDepth
+ if (newDepth == 0)
+ {
+ return 0xFF;
+ }
+ else
+ {
+ byte bitsWasted = (byte)(oldDepth - newDepth);
+ short tempValue = value;
+
+ tempValue = (short)((tempValue + (1 << (bitsWasted - 1))) >> bitsWasted);
+ tempValue = Math.Min(Math.Max((short)0, tempValue), (short)((1 << newDepth) - 1));
+
+ return (byte)(tempValue);
+ }
+ }
+ }
+
+ public int Pack()
+ {
+ AstcPixel newPixel = new AstcPixel(A, R, G, B);
+ byte[] eightBitDepth = { 8, 8, 8, 8 };
+
+ newPixel.ChangeBitDepth(eightBitDepth);
+
+ return (byte)newPixel.A << 24 |
+ (byte)newPixel.B << 16 |
+ (byte)newPixel.G << 8 |
+ (byte)newPixel.R << 0;
+ }
+
+ // Adds more precision to the blue channel as described
+ // in C.2.14
+ public static AstcPixel BlueContract(int a, int r, int g, int b)
+ {
+ return new AstcPixel((short)(a),
+ (short)((r + b) >> 1),
+ (short)((g + b) >> 1),
+ (short)(b));
+ }
+ }
+}
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/BitArrayStream.cs b/Ryujinx.Graphics/Graphics3d/Texture/BitArrayStream.cs
index 2a8ed091..24069d72 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/BitArrayStream.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/BitArrayStream.cs
@@ -9,103 +9,103 @@ namespace Ryujinx.Graphics.Texture
public int Position { get; private set; }
- public BitArrayStream(BitArray BitArray)
+ public BitArrayStream(BitArray bitArray)
{
- BitsArray = BitArray;
+ BitsArray = bitArray;
Position = 0;
}
- public short ReadBits(int Length)
+ public short ReadBits(int length)
{
- int RetValue = 0;
- for (int i = Position; i < Position + Length; i++)
+ int retValue = 0;
+ for (int i = Position; i < Position + length; i++)
{
if (BitsArray[i])
{
- RetValue |= 1 << (i - Position);
+ retValue |= 1 << (i - Position);
}
}
- Position += Length;
- return (short)RetValue;
+ Position += length;
+ return (short)retValue;
}
- public int ReadBits(int Start, int End)
+ public int ReadBits(int start, int end)
{
- int RetValue = 0;
- for (int i = Start; i <= End; i++)
+ int retValue = 0;
+ for (int i = start; i <= end; i++)
{
if (BitsArray[i])
{
- RetValue |= 1 << (i - Start);
+ retValue |= 1 << (i - start);
}
}
- return RetValue;
+ return retValue;
}
- public int ReadBit(int Index)
+ public int ReadBit(int index)
{
- return Convert.ToInt32(BitsArray[Index]);
+ return Convert.ToInt32(BitsArray[index]);
}
- public void WriteBits(int Value, int Length)
+ public void WriteBits(int value, int length)
{
- for (int i = Position; i < Position + Length; i++)
+ for (int i = Position; i < Position + length; i++)
{
- BitsArray[i] = ((Value >> (i - Position)) & 1) != 0;
+ BitsArray[i] = ((value >> (i - Position)) & 1) != 0;
}
- Position += Length;
+ Position += length;
}
public byte[] ToByteArray()
{
- byte[] RetArray = new byte[(BitsArray.Length + 7) / 8];
- BitsArray.CopyTo(RetArray, 0);
- return RetArray;
+ byte[] retArray = new byte[(BitsArray.Length + 7) / 8];
+ BitsArray.CopyTo(retArray, 0);
+ return retArray;
}
- public static int Replicate(int Value, int NumberBits, int ToBit)
+ public static int Replicate(int value, int numberBits, int toBit)
{
- if (NumberBits == 0) return 0;
- if (ToBit == 0) return 0;
+ if (numberBits == 0) return 0;
+ if (toBit == 0) return 0;
- int TempValue = Value & ((1 << NumberBits) - 1);
- int RetValue = TempValue;
- int ResLength = NumberBits;
+ int tempValue = value & ((1 << numberBits) - 1);
+ int retValue = tempValue;
+ int resLength = numberBits;
- while (ResLength < ToBit)
+ while (resLength < toBit)
{
- int Comp = 0;
- if (NumberBits > ToBit - ResLength)
+ int comp = 0;
+ if (numberBits > toBit - resLength)
{
- int NewShift = ToBit - ResLength;
- Comp = NumberBits - NewShift;
- NumberBits = NewShift;
+ int newShift = toBit - resLength;
+ comp = numberBits - newShift;
+ numberBits = newShift;
}
- RetValue <<= NumberBits;
- RetValue |= TempValue >> Comp;
- ResLength += NumberBits;
+ retValue <<= numberBits;
+ retValue |= tempValue >> comp;
+ resLength += numberBits;
}
- return RetValue;
+ return retValue;
}
- public static int PopCnt(int Number)
+ public static int PopCnt(int number)
{
- int Counter;
- for (Counter = 0; Number != 0; Counter++)
+ int counter;
+ for (counter = 0; number != 0; counter++)
{
- Number &= Number - 1;
+ number &= number - 1;
}
- return Counter;
+ return counter;
}
public static void Swap<T>(ref T lhs, ref T rhs)
{
- T Temp = lhs;
+ T temp = lhs;
lhs = rhs;
- rhs = Temp;
+ rhs = temp;
}
// Transfers a bit as described in C.2.14
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/BlockLinearSwizzle.cs b/Ryujinx.Graphics/Graphics3d/Texture/BlockLinearSwizzle.cs
index 1be06442..682f7d67 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/BlockLinearSwizzle.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/BlockLinearSwizzle.cs
@@ -10,98 +10,98 @@ namespace Ryujinx.Graphics.Texture
private const int GobSize = GobWidth * GobHeight;
- private int TexWidth;
- private int TexHeight;
- private int TexDepth;
- private int TexGobBlockHeight;
- private int TexGobBlockDepth;
- private int TexBpp;
+ private int _texWidth;
+ private int _texHeight;
+ private int _texDepth;
+ private int _texGobBlockHeight;
+ private int _texGobBlockDepth;
+ private int _texBpp;
- private int BhMask;
- private int BdMask;
+ private int _bhMask;
+ private int _bdMask;
- private int BhShift;
- private int BdShift;
- private int BppShift;
+ private int _bhShift;
+ private int _bdShift;
+ private int _bppShift;
- private int XShift;
+ private int _xShift;
- private int RobSize;
- private int SliceSize;
+ private int _robSize;
+ private int _sliceSize;
- private int BaseOffset;
+ private int _baseOffset;
public BlockLinearSwizzle(
- int Width,
- int Height,
- int Depth,
- int GobBlockHeight,
- int GobBlockDepth,
- int Bpp)
+ int width,
+ int height,
+ int depth,
+ int gobBlockHeight,
+ int gobBlockDepth,
+ int bpp)
{
- TexWidth = Width;
- TexHeight = Height;
- TexDepth = Depth;
- TexGobBlockHeight = GobBlockHeight;
- TexGobBlockDepth = GobBlockDepth;
- TexBpp = Bpp;
+ _texWidth = width;
+ _texHeight = height;
+ _texDepth = depth;
+ _texGobBlockHeight = gobBlockHeight;
+ _texGobBlockDepth = gobBlockDepth;
+ _texBpp = bpp;
- BppShift = BitUtils.CountTrailingZeros32(Bpp);
+ _bppShift = BitUtils.CountTrailingZeros32(bpp);
SetMipLevel(0);
}
- public void SetMipLevel(int Level)
+ public void SetMipLevel(int level)
{
- BaseOffset = GetMipOffset(Level);
+ _baseOffset = GetMipOffset(level);
- int Width = Math.Max(1, TexWidth >> Level);
- int Height = Math.Max(1, TexHeight >> Level);
- int Depth = Math.Max(1, TexDepth >> Level);
+ int width = Math.Max(1, _texWidth >> level);
+ int height = Math.Max(1, _texHeight >> level);
+ int depth = Math.Max(1, _texDepth >> level);
- GobBlockSizes GbSizes = AdjustGobBlockSizes(Height, Depth);
+ GobBlockSizes gbSizes = AdjustGobBlockSizes(height, depth);
- BhMask = GbSizes.Height - 1;
- BdMask = GbSizes.Depth - 1;
+ _bhMask = gbSizes.Height - 1;
+ _bdMask = gbSizes.Depth - 1;
- BhShift = BitUtils.CountTrailingZeros32(GbSizes.Height);
- BdShift = BitUtils.CountTrailingZeros32(GbSizes.Depth);
+ _bhShift = BitUtils.CountTrailingZeros32(gbSizes.Height);
+ _bdShift = BitUtils.CountTrailingZeros32(gbSizes.Depth);
- XShift = BitUtils.CountTrailingZeros32(GobSize * GbSizes.Height * GbSizes.Depth);
+ _xShift = BitUtils.CountTrailingZeros32(GobSize * gbSizes.Height * gbSizes.Depth);
- RobAndSliceSizes GsSizes = GetRobAndSliceSizes(Width, Height, GbSizes);
+ RobAndSliceSizes gsSizes = GetRobAndSliceSizes(width, height, gbSizes);
- RobSize = GsSizes.RobSize;
- SliceSize = GsSizes.SliceSize;
+ _robSize = gsSizes.RobSize;
+ _sliceSize = gsSizes.SliceSize;
}
- public int GetImageSize(int MipsCount)
+ public int GetImageSize(int mipsCount)
{
- int Size = GetMipOffset(MipsCount);
+ int size = GetMipOffset(mipsCount);
- Size = (Size + 0x1fff) & ~0x1fff;
+ size = (size + 0x1fff) & ~0x1fff;
- return Size;
+ return size;
}
- public int GetMipOffset(int Level)
+ public int GetMipOffset(int level)
{
- int TotalSize = 0;
+ int totalSize = 0;
- for (int Index = 0; Index < Level; Index++)
+ for (int index = 0; index < level; index++)
{
- int Width = Math.Max(1, TexWidth >> Index);
- int Height = Math.Max(1, TexHeight >> Index);
- int Depth = Math.Max(1, TexDepth >> Index);
+ int width = Math.Max(1, _texWidth >> index);
+ int height = Math.Max(1, _texHeight >> index);
+ int depth = Math.Max(1, _texDepth >> index);
- GobBlockSizes GbSizes = AdjustGobBlockSizes(Height, Depth);
+ GobBlockSizes gbSizes = AdjustGobBlockSizes(height, depth);
- RobAndSliceSizes RsSizes = GetRobAndSliceSizes(Width, Height, GbSizes);
+ RobAndSliceSizes rsSizes = GetRobAndSliceSizes(width, height, gbSizes);
- TotalSize += BitUtils.DivRoundUp(Depth, GbSizes.Depth) * RsSizes.SliceSize;
+ totalSize += BitUtils.DivRoundUp(depth, gbSizes.Depth) * rsSizes.SliceSize;
}
- return TotalSize;
+ return totalSize;
}
private struct GobBlockSizes
@@ -109,32 +109,32 @@ namespace Ryujinx.Graphics.Texture
public int Height;
public int Depth;
- public GobBlockSizes(int GobBlockHeight, int GobBlockDepth)
+ public GobBlockSizes(int gobBlockHeight, int gobBlockDepth)
{
- this.Height = GobBlockHeight;
- this.Depth = GobBlockDepth;
+ Height = gobBlockHeight;
+ Depth = gobBlockDepth;
}
}
- private GobBlockSizes AdjustGobBlockSizes(int Height, int Depth)
+ private GobBlockSizes AdjustGobBlockSizes(int height, int depth)
{
- int GobBlockHeight = TexGobBlockHeight;
- int GobBlockDepth = TexGobBlockDepth;
+ int gobBlockHeight = _texGobBlockHeight;
+ int gobBlockDepth = _texGobBlockDepth;
- int Pow2Height = BitUtils.Pow2RoundUp(Height);
- int Pow2Depth = BitUtils.Pow2RoundUp(Depth);
+ int pow2Height = BitUtils.Pow2RoundUp(height);
+ int pow2Depth = BitUtils.Pow2RoundUp(depth);
- while (GobBlockHeight * GobHeight > Pow2Height && GobBlockHeight > 1)
+ while (gobBlockHeight * GobHeight > pow2Height && gobBlockHeight > 1)
{
- GobBlockHeight >>= 1;
+ gobBlockHeight >>= 1;
}
- while (GobBlockDepth > Pow2Depth && GobBlockDepth > 1)
+ while (gobBlockDepth > pow2Depth && gobBlockDepth > 1)
{
- GobBlockDepth >>= 1;
+ gobBlockDepth >>= 1;
}
- return new GobBlockSizes(GobBlockHeight, GobBlockDepth);
+ return new GobBlockSizes(gobBlockHeight, gobBlockDepth);
}
private struct RobAndSliceSizes
@@ -142,45 +142,45 @@ namespace Ryujinx.Graphics.Texture
public int RobSize;
public int SliceSize;
- public RobAndSliceSizes(int RobSize, int SliceSize)
+ public RobAndSliceSizes(int robSize, int sliceSize)
{
- this.RobSize = RobSize;
- this.SliceSize = SliceSize;
+ RobSize = robSize;
+ SliceSize = sliceSize;
}
}
- private RobAndSliceSizes GetRobAndSliceSizes(int Width, int Height, GobBlockSizes GbSizes)
+ private RobAndSliceSizes GetRobAndSliceSizes(int width, int height, GobBlockSizes gbSizes)
{
- int WidthInGobs = BitUtils.DivRoundUp(Width * TexBpp, GobWidth);
+ int widthInGobs = BitUtils.DivRoundUp(width * _texBpp, GobWidth);
- int RobSize = GobSize * GbSizes.Height * GbSizes.Depth * WidthInGobs;
+ int robSize = GobSize * gbSizes.Height * gbSizes.Depth * widthInGobs;
- int SliceSize = BitUtils.DivRoundUp(Height, GbSizes.Height * GobHeight) * RobSize;
+ int sliceSize = BitUtils.DivRoundUp(height, gbSizes.Height * GobHeight) * robSize;
- return new RobAndSliceSizes(RobSize, SliceSize);
+ return new RobAndSliceSizes(robSize, sliceSize);
}
- public int GetSwizzleOffset(int X, int Y, int Z)
+ public int GetSwizzleOffset(int x, int y, int z)
{
- X <<= BppShift;
+ x <<= _bppShift;
- int YH = Y / GobHeight;
+ int yh = y / GobHeight;
- int Position = (Z >> BdShift) * SliceSize + (YH >> BhShift) * RobSize;
+ int position = (z >> _bdShift) * _sliceSize + (yh >> _bhShift) * _robSize;
- Position += (X / GobWidth) << XShift;
+ position += (x / GobWidth) << _xShift;
- Position += (YH & BhMask) * GobSize;
+ position += (yh & _bhMask) * GobSize;
- Position += ((Z & BdMask) * GobSize) << BhShift;
+ position += ((z & _bdMask) * GobSize) << _bhShift;
- Position += ((X & 0x3f) >> 5) << 8;
- Position += ((Y & 0x07) >> 1) << 6;
- Position += ((X & 0x1f) >> 4) << 5;
- Position += ((Y & 0x01) >> 0) << 4;
- Position += ((X & 0x0f) >> 0) << 0;
+ position += ((x & 0x3f) >> 5) << 8;
+ position += ((y & 0x07) >> 1) << 6;
+ position += ((x & 0x1f) >> 4) << 5;
+ position += ((y & 0x01) >> 0) << 4;
+ position += ((x & 0x0f) >> 0) << 0;
- return BaseOffset + Position;
+ return _baseOffset + position;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/ISwizzle.cs b/Ryujinx.Graphics/Graphics3d/Texture/ISwizzle.cs
index 2e0e8aed..fae3eada 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/ISwizzle.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/ISwizzle.cs
@@ -2,12 +2,12 @@ namespace Ryujinx.Graphics.Texture
{
interface ISwizzle
{
- int GetSwizzleOffset(int X, int Y, int Z);
+ int GetSwizzleOffset(int x, int y, int z);
- void SetMipLevel(int Level);
+ void SetMipLevel(int level);
- int GetMipOffset(int Level);
+ int GetMipOffset(int level);
- int GetImageSize(int MipsCount);
+ int GetImageSize(int mipsCount);
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/ImageUtils.cs b/Ryujinx.Graphics/Graphics3d/Texture/ImageUtils.cs
index c4208935..bd9b4327 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/ImageUtils.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/ImageUtils.cs
@@ -1,6 +1,5 @@
using ChocolArm64.Memory;
using OpenTK.Graphics.OpenGL;
-using Ryujinx.Common;
using Ryujinx.Graphics.Gal;
using Ryujinx.Graphics.Memory;
using System;
@@ -29,13 +28,13 @@ namespace Ryujinx.Graphics.Texture
public TargetBuffer Target { get; private set; }
- public ImageDescriptor(int BytesPerPixel, int BlockWidth, int BlockHeight, int BlockDepth, TargetBuffer Target)
+ public ImageDescriptor(int bytesPerPixel, int blockWidth, int blockHeight, int blockDepth, TargetBuffer target)
{
- this.BytesPerPixel = BytesPerPixel;
- this.BlockWidth = BlockWidth;
- this.BlockHeight = BlockHeight;
- this.BlockDepth = BlockDepth;
- this.Target = Target;
+ BytesPerPixel = bytesPerPixel;
+ BlockWidth = blockWidth;
+ BlockHeight = blockHeight;
+ BlockDepth = blockDepth;
+ Target = target;
}
}
@@ -46,26 +45,26 @@ namespace Ryujinx.Graphics.Texture
private const GalImageFormat Float = GalImageFormat.Float;
private const GalImageFormat Srgb = GalImageFormat.Srgb;
- private static readonly Dictionary<GalTextureFormat, GalImageFormat> s_TextureTable =
+ private static readonly Dictionary<GalTextureFormat, GalImageFormat> TextureTable =
new Dictionary<GalTextureFormat, GalImageFormat>()
{
- { GalTextureFormat.RGBA32, GalImageFormat.RGBA32 | Sint | Uint | Float },
- { GalTextureFormat.RGBA16, GalImageFormat.RGBA16 | Snorm | Unorm | Sint | Uint | Float },
- { GalTextureFormat.RG32, GalImageFormat.RG32 | Sint | Uint | Float },
- { GalTextureFormat.RGBA8, GalImageFormat.RGBA8 | Snorm | Unorm | Sint | Uint | Srgb },
- { GalTextureFormat.RGB10A2, GalImageFormat.RGB10A2 | Snorm | Unorm | Sint | Uint },
- { GalTextureFormat.RG8, GalImageFormat.RG8 | Snorm | Unorm | Sint | Uint },
+ { GalTextureFormat.Rgba32, GalImageFormat.Rgba32 | Sint | Uint | Float },
+ { GalTextureFormat.Rgba16, GalImageFormat.Rgba16 | Snorm | Unorm | Sint | Uint | Float },
+ { GalTextureFormat.Rg32, GalImageFormat.Rg32 | Sint | Uint | Float },
+ { GalTextureFormat.Rgba8, GalImageFormat.Rgba8 | Snorm | Unorm | Sint | Uint | Srgb },
+ { GalTextureFormat.Rgb10A2, GalImageFormat.Rgb10A2 | Snorm | Unorm | Sint | Uint },
+ { GalTextureFormat.Rg8, GalImageFormat.Rg8 | Snorm | Unorm | Sint | Uint },
{ GalTextureFormat.R16, GalImageFormat.R16 | Snorm | Unorm | Sint | Uint | Float },
{ GalTextureFormat.R8, GalImageFormat.R8 | Snorm | Unorm | Sint | Uint },
- { GalTextureFormat.RG16, GalImageFormat.RG16 | Snorm | Unorm | Sint | Float },
+ { GalTextureFormat.Rg16, GalImageFormat.Rg16 | Snorm | Unorm | Sint | Float },
{ GalTextureFormat.R32, GalImageFormat.R32 | Sint | Uint | Float },
- { GalTextureFormat.RGBA4, GalImageFormat.RGBA4 | Unorm },
- { GalTextureFormat.RGB5A1, GalImageFormat.RGB5A1 | Unorm },
- { GalTextureFormat.RGB565, GalImageFormat.RGB565 | Unorm },
+ { GalTextureFormat.Rgba4, GalImageFormat.Rgba4 | Unorm },
+ { GalTextureFormat.Rgb5A1, GalImageFormat.Rgb5A1 | Unorm },
+ { GalTextureFormat.Rgb565, GalImageFormat.Rgb565 | Unorm },
{ GalTextureFormat.R11G11B10F, GalImageFormat.R11G11B10 | Float },
{ GalTextureFormat.D24S8, GalImageFormat.D24S8 | Unorm | Uint },
{ GalTextureFormat.D32F, GalImageFormat.D32 | Float },
- { GalTextureFormat.D32FX24S8, GalImageFormat.D32S8 | Float },
+ { GalTextureFormat.D32Fx24S8, GalImageFormat.D32S8 | Float },
{ GalTextureFormat.D16, GalImageFormat.D16 | Unorm },
//Compressed formats
@@ -93,27 +92,27 @@ namespace Ryujinx.Graphics.Texture
{ GalTextureFormat.Astc2D10x6, GalImageFormat.Astc2D10x6 | Unorm | Srgb }
};
- private static readonly Dictionary<GalImageFormat, ImageDescriptor> s_ImageTable =
+ private static readonly Dictionary<GalImageFormat, ImageDescriptor> ImageTable =
new Dictionary<GalImageFormat, ImageDescriptor>()
{
- { GalImageFormat.RGBA32, new ImageDescriptor(16, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RGBA16, new ImageDescriptor(8, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RG32, new ImageDescriptor(8, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RGBX8, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RGBA8, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.BGRA8, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RGB10A2, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rgba32, new ImageDescriptor(16, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rgba16, new ImageDescriptor(8, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rg32, new ImageDescriptor(8, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rgbx8, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rgba8, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Bgra8, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rgb10A2, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
{ GalImageFormat.R32, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RGBA4, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rgba4, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
{ GalImageFormat.BptcSfloat, new ImageDescriptor(16, 4, 4, 1, TargetBuffer.Color) },
{ GalImageFormat.BptcUfloat, new ImageDescriptor(16, 4, 4, 1, TargetBuffer.Color) },
- { GalImageFormat.BGR5A1, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RGB5A1, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RGB565, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.BGR565, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Bgr5A1, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rgb5A1, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rgb565, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Bgr565, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
{ GalImageFormat.BptcUnorm, new ImageDescriptor(16, 4, 4, 1, TargetBuffer.Color) },
- { GalImageFormat.RG16, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
- { GalImageFormat.RG8, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rg16, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
+ { GalImageFormat.Rg8, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
{ GalImageFormat.R16, new ImageDescriptor(2, 1, 1, 1, TargetBuffer.Color) },
{ GalImageFormat.R8, new ImageDescriptor(1, 1, 1, 1, TargetBuffer.Color) },
{ GalImageFormat.R11G11B10, new ImageDescriptor(4, 1, 1, 1, TargetBuffer.Color) },
@@ -145,77 +144,77 @@ namespace Ryujinx.Graphics.Texture
};
public static GalImageFormat ConvertTexture(
- GalTextureFormat Format,
- GalTextureType RType,
- GalTextureType GType,
- GalTextureType BType,
- GalTextureType AType,
- bool ConvSrgb)
+ GalTextureFormat format,
+ GalTextureType rType,
+ GalTextureType gType,
+ GalTextureType bType,
+ GalTextureType aType,
+ bool convSrgb)
{
- if (!s_TextureTable.TryGetValue(Format, out GalImageFormat ImageFormat))
+ if (!TextureTable.TryGetValue(format, out GalImageFormat imageFormat))
{
- throw new NotImplementedException($"Format 0x{((int)Format):x} not implemented!");
+ throw new NotImplementedException($"Format 0x{((int)format):x} not implemented!");
}
- if (!HasDepth(ImageFormat) && (RType != GType || RType != BType || RType != AType))
+ if (!HasDepth(imageFormat) && (rType != gType || rType != bType || rType != aType))
{
- throw new NotImplementedException($"Per component types are not implemented!");
+ throw new NotImplementedException("Per component types are not implemented!");
}
- GalImageFormat FormatType = ConvSrgb ? Srgb : GetFormatType(RType);
+ GalImageFormat formatType = convSrgb ? Srgb : GetFormatType(rType);
- GalImageFormat CombinedFormat = (ImageFormat & GalImageFormat.FormatMask) | FormatType;
+ GalImageFormat combinedFormat = (imageFormat & GalImageFormat.FormatMask) | formatType;
- if (!ImageFormat.HasFlag(FormatType))
+ if (!imageFormat.HasFlag(formatType))
{
- throw new NotImplementedException($"Format \"{CombinedFormat}\" not implemented!");
+ throw new NotImplementedException($"Format \"{combinedFormat}\" not implemented!");
}
- return CombinedFormat;
+ return combinedFormat;
}
- public static GalImageFormat ConvertSurface(GalSurfaceFormat Format)
+ public static GalImageFormat ConvertSurface(GalSurfaceFormat format)
{
- switch (Format)
+ switch (format)
{
- case GalSurfaceFormat.RGBA32Float: return GalImageFormat.RGBA32 | Float;
- case GalSurfaceFormat.RGBA32Uint: return GalImageFormat.RGBA32 | Uint;
- case GalSurfaceFormat.RGBA16Float: return GalImageFormat.RGBA16 | Float;
- case GalSurfaceFormat.RGBA16Unorm: return GalImageFormat.RGBA16 | Unorm;
- case GalSurfaceFormat.RG32Float: return GalImageFormat.RG32 | Float;
- case GalSurfaceFormat.RG32Sint: return GalImageFormat.RG32 | Sint;
- case GalSurfaceFormat.RG32Uint: return GalImageFormat.RG32 | Uint;
- case GalSurfaceFormat.BGRA8Unorm: return GalImageFormat.BGRA8 | Unorm;
- case GalSurfaceFormat.BGRA8Srgb: return GalImageFormat.BGRA8 | Srgb;
- case GalSurfaceFormat.RGB10A2Unorm: return GalImageFormat.RGB10A2 | Unorm;
- case GalSurfaceFormat.RGBA8Unorm: return GalImageFormat.RGBA8 | Unorm;
- case GalSurfaceFormat.RGBA8Srgb: return GalImageFormat.RGBA8 | Srgb;
- case GalSurfaceFormat.RGBA8Snorm: return GalImageFormat.RGBA8 | Snorm;
- case GalSurfaceFormat.RG16Snorm: return GalImageFormat.RG16 | Snorm;
- case GalSurfaceFormat.RG16Unorm: return GalImageFormat.RG16 | Unorm;
- case GalSurfaceFormat.RG16Sint: return GalImageFormat.RG16 | Sint;
- case GalSurfaceFormat.RG16Float: return GalImageFormat.RG16 | Float;
+ case GalSurfaceFormat.Rgba32Float: return GalImageFormat.Rgba32 | Float;
+ case GalSurfaceFormat.Rgba32Uint: return GalImageFormat.Rgba32 | Uint;
+ case GalSurfaceFormat.Rgba16Float: return GalImageFormat.Rgba16 | Float;
+ case GalSurfaceFormat.Rgba16Unorm: return GalImageFormat.Rgba16 | Unorm;
+ case GalSurfaceFormat.Rg32Float: return GalImageFormat.Rg32 | Float;
+ case GalSurfaceFormat.Rg32Sint: return GalImageFormat.Rg32 | Sint;
+ case GalSurfaceFormat.Rg32Uint: return GalImageFormat.Rg32 | Uint;
+ case GalSurfaceFormat.Bgra8Unorm: return GalImageFormat.Bgra8 | Unorm;
+ case GalSurfaceFormat.Bgra8Srgb: return GalImageFormat.Bgra8 | Srgb;
+ case GalSurfaceFormat.Rgb10A2Unorm: return GalImageFormat.Rgb10A2 | Unorm;
+ case GalSurfaceFormat.Rgba8Unorm: return GalImageFormat.Rgba8 | Unorm;
+ case GalSurfaceFormat.Rgba8Srgb: return GalImageFormat.Rgba8 | Srgb;
+ case GalSurfaceFormat.Rgba8Snorm: return GalImageFormat.Rgba8 | Snorm;
+ case GalSurfaceFormat.Rg16Snorm: return GalImageFormat.Rg16 | Snorm;
+ case GalSurfaceFormat.Rg16Unorm: return GalImageFormat.Rg16 | Unorm;
+ case GalSurfaceFormat.Rg16Sint: return GalImageFormat.Rg16 | Sint;
+ case GalSurfaceFormat.Rg16Float: return GalImageFormat.Rg16 | Float;
case GalSurfaceFormat.R11G11B10Float: return GalImageFormat.R11G11B10 | Float;
case GalSurfaceFormat.R32Float: return GalImageFormat.R32 | Float;
case GalSurfaceFormat.R32Uint: return GalImageFormat.R32 | Uint;
- case GalSurfaceFormat.RG8Unorm: return GalImageFormat.RG8 | Unorm;
- case GalSurfaceFormat.RG8Snorm: return GalImageFormat.RG8 | Snorm;
+ case GalSurfaceFormat.Rg8Unorm: return GalImageFormat.Rg8 | Unorm;
+ case GalSurfaceFormat.Rg8Snorm: return GalImageFormat.Rg8 | Snorm;
case GalSurfaceFormat.R16Float: return GalImageFormat.R16 | Float;
case GalSurfaceFormat.R16Unorm: return GalImageFormat.R16 | Unorm;
case GalSurfaceFormat.R16Uint: return GalImageFormat.R16 | Uint;
case GalSurfaceFormat.R8Unorm: return GalImageFormat.R8 | Unorm;
case GalSurfaceFormat.R8Uint: return GalImageFormat.R8 | Uint;
- case GalSurfaceFormat.B5G6R5Unorm: return GalImageFormat.RGB565 | Unorm;
- case GalSurfaceFormat.BGR5A1Unorm: return GalImageFormat.BGR5A1 | Unorm;
- case GalSurfaceFormat.RGBX8Unorm: return GalImageFormat.RGBX8 | Unorm;
+ case GalSurfaceFormat.B5G6R5Unorm: return GalImageFormat.Rgb565 | Unorm;
+ case GalSurfaceFormat.Bgr5A1Unorm: return GalImageFormat.Bgr5A1 | Unorm;
+ case GalSurfaceFormat.Rgbx8Unorm: return GalImageFormat.Rgbx8 | Unorm;
}
- throw new NotImplementedException(Format.ToString());
+ throw new NotImplementedException(format.ToString());
}
- public static GalImageFormat ConvertZeta(GalZetaFormat Format)
+ public static GalImageFormat ConvertZeta(GalZetaFormat format)
{
- switch (Format)
+ switch (format)
{
case GalZetaFormat.D32Float: return GalImageFormat.D32 | Float;
case GalZetaFormat.S8D24Unorm: return GalImageFormat.D24S8 | Unorm;
@@ -225,268 +224,268 @@ namespace Ryujinx.Graphics.Texture
case GalZetaFormat.D32S8X24Float: return GalImageFormat.D32S8 | Float;
}
- throw new NotImplementedException(Format.ToString());
+ throw new NotImplementedException(format.ToString());
}
- public static byte[] ReadTexture(IMemory Memory, GalImage Image, long Position)
+ public static byte[] ReadTexture(IMemory memory, GalImage image, long position)
{
- MemoryManager CpuMemory;
+ MemoryManager cpuMemory;
- if (Memory is NvGpuVmm Vmm)
+ if (memory is NvGpuVmm vmm)
{
- CpuMemory = Vmm.Memory;
+ cpuMemory = vmm.Memory;
}
else
{
- CpuMemory = (MemoryManager)Memory;
+ cpuMemory = (MemoryManager)memory;
}
- ISwizzle Swizzle = TextureHelper.GetSwizzle(Image);
+ ISwizzle swizzle = TextureHelper.GetSwizzle(image);
- ImageDescriptor Desc = GetImageDescriptor(Image.Format);
+ ImageDescriptor desc = GetImageDescriptor(image.Format);
- (int Width, int Height, int Depth) = GetImageSizeInBlocks(Image);
+ (int width, int height, int depth) = GetImageSizeInBlocks(image);
- int BytesPerPixel = Desc.BytesPerPixel;
+ int bytesPerPixel = desc.BytesPerPixel;
//Note: Each row of the texture needs to be aligned to 4 bytes.
- int Pitch = (Width * BytesPerPixel + 3) & ~3;
+ int pitch = (width * bytesPerPixel + 3) & ~3;
- int DataLayerSize = Height * Pitch * Depth;
- byte[] Data = new byte[DataLayerSize * Image.LayerCount];
+ int dataLayerSize = height * pitch * depth;
+ byte[] data = new byte[dataLayerSize * image.LayerCount];
- int TargetMipLevel = Image.MaxMipmapLevel <= 1 ? 1 : Image.MaxMipmapLevel - 1;
- int LayerOffset = ImageUtils.GetLayerOffset(Image, TargetMipLevel);
+ int targetMipLevel = image.MaxMipmapLevel <= 1 ? 1 : image.MaxMipmapLevel - 1;
+ int layerOffset = GetLayerOffset(image, targetMipLevel);
- for (int Layer = 0; Layer < Image.LayerCount; Layer++)
+ for (int layer = 0; layer < image.LayerCount; layer++)
{
- for (int Z = 0; Z < Depth; Z++)
+ for (int z = 0; z < depth; z++)
{
- for (int Y = 0; Y < Height; Y++)
+ for (int y = 0; y < height; y++)
{
- int OutOffs = (DataLayerSize * Layer) + Y * Pitch + (Z * Width * Height * BytesPerPixel);
+ int outOffs = (dataLayerSize * layer) + y * pitch + (z * width * height * bytesPerPixel);
- for (int X = 0; X < Width; X++)
+ for (int x = 0; x < width; x++)
{
- long Offset = (uint)Swizzle.GetSwizzleOffset(X, Y, Z);
+ long offset = (uint)swizzle.GetSwizzleOffset(x, y, z);
- CpuMemory.ReadBytes(Position + (LayerOffset * Layer) + Offset, Data, OutOffs, BytesPerPixel);
+ cpuMemory.ReadBytes(position + (layerOffset * layer) + offset, data, outOffs, bytesPerPixel);
- OutOffs += BytesPerPixel;
+ outOffs += bytesPerPixel;
}
}
}
}
- return Data;
+ return data;
}
- public static void WriteTexture(NvGpuVmm Vmm, GalImage Image, long Position, byte[] Data)
+ public static void WriteTexture(NvGpuVmm vmm, GalImage image, long position, byte[] data)
{
- ISwizzle Swizzle = TextureHelper.GetSwizzle(Image);
+ ISwizzle swizzle = TextureHelper.GetSwizzle(image);
- ImageDescriptor Desc = GetImageDescriptor(Image.Format);
+ ImageDescriptor desc = GetImageDescriptor(image.Format);
- (int Width, int Height, int Depth) = ImageUtils.GetImageSizeInBlocks(Image);
+ (int width, int height, int depth) = GetImageSizeInBlocks(image);
- int BytesPerPixel = Desc.BytesPerPixel;
+ int bytesPerPixel = desc.BytesPerPixel;
- int InOffs = 0;
+ int inOffs = 0;
- for (int Z = 0; Z < Depth; Z++)
- for (int Y = 0; Y < Height; Y++)
- for (int X = 0; X < Width; X++)
+ for (int z = 0; z < depth; z++)
+ for (int y = 0; y < height; y++)
+ for (int x = 0; x < width; x++)
{
- long Offset = (uint)Swizzle.GetSwizzleOffset(X, Y, Z);
+ long offset = (uint)swizzle.GetSwizzleOffset(x, y, z);
- Vmm.Memory.WriteBytes(Position + Offset, Data, InOffs, BytesPerPixel);
+ vmm.Memory.WriteBytes(position + offset, data, inOffs, bytesPerPixel);
- InOffs += BytesPerPixel;
+ inOffs += bytesPerPixel;
}
}
// TODO: Support non 2D
public static bool CopyTexture(
- NvGpuVmm Vmm,
- GalImage SrcImage,
- GalImage DstImage,
- long SrcAddress,
- long DstAddress,
- int SrcX,
- int SrcY,
- int DstX,
- int DstY,
- int Width,
- int Height)
+ NvGpuVmm vmm,
+ GalImage srcImage,
+ GalImage dstImage,
+ long srcAddress,
+ long dstAddress,
+ int srcX,
+ int srcY,
+ int dstX,
+ int dstY,
+ int width,
+ int height)
{
- ISwizzle SrcSwizzle = TextureHelper.GetSwizzle(SrcImage);
- ISwizzle DstSwizzle = TextureHelper.GetSwizzle(DstImage);
+ ISwizzle srcSwizzle = TextureHelper.GetSwizzle(srcImage);
+ ISwizzle dstSwizzle = TextureHelper.GetSwizzle(dstImage);
- ImageDescriptor Desc = GetImageDescriptor(SrcImage.Format);
+ ImageDescriptor desc = GetImageDescriptor(srcImage.Format);
- if (GetImageDescriptor(DstImage.Format).BytesPerPixel != Desc.BytesPerPixel)
+ if (GetImageDescriptor(dstImage.Format).BytesPerPixel != desc.BytesPerPixel)
{
return false;
}
- int BytesPerPixel = Desc.BytesPerPixel;
+ int bytesPerPixel = desc.BytesPerPixel;
- for (int Y = 0; Y < Height; Y++)
- for (int X = 0; X < Width; X++)
+ for (int y = 0; y < height; y++)
+ for (int x = 0; x < width; x++)
{
- long SrcOffset = (uint)SrcSwizzle.GetSwizzleOffset(SrcX + X, SrcY + Y, 0);
- long DstOffset = (uint)DstSwizzle.GetSwizzleOffset(DstX + X, DstY + Y, 0);
+ long srcOffset = (uint)srcSwizzle.GetSwizzleOffset(srcX + x, srcY + y, 0);
+ long dstOffset = (uint)dstSwizzle.GetSwizzleOffset(dstX + x, dstY + y, 0);
- byte[] Texel = Vmm.ReadBytes(SrcAddress + SrcOffset, BytesPerPixel);
+ byte[] texel = vmm.ReadBytes(srcAddress + srcOffset, bytesPerPixel);
- Vmm.WriteBytes(DstAddress + DstOffset, Texel);
+ vmm.WriteBytes(dstAddress + dstOffset, texel);
}
return true;
}
- public static int GetSize(GalImage Image)
+ public static int GetSize(GalImage image)
{
- ImageDescriptor Desc = GetImageDescriptor(Image.Format);
+ ImageDescriptor desc = GetImageDescriptor(image.Format);
- int ComponentCount = GetCoordsCountTextureTarget(Image.TextureTarget);
+ int componentCount = GetCoordsCountTextureTarget(image.TextureTarget);
- if (IsArray(Image.TextureTarget))
- ComponentCount--;
+ if (IsArray(image.TextureTarget))
+ componentCount--;
- int Width = DivRoundUp(Image.Width, Desc.BlockWidth);
- int Height = DivRoundUp(Image.Height, Desc.BlockHeight);
- int Depth = DivRoundUp(Image.Depth, Desc.BlockDepth);
+ int width = DivRoundUp(image.Width, desc.BlockWidth);
+ int height = DivRoundUp(image.Height, desc.BlockHeight);
+ int depth = DivRoundUp(image.Depth, desc.BlockDepth);
- switch (ComponentCount)
+ switch (componentCount)
{
case 1:
- return Desc.BytesPerPixel * Width * Image.LayerCount;
+ return desc.BytesPerPixel * width * image.LayerCount;
case 2:
- return Desc.BytesPerPixel * Width * Height * Image.LayerCount;
+ return desc.BytesPerPixel * width * height * image.LayerCount;
case 3:
- return Desc.BytesPerPixel * Width * Height * Depth * Image.LayerCount;
+ return desc.BytesPerPixel * width * height * depth * image.LayerCount;
default:
- throw new InvalidOperationException($"Invalid component count: {ComponentCount}");
+ throw new InvalidOperationException($"Invalid component count: {componentCount}");
}
}
- public static int GetGpuSize(GalImage Image, bool forcePitch = false)
+ public static int GetGpuSize(GalImage image, bool forcePitch = false)
{
- return TextureHelper.GetSwizzle(Image).GetImageSize(Image.MaxMipmapLevel) * Image.LayerCount;
+ return TextureHelper.GetSwizzle(image).GetImageSize(image.MaxMipmapLevel) * image.LayerCount;
}
- public static int GetLayerOffset(GalImage Image, int MipLevel)
+ public static int GetLayerOffset(GalImage image, int mipLevel)
{
- if (MipLevel <= 0)
+ if (mipLevel <= 0)
{
- MipLevel = 1;
+ mipLevel = 1;
}
- return TextureHelper.GetSwizzle(Image).GetMipOffset(MipLevel);
+ return TextureHelper.GetSwizzle(image).GetMipOffset(mipLevel);
}
- public static int GetPitch(GalImageFormat Format, int Width)
+ public static int GetPitch(GalImageFormat format, int width)
{
- ImageDescriptor Desc = GetImageDescriptor(Format);
+ ImageDescriptor desc = GetImageDescriptor(format);
- int Pitch = Desc.BytesPerPixel * DivRoundUp(Width, Desc.BlockWidth);
+ int pitch = desc.BytesPerPixel * DivRoundUp(width, desc.BlockWidth);
- Pitch = (Pitch + 0x1f) & ~0x1f;
+ pitch = (pitch + 0x1f) & ~0x1f;
- return Pitch;
+ return pitch;
}
- public static int GetBlockWidth(GalImageFormat Format)
+ public static int GetBlockWidth(GalImageFormat format)
{
- return GetImageDescriptor(Format).BlockWidth;
+ return GetImageDescriptor(format).BlockWidth;
}
- public static int GetBlockHeight(GalImageFormat Format)
+ public static int GetBlockHeight(GalImageFormat format)
{
- return GetImageDescriptor(Format).BlockHeight;
+ return GetImageDescriptor(format).BlockHeight;
}
- public static int GetBlockDepth(GalImageFormat Format)
+ public static int GetBlockDepth(GalImageFormat format)
{
- return GetImageDescriptor(Format).BlockDepth;
+ return GetImageDescriptor(format).BlockDepth;
}
- public static int GetAlignedWidth(GalImage Image)
+ public static int GetAlignedWidth(GalImage image)
{
- ImageDescriptor Desc = GetImageDescriptor(Image.Format);
+ ImageDescriptor desc = GetImageDescriptor(image.Format);
- int AlignMask;
+ int alignMask;
- if (Image.Layout == GalMemoryLayout.BlockLinear)
+ if (image.Layout == GalMemoryLayout.BlockLinear)
{
- AlignMask = Image.TileWidth * (64 / Desc.BytesPerPixel) - 1;
+ alignMask = image.TileWidth * (64 / desc.BytesPerPixel) - 1;
}
else
{
- AlignMask = (32 / Desc.BytesPerPixel) - 1;
+ alignMask = (32 / desc.BytesPerPixel) - 1;
}
- return (Image.Width + AlignMask) & ~AlignMask;
+ return (image.Width + alignMask) & ~alignMask;
}
- public static (int Width, int Height, int Depth) GetImageSizeInBlocks(GalImage Image)
+ public static (int Width, int Height, int Depth) GetImageSizeInBlocks(GalImage image)
{
- ImageDescriptor Desc = GetImageDescriptor(Image.Format);
+ ImageDescriptor desc = GetImageDescriptor(image.Format);
- return (DivRoundUp(Image.Width, Desc.BlockWidth),
- DivRoundUp(Image.Height, Desc.BlockHeight),
- DivRoundUp(Image.Depth, Desc.BlockDepth));
+ return (DivRoundUp(image.Width, desc.BlockWidth),
+ DivRoundUp(image.Height, desc.BlockHeight),
+ DivRoundUp(image.Depth, desc.BlockDepth));
}
- public static int GetBytesPerPixel(GalImageFormat Format)
+ public static int GetBytesPerPixel(GalImageFormat format)
{
- return GetImageDescriptor(Format).BytesPerPixel;
+ return GetImageDescriptor(format).BytesPerPixel;
}
- private static int DivRoundUp(int LHS, int RHS)
+ private static int DivRoundUp(int lhs, int rhs)
{
- return (LHS + (RHS - 1)) / RHS;
+ return (lhs + (rhs - 1)) / rhs;
}
- public static bool HasColor(GalImageFormat Format)
+ public static bool HasColor(GalImageFormat format)
{
- return (GetImageDescriptor(Format).Target & TargetBuffer.Color) != 0;
+ return (GetImageDescriptor(format).Target & TargetBuffer.Color) != 0;
}
- public static bool HasDepth(GalImageFormat Format)
+ public static bool HasDepth(GalImageFormat format)
{
- return (GetImageDescriptor(Format).Target & TargetBuffer.Depth) != 0;
+ return (GetImageDescriptor(format).Target & TargetBuffer.Depth) != 0;
}
- public static bool HasStencil(GalImageFormat Format)
+ public static bool HasStencil(GalImageFormat format)
{
- return (GetImageDescriptor(Format).Target & TargetBuffer.Stencil) != 0;
+ return (GetImageDescriptor(format).Target & TargetBuffer.Stencil) != 0;
}
- public static bool IsCompressed(GalImageFormat Format)
+ public static bool IsCompressed(GalImageFormat format)
{
- ImageDescriptor Desc = GetImageDescriptor(Format);
+ ImageDescriptor desc = GetImageDescriptor(format);
- return (Desc.BlockWidth | Desc.BlockHeight) != 1;
+ return (desc.BlockWidth | desc.BlockHeight) != 1;
}
- private static ImageDescriptor GetImageDescriptor(GalImageFormat Format)
+ private static ImageDescriptor GetImageDescriptor(GalImageFormat format)
{
- GalImageFormat PixelFormat = Format & GalImageFormat.FormatMask;
+ GalImageFormat pixelFormat = format & GalImageFormat.FormatMask;
- if (s_ImageTable.TryGetValue(PixelFormat, out ImageDescriptor Descriptor))
+ if (ImageTable.TryGetValue(pixelFormat, out ImageDescriptor descriptor))
{
- return Descriptor;
+ return descriptor;
}
- throw new NotImplementedException($"Format \"{PixelFormat}\" not implemented!");
+ throw new NotImplementedException($"Format \"{pixelFormat}\" not implemented!");
}
- private static GalImageFormat GetFormatType(GalTextureType Type)
+ private static GalImageFormat GetFormatType(GalTextureType type)
{
- switch (Type)
+ switch (type)
{
case GalTextureType.Snorm: return Snorm;
case GalTextureType.Unorm: return Unorm;
@@ -494,13 +493,13 @@ namespace Ryujinx.Graphics.Texture
case GalTextureType.Uint: return Uint;
case GalTextureType.Float: return Float;
- default: throw new NotImplementedException(((int)Type).ToString());
+ default: throw new NotImplementedException(((int)type).ToString());
}
}
- public static TextureTarget GetTextureTarget(GalTextureTarget GalTextureTarget)
+ public static TextureTarget GetTextureTarget(GalTextureTarget galTextureTarget)
{
- switch (GalTextureTarget)
+ switch (galTextureTarget)
{
case GalTextureTarget.OneD:
return TextureTarget.Texture1D;
@@ -520,13 +519,13 @@ namespace Ryujinx.Graphics.Texture
case GalTextureTarget.CubeArray:
return TextureTarget.TextureCubeMapArray;
default:
- throw new NotSupportedException($"Texture target {GalTextureTarget} currently not supported!");
+ throw new NotSupportedException($"Texture target {galTextureTarget} currently not supported!");
}
}
- public static bool IsArray(GalTextureTarget TextureTarget)
+ public static bool IsArray(GalTextureTarget textureTarget)
{
- switch (TextureTarget)
+ switch (textureTarget)
{
case GalTextureTarget.OneDArray:
case GalTextureTarget.TwoDArray:
@@ -537,9 +536,9 @@ namespace Ryujinx.Graphics.Texture
}
}
- public static int GetCoordsCountTextureTarget(GalTextureTarget TextureTarget)
+ public static int GetCoordsCountTextureTarget(GalTextureTarget textureTarget)
{
- switch (TextureTarget)
+ switch (textureTarget)
{
case GalTextureTarget.OneD:
return 1;
@@ -555,7 +554,7 @@ namespace Ryujinx.Graphics.Texture
case GalTextureTarget.CubeArray:
return 4;
default:
- throw new NotImplementedException($"TextureTarget.{TextureTarget} not implemented yet.");
+ throw new NotImplementedException($"TextureTarget.{textureTarget} not implemented yet.");
}
}
}
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/IntegerEncoded.cs b/Ryujinx.Graphics/Graphics3d/Texture/IntegerEncoded.cs
index 683cb770..e6d67058 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/IntegerEncoded.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/IntegerEncoded.cs
@@ -12,81 +12,81 @@ namespace Ryujinx.Graphics.Texture
Trit
}
- EIntegerEncoding Encoding;
+ EIntegerEncoding _encoding;
public int NumberBits { get; private set; }
public int BitValue { get; private set; }
public int TritValue { get; private set; }
public int QuintValue { get; private set; }
- public IntegerEncoded(EIntegerEncoding _Encoding, int NumBits)
+ public IntegerEncoded(EIntegerEncoding encoding, int numBits)
{
- Encoding = _Encoding;
- NumberBits = NumBits;
+ _encoding = encoding;
+ NumberBits = numBits;
BitValue = 0;
TritValue = 0;
QuintValue = 0;
}
- public bool MatchesEncoding(IntegerEncoded Other)
+ public bool MatchesEncoding(IntegerEncoded other)
{
- return Encoding == Other.Encoding && NumberBits == Other.NumberBits;
+ return _encoding == other._encoding && NumberBits == other.NumberBits;
}
public EIntegerEncoding GetEncoding()
{
- return Encoding;
+ return _encoding;
}
- public int GetBitLength(int NumberVals)
+ public int GetBitLength(int numberVals)
{
- int TotalBits = NumberBits * NumberVals;
- if (Encoding == EIntegerEncoding.Trit)
+ int totalBits = NumberBits * numberVals;
+ if (_encoding == EIntegerEncoding.Trit)
{
- TotalBits += (NumberVals * 8 + 4) / 5;
+ totalBits += (numberVals * 8 + 4) / 5;
}
- else if (Encoding == EIntegerEncoding.Quint)
+ else if (_encoding == EIntegerEncoding.Quint)
{
- TotalBits += (NumberVals * 7 + 2) / 3;
+ totalBits += (numberVals * 7 + 2) / 3;
}
- return TotalBits;
+ return totalBits;
}
- public static IntegerEncoded CreateEncoding(int MaxVal)
+ public static IntegerEncoded CreateEncoding(int maxVal)
{
- while (MaxVal > 0)
+ while (maxVal > 0)
{
- int Check = MaxVal + 1;
+ int check = maxVal + 1;
// Is maxVal a power of two?
- if ((Check & (Check - 1)) == 0)
+ if ((check & (check - 1)) == 0)
{
- return new IntegerEncoded(EIntegerEncoding.JustBits, BitArrayStream.PopCnt(MaxVal));
+ return new IntegerEncoded(EIntegerEncoding.JustBits, BitArrayStream.PopCnt(maxVal));
}
// Is maxVal of the type 3*2^n - 1?
- if ((Check % 3 == 0) && ((Check / 3) & ((Check / 3) - 1)) == 0)
+ if ((check % 3 == 0) && ((check / 3) & ((check / 3) - 1)) == 0)
{
- return new IntegerEncoded(EIntegerEncoding.Trit, BitArrayStream.PopCnt(Check / 3 - 1));
+ return new IntegerEncoded(EIntegerEncoding.Trit, BitArrayStream.PopCnt(check / 3 - 1));
}
// Is maxVal of the type 5*2^n - 1?
- if ((Check % 5 == 0) && ((Check / 5) & ((Check / 5) - 1)) == 0)
+ if ((check % 5 == 0) && ((check / 5) & ((check / 5) - 1)) == 0)
{
- return new IntegerEncoded(EIntegerEncoding.Quint, BitArrayStream.PopCnt(Check / 5 - 1));
+ return new IntegerEncoded(EIntegerEncoding.Quint, BitArrayStream.PopCnt(check / 5 - 1));
}
// Apparently it can't be represented with a bounded integer sequence...
// just iterate.
- MaxVal--;
+ maxVal--;
}
return new IntegerEncoded(EIntegerEncoding.JustBits, 0);
}
public static void DecodeTritBlock(
- BitArrayStream BitStream,
- List<IntegerEncoded> ListIntegerEncoded,
- int NumberBitsPerValue)
+ BitArrayStream bitStream,
+ List<IntegerEncoded> listIntegerEncoded,
+ int numberBitsPerValue)
{
// Implement the algorithm in section C.2.12
int[] m = new int[5];
@@ -95,170 +95,170 @@ namespace Ryujinx.Graphics.Texture
// Read the trit encoded block according to
// table C.2.14
- m[0] = BitStream.ReadBits(NumberBitsPerValue);
- T = BitStream.ReadBits(2);
- m[1] = BitStream.ReadBits(NumberBitsPerValue);
- T |= BitStream.ReadBits(2) << 2;
- m[2] = BitStream.ReadBits(NumberBitsPerValue);
- T |= BitStream.ReadBits(1) << 4;
- m[3] = BitStream.ReadBits(NumberBitsPerValue);
- T |= BitStream.ReadBits(2) << 5;
- m[4] = BitStream.ReadBits(NumberBitsPerValue);
- T |= BitStream.ReadBits(1) << 7;
+ m[0] = bitStream.ReadBits(numberBitsPerValue);
+ T = bitStream.ReadBits(2);
+ m[1] = bitStream.ReadBits(numberBitsPerValue);
+ T |= bitStream.ReadBits(2) << 2;
+ m[2] = bitStream.ReadBits(numberBitsPerValue);
+ T |= bitStream.ReadBits(1) << 4;
+ m[3] = bitStream.ReadBits(numberBitsPerValue);
+ T |= bitStream.ReadBits(2) << 5;
+ m[4] = bitStream.ReadBits(numberBitsPerValue);
+ T |= bitStream.ReadBits(1) << 7;
- int C = 0;
+ int c = 0;
- BitArrayStream Tb = new BitArrayStream(new BitArray(new int[] { T }));
- if (Tb.ReadBits(2, 4) == 7)
+ BitArrayStream tb = new BitArrayStream(new BitArray(new int[] { T }));
+ if (tb.ReadBits(2, 4) == 7)
{
- C = (Tb.ReadBits(5, 7) << 2) | Tb.ReadBits(0, 1);
+ c = (tb.ReadBits(5, 7) << 2) | tb.ReadBits(0, 1);
t[4] = t[3] = 2;
}
else
{
- C = Tb.ReadBits(0, 4);
- if (Tb.ReadBits(5, 6) == 3)
+ c = tb.ReadBits(0, 4);
+ if (tb.ReadBits(5, 6) == 3)
{
t[4] = 2;
- t[3] = Tb.ReadBit(7);
+ t[3] = tb.ReadBit(7);
}
else
{
- t[4] = Tb.ReadBit(7);
- t[3] = Tb.ReadBits(5, 6);
+ t[4] = tb.ReadBit(7);
+ t[3] = tb.ReadBits(5, 6);
}
}
- BitArrayStream Cb = new BitArrayStream(new BitArray(new int[] { C }));
- if (Cb.ReadBits(0, 1) == 3)
+ BitArrayStream cb = new BitArrayStream(new BitArray(new int[] { c }));
+ if (cb.ReadBits(0, 1) == 3)
{
t[2] = 2;
- t[1] = Cb.ReadBit(4);
- t[0] = (Cb.ReadBit(3) << 1) | (Cb.ReadBit(2) & ~Cb.ReadBit(3));
+ t[1] = cb.ReadBit(4);
+ t[0] = (cb.ReadBit(3) << 1) | (cb.ReadBit(2) & ~cb.ReadBit(3));
}
- else if (Cb.ReadBits(2, 3) == 3)
+ else if (cb.ReadBits(2, 3) == 3)
{
t[2] = 2;
t[1] = 2;
- t[0] = Cb.ReadBits(0, 1);
+ t[0] = cb.ReadBits(0, 1);
}
else
{
- t[2] = Cb.ReadBit(4);
- t[1] = Cb.ReadBits(2, 3);
- t[0] = (Cb.ReadBit(1) << 1) | (Cb.ReadBit(0) & ~Cb.ReadBit(1));
+ t[2] = cb.ReadBit(4);
+ t[1] = cb.ReadBits(2, 3);
+ t[0] = (cb.ReadBit(1) << 1) | (cb.ReadBit(0) & ~cb.ReadBit(1));
}
for (int i = 0; i < 5; i++)
{
- IntegerEncoded IntEncoded = new IntegerEncoded(EIntegerEncoding.Trit, NumberBitsPerValue)
+ IntegerEncoded intEncoded = new IntegerEncoded(EIntegerEncoding.Trit, numberBitsPerValue)
{
BitValue = m[i],
TritValue = t[i]
};
- ListIntegerEncoded.Add(IntEncoded);
+ listIntegerEncoded.Add(intEncoded);
}
}
public static void DecodeQuintBlock(
- BitArrayStream BitStream,
- List<IntegerEncoded> ListIntegerEncoded,
- int NumberBitsPerValue)
+ BitArrayStream bitStream,
+ List<IntegerEncoded> listIntegerEncoded,
+ int numberBitsPerValue)
{
// Implement the algorithm in section C.2.12
int[] m = new int[3];
- int[] q = new int[3];
- int Q;
+ int[] qa = new int[3];
+ int q;
// Read the trit encoded block according to
// table C.2.15
- m[0] = BitStream.ReadBits(NumberBitsPerValue);
- Q = BitStream.ReadBits(3);
- m[1] = BitStream.ReadBits(NumberBitsPerValue);
- Q |= BitStream.ReadBits(2) << 3;
- m[2] = BitStream.ReadBits(NumberBitsPerValue);
- Q |= BitStream.ReadBits(2) << 5;
+ m[0] = bitStream.ReadBits(numberBitsPerValue);
+ q = bitStream.ReadBits(3);
+ m[1] = bitStream.ReadBits(numberBitsPerValue);
+ q |= bitStream.ReadBits(2) << 3;
+ m[2] = bitStream.ReadBits(numberBitsPerValue);
+ q |= bitStream.ReadBits(2) << 5;
- BitArrayStream Qb = new BitArrayStream(new BitArray(new int[] { Q }));
- if (Qb.ReadBits(1, 2) == 3 && Qb.ReadBits(5, 6) == 0)
+ BitArrayStream qb = new BitArrayStream(new BitArray(new int[] { q }));
+ if (qb.ReadBits(1, 2) == 3 && qb.ReadBits(5, 6) == 0)
{
- q[0] = q[1] = 4;
- q[2] = (Qb.ReadBit(0) << 2) | ((Qb.ReadBit(4) & ~Qb.ReadBit(0)) << 1) | (Qb.ReadBit(3) & ~Qb.ReadBit(0));
+ qa[0] = qa[1] = 4;
+ qa[2] = (qb.ReadBit(0) << 2) | ((qb.ReadBit(4) & ~qb.ReadBit(0)) << 1) | (qb.ReadBit(3) & ~qb.ReadBit(0));
}
else
{
- int C = 0;
- if (Qb.ReadBits(1, 2) == 3)
+ int c = 0;
+ if (qb.ReadBits(1, 2) == 3)
{
- q[2] = 4;
- C = (Qb.ReadBits(3, 4) << 3) | ((~Qb.ReadBits(5, 6) & 3) << 1) | Qb.ReadBit(0);
+ qa[2] = 4;
+ c = (qb.ReadBits(3, 4) << 3) | ((~qb.ReadBits(5, 6) & 3) << 1) | qb.ReadBit(0);
}
else
{
- q[2] = Qb.ReadBits(5, 6);
- C = Qb.ReadBits(0, 4);
+ qa[2] = qb.ReadBits(5, 6);
+ c = qb.ReadBits(0, 4);
}
- BitArrayStream Cb = new BitArrayStream(new BitArray(new int[] { C }));
- if (Cb.ReadBits(0, 2) == 5)
+ BitArrayStream cb = new BitArrayStream(new BitArray(new int[] { c }));
+ if (cb.ReadBits(0, 2) == 5)
{
- q[1] = 4;
- q[0] = Cb.ReadBits(3, 4);
+ qa[1] = 4;
+ qa[0] = cb.ReadBits(3, 4);
}
else
{
- q[1] = Cb.ReadBits(3, 4);
- q[0] = Cb.ReadBits(0, 2);
+ qa[1] = cb.ReadBits(3, 4);
+ qa[0] = cb.ReadBits(0, 2);
}
}
for (int i = 0; i < 3; i++)
{
- IntegerEncoded IntEncoded = new IntegerEncoded(EIntegerEncoding.Quint, NumberBitsPerValue)
+ IntegerEncoded intEncoded = new IntegerEncoded(EIntegerEncoding.Quint, numberBitsPerValue)
{
BitValue = m[i],
- QuintValue = q[i]
+ QuintValue = qa[i]
};
- ListIntegerEncoded.Add(IntEncoded);
+ listIntegerEncoded.Add(intEncoded);
}
}
public static void DecodeIntegerSequence(
- List<IntegerEncoded> DecodeIntegerSequence,
- BitArrayStream BitStream,
- int MaxRange,
- int NumberValues)
+ List<IntegerEncoded> decodeIntegerSequence,
+ BitArrayStream bitStream,
+ int maxRange,
+ int numberValues)
{
// Determine encoding parameters
- IntegerEncoded IntEncoded = CreateEncoding(MaxRange);
+ IntegerEncoded intEncoded = CreateEncoding(maxRange);
// Start decoding
- int NumberValuesDecoded = 0;
- while (NumberValuesDecoded < NumberValues)
+ int numberValuesDecoded = 0;
+ while (numberValuesDecoded < numberValues)
{
- switch (IntEncoded.GetEncoding())
+ switch (intEncoded.GetEncoding())
{
case EIntegerEncoding.Quint:
{
- DecodeQuintBlock(BitStream, DecodeIntegerSequence, IntEncoded.NumberBits);
- NumberValuesDecoded += 3;
+ DecodeQuintBlock(bitStream, decodeIntegerSequence, intEncoded.NumberBits);
+ numberValuesDecoded += 3;
break;
}
case EIntegerEncoding.Trit:
{
- DecodeTritBlock(BitStream, DecodeIntegerSequence, IntEncoded.NumberBits);
- NumberValuesDecoded += 5;
+ DecodeTritBlock(bitStream, decodeIntegerSequence, intEncoded.NumberBits);
+ numberValuesDecoded += 5;
break;
}
case EIntegerEncoding.JustBits:
{
- IntEncoded.BitValue = BitStream.ReadBits(IntEncoded.NumberBits);
- DecodeIntegerSequence.Add(IntEncoded);
- NumberValuesDecoded++;
+ intEncoded.BitValue = bitStream.ReadBits(intEncoded.NumberBits);
+ decodeIntegerSequence.Add(intEncoded);
+ numberValuesDecoded++;
break;
}
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/LinearSwizzle.cs b/Ryujinx.Graphics/Graphics3d/Texture/LinearSwizzle.cs
index e6509baa..fb1bd098 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/LinearSwizzle.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/LinearSwizzle.cs
@@ -4,42 +4,42 @@ namespace Ryujinx.Graphics.Texture
{
class LinearSwizzle : ISwizzle
{
- private int Pitch;
- private int Bpp;
+ private int _pitch;
+ private int _bpp;
- private int SliceSize;
+ private int _sliceSize;
- public LinearSwizzle(int Pitch, int Bpp, int Width, int Height)
+ public LinearSwizzle(int pitch, int bpp, int width, int height)
{
- this.Pitch = Pitch;
- this.Bpp = Bpp;
- SliceSize = Width * Height * Bpp;
+ _pitch = pitch;
+ _bpp = bpp;
+ _sliceSize = width * height * bpp;
}
- public void SetMipLevel(int Level)
+ public void SetMipLevel(int level)
{
throw new NotImplementedException();
}
- public int GetMipOffset(int Level)
+ public int GetMipOffset(int level)
{
- if (Level == 1)
- return SliceSize;
+ if (level == 1)
+ return _sliceSize;
throw new NotImplementedException();
}
- public int GetImageSize(int MipsCount)
+ public int GetImageSize(int mipsCount)
{
- int Size = GetMipOffset(MipsCount);
+ int size = GetMipOffset(mipsCount);
- Size = (Size + 0x1fff) & ~0x1fff;
+ size = (size + 0x1fff) & ~0x1fff;
- return Size;
+ return size;
}
- public int GetSwizzleOffset(int X, int Y, int Z)
+ public int GetSwizzleOffset(int x, int y, int z)
{
- return Z * SliceSize + X * Bpp + Y * Pitch;
+ return z * _sliceSize + x * _bpp + y * _pitch;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/TextureFactory.cs b/Ryujinx.Graphics/Graphics3d/Texture/TextureFactory.cs
index a2ce86f5..28c90502 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/TextureFactory.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/TextureFactory.cs
@@ -6,161 +6,161 @@ namespace Ryujinx.Graphics.Texture
{
static class TextureFactory
{
- public static GalImage MakeTexture(NvGpuVmm Vmm, long TicPosition)
+ public static GalImage MakeTexture(NvGpuVmm vmm, long ticPosition)
{
- int[] Tic = ReadWords(Vmm, TicPosition, 8);
+ int[] tic = ReadWords(vmm, ticPosition, 8);
- GalImageFormat Format = GetImageFormat(Tic);
+ GalImageFormat format = GetImageFormat(tic);
- GalTextureTarget TextureTarget = (GalTextureTarget)((Tic[4] >> 23) & 0xF);
+ GalTextureTarget textureTarget = (GalTextureTarget)((tic[4] >> 23) & 0xF);
- GalTextureSource XSource = (GalTextureSource)((Tic[0] >> 19) & 7);
- GalTextureSource YSource = (GalTextureSource)((Tic[0] >> 22) & 7);
- GalTextureSource ZSource = (GalTextureSource)((Tic[0] >> 25) & 7);
- GalTextureSource WSource = (GalTextureSource)((Tic[0] >> 28) & 7);
+ GalTextureSource xSource = (GalTextureSource)((tic[0] >> 19) & 7);
+ GalTextureSource ySource = (GalTextureSource)((tic[0] >> 22) & 7);
+ GalTextureSource zSource = (GalTextureSource)((tic[0] >> 25) & 7);
+ GalTextureSource wSource = (GalTextureSource)((tic[0] >> 28) & 7);
- TextureSwizzle Swizzle = (TextureSwizzle)((Tic[2] >> 21) & 7);
+ TextureSwizzle swizzle = (TextureSwizzle)((tic[2] >> 21) & 7);
- int MaxMipmapLevel = (Tic[3] >> 28) & 0xF + 1;
+ int maxMipmapLevel = (tic[3] >> 28) & 0xF + 1;
- GalMemoryLayout Layout;
+ GalMemoryLayout layout;
- if (Swizzle == TextureSwizzle.BlockLinear ||
- Swizzle == TextureSwizzle.BlockLinearColorKey)
+ if (swizzle == TextureSwizzle.BlockLinear ||
+ swizzle == TextureSwizzle.BlockLinearColorKey)
{
- Layout = GalMemoryLayout.BlockLinear;
+ layout = GalMemoryLayout.BlockLinear;
}
else
{
- Layout = GalMemoryLayout.Pitch;
+ layout = GalMemoryLayout.Pitch;
}
- int GobBlockHeightLog2 = (Tic[3] >> 3) & 7;
- int GobBlockDepthLog2 = (Tic[3] >> 6) & 7;
- int TileWidthLog2 = (Tic[3] >> 10) & 7;
+ int gobBlockHeightLog2 = (tic[3] >> 3) & 7;
+ int gobBlockDepthLog2 = (tic[3] >> 6) & 7;
+ int tileWidthLog2 = (tic[3] >> 10) & 7;
- int GobBlockHeight = 1 << GobBlockHeightLog2;
- int GobBlockDepth = 1 << GobBlockDepthLog2;
- int TileWidth = 1 << TileWidthLog2;
+ int gobBlockHeight = 1 << gobBlockHeightLog2;
+ int gobBlockDepth = 1 << gobBlockDepthLog2;
+ int tileWidth = 1 << tileWidthLog2;
- int Width = ((Tic[4] >> 0) & 0xffff) + 1;
- int Height = ((Tic[5] >> 0) & 0xffff) + 1;
- int Depth = ((Tic[5] >> 16) & 0x3fff) + 1;
+ int width = ((tic[4] >> 0) & 0xffff) + 1;
+ int height = ((tic[5] >> 0) & 0xffff) + 1;
+ int depth = ((tic[5] >> 16) & 0x3fff) + 1;
- int LayoutCount = 1;
+ int layoutCount = 1;
// TODO: check this
- if (ImageUtils.IsArray(TextureTarget))
+ if (ImageUtils.IsArray(textureTarget))
{
- LayoutCount = Depth;
- Depth = 1;
+ layoutCount = depth;
+ depth = 1;
}
- if (TextureTarget == GalTextureTarget.OneD)
+ if (textureTarget == GalTextureTarget.OneD)
{
- Height = 1;
+ height = 1;
}
- if (TextureTarget == GalTextureTarget.TwoD || TextureTarget == GalTextureTarget.OneD)
+ if (textureTarget == GalTextureTarget.TwoD || textureTarget == GalTextureTarget.OneD)
{
- Depth = 1;
+ depth = 1;
}
- else if (TextureTarget == GalTextureTarget.CubeMap)
+ else if (textureTarget == GalTextureTarget.CubeMap)
{
// FIXME: This is a bit hacky but I guess it's fine for now
- LayoutCount = 6;
- Depth = 1;
+ layoutCount = 6;
+ depth = 1;
}
- else if (TextureTarget == GalTextureTarget.CubeArray)
+ else if (textureTarget == GalTextureTarget.CubeArray)
{
// FIXME: This is a really really hacky but I guess it's fine for now
- LayoutCount *= 6;
- Depth = 1;
+ layoutCount *= 6;
+ depth = 1;
}
- GalImage Image = new GalImage(
- Width,
- Height,
- Depth,
- LayoutCount,
- TileWidth,
- GobBlockHeight,
- GobBlockDepth,
- Layout,
- Format,
- TextureTarget,
- MaxMipmapLevel,
- XSource,
- YSource,
- ZSource,
- WSource);
-
- if (Layout == GalMemoryLayout.Pitch)
+ GalImage image = new GalImage(
+ width,
+ height,
+ depth,
+ layoutCount,
+ tileWidth,
+ gobBlockHeight,
+ gobBlockDepth,
+ layout,
+ format,
+ textureTarget,
+ maxMipmapLevel,
+ xSource,
+ ySource,
+ zSource,
+ wSource);
+
+ if (layout == GalMemoryLayout.Pitch)
{
- Image.Pitch = (Tic[3] & 0xffff) << 5;
+ image.Pitch = (tic[3] & 0xffff) << 5;
}
- return Image;
+ return image;
}
- public static GalTextureSampler MakeSampler(NvGpu Gpu, NvGpuVmm Vmm, long TscPosition)
+ public static GalTextureSampler MakeSampler(NvGpu gpu, NvGpuVmm vmm, long tscPosition)
{
- int[] Tsc = ReadWords(Vmm, TscPosition, 8);
+ int[] tsc = ReadWords(vmm, tscPosition, 8);
- GalTextureWrap AddressU = (GalTextureWrap)((Tsc[0] >> 0) & 7);
- GalTextureWrap AddressV = (GalTextureWrap)((Tsc[0] >> 3) & 7);
- GalTextureWrap AddressP = (GalTextureWrap)((Tsc[0] >> 6) & 7);
+ GalTextureWrap addressU = (GalTextureWrap)((tsc[0] >> 0) & 7);
+ GalTextureWrap addressV = (GalTextureWrap)((tsc[0] >> 3) & 7);
+ GalTextureWrap addressP = (GalTextureWrap)((tsc[0] >> 6) & 7);
- bool DepthCompare = ((Tsc[0] >> 9) & 1) == 1;
+ bool depthCompare = ((tsc[0] >> 9) & 1) == 1;
- DepthCompareFunc DepthCompareFunc = (DepthCompareFunc)((Tsc[0] >> 10) & 7);
+ DepthCompareFunc depthCompareFunc = (DepthCompareFunc)((tsc[0] >> 10) & 7);
- GalTextureFilter MagFilter = (GalTextureFilter) ((Tsc[1] >> 0) & 3);
- GalTextureFilter MinFilter = (GalTextureFilter) ((Tsc[1] >> 4) & 3);
- GalTextureMipFilter MipFilter = (GalTextureMipFilter)((Tsc[1] >> 6) & 3);
+ GalTextureFilter magFilter = (GalTextureFilter) ((tsc[1] >> 0) & 3);
+ GalTextureFilter minFilter = (GalTextureFilter) ((tsc[1] >> 4) & 3);
+ GalTextureMipFilter mipFilter = (GalTextureMipFilter)((tsc[1] >> 6) & 3);
- GalColorF BorderColor = new GalColorF(
- BitConverter.Int32BitsToSingle(Tsc[4]),
- BitConverter.Int32BitsToSingle(Tsc[5]),
- BitConverter.Int32BitsToSingle(Tsc[6]),
- BitConverter.Int32BitsToSingle(Tsc[7]));
+ GalColorF borderColor = new GalColorF(
+ BitConverter.Int32BitsToSingle(tsc[4]),
+ BitConverter.Int32BitsToSingle(tsc[5]),
+ BitConverter.Int32BitsToSingle(tsc[6]),
+ BitConverter.Int32BitsToSingle(tsc[7]));
return new GalTextureSampler(
- AddressU,
- AddressV,
- AddressP,
- MinFilter,
- MagFilter,
- MipFilter,
- BorderColor,
- DepthCompare,
- DepthCompareFunc);
+ addressU,
+ addressV,
+ addressP,
+ minFilter,
+ magFilter,
+ mipFilter,
+ borderColor,
+ depthCompare,
+ depthCompareFunc);
}
- private static GalImageFormat GetImageFormat(int[] Tic)
+ private static GalImageFormat GetImageFormat(int[] tic)
{
- GalTextureType RType = (GalTextureType)((Tic[0] >> 7) & 7);
- GalTextureType GType = (GalTextureType)((Tic[0] >> 10) & 7);
- GalTextureType BType = (GalTextureType)((Tic[0] >> 13) & 7);
- GalTextureType AType = (GalTextureType)((Tic[0] >> 16) & 7);
+ GalTextureType rType = (GalTextureType)((tic[0] >> 7) & 7);
+ GalTextureType gType = (GalTextureType)((tic[0] >> 10) & 7);
+ GalTextureType bType = (GalTextureType)((tic[0] >> 13) & 7);
+ GalTextureType aType = (GalTextureType)((tic[0] >> 16) & 7);
- GalTextureFormat Format = (GalTextureFormat)(Tic[0] & 0x7f);
+ GalTextureFormat format = (GalTextureFormat)(tic[0] & 0x7f);
- bool ConvSrgb = ((Tic[4] >> 22) & 1) != 0;
+ bool convSrgb = ((tic[4] >> 22) & 1) != 0;
- return ImageUtils.ConvertTexture(Format, RType, GType, BType, AType, ConvSrgb);
+ return ImageUtils.ConvertTexture(format, rType, gType, bType, aType, convSrgb);
}
- private static int[] ReadWords(NvGpuVmm Vmm, long Position, int Count)
+ private static int[] ReadWords(NvGpuVmm vmm, long position, int count)
{
- int[] Words = new int[Count];
+ int[] words = new int[count];
- for (int Index = 0; Index < Count; Index++, Position += 4)
+ for (int index = 0; index < count; index++, position += 4)
{
- Words[Index] = Vmm.ReadInt32(Position);
+ words[index] = vmm.ReadInt32(position);
}
- return Words;
+ return words;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs b/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs
index 33ccb0aa..1de81008 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/TextureHelper.cs
@@ -7,47 +7,47 @@ namespace Ryujinx.Graphics.Texture
{
static class TextureHelper
{
- public static ISwizzle GetSwizzle(GalImage Image)
+ public static ISwizzle GetSwizzle(GalImage image)
{
- int BlockWidth = ImageUtils.GetBlockWidth (Image.Format);
- int BlockHeight = ImageUtils.GetBlockHeight (Image.Format);
- int BlockDepth = ImageUtils.GetBlockDepth (Image.Format);
- int BytesPerPixel = ImageUtils.GetBytesPerPixel(Image.Format);
+ int blockWidth = ImageUtils.GetBlockWidth (image.Format);
+ int blockHeight = ImageUtils.GetBlockHeight (image.Format);
+ int blockDepth = ImageUtils.GetBlockDepth (image.Format);
+ int bytesPerPixel = ImageUtils.GetBytesPerPixel(image.Format);
- int Width = BitUtils.DivRoundUp(Image.Width, BlockWidth);
- int Height = BitUtils.DivRoundUp(Image.Height, BlockHeight);
- int Depth = BitUtils.DivRoundUp(Image.Depth, BlockDepth);
+ int width = BitUtils.DivRoundUp(image.Width, blockWidth);
+ int height = BitUtils.DivRoundUp(image.Height, blockHeight);
+ int depth = BitUtils.DivRoundUp(image.Depth, blockDepth);
- if (Image.Layout == GalMemoryLayout.BlockLinear)
+ if (image.Layout == GalMemoryLayout.BlockLinear)
{
- int AlignMask = Image.TileWidth * (64 / BytesPerPixel) - 1;
+ int alignMask = image.TileWidth * (64 / bytesPerPixel) - 1;
- Width = (Width + AlignMask) & ~AlignMask;
+ width = (width + alignMask) & ~alignMask;
return new BlockLinearSwizzle(
- Width,
- Height,
- Depth,
- Image.GobBlockHeight,
- Image.GobBlockDepth,
- BytesPerPixel);
+ width,
+ height,
+ depth,
+ image.GobBlockHeight,
+ image.GobBlockDepth,
+ bytesPerPixel);
}
else
{
- return new LinearSwizzle(Image.Pitch, BytesPerPixel, Width, Height);
+ return new LinearSwizzle(image.Pitch, bytesPerPixel, width, height);
}
}
public static (MemoryManager Memory, long Position) GetMemoryAndPosition(
- IMemory Memory,
- long Position)
+ IMemory memory,
+ long position)
{
- if (Memory is NvGpuVmm Vmm)
+ if (memory is NvGpuVmm vmm)
{
- return (Vmm.Memory, Vmm.GetPhysicalAddress(Position));
+ return (vmm.Memory, vmm.GetPhysicalAddress(position));
}
- return ((MemoryManager)Memory, Position);
+ return ((MemoryManager)memory, position);
}
}
}
diff --git a/Ryujinx.Graphics/Graphics3d/Texture/TextureSwizzle.cs b/Ryujinx.Graphics/Graphics3d/Texture/TextureSwizzle.cs
index c67a5367..2cc426ab 100644
--- a/Ryujinx.Graphics/Graphics3d/Texture/TextureSwizzle.cs
+++ b/Ryujinx.Graphics/Graphics3d/Texture/TextureSwizzle.cs
@@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.Texture
{
public enum TextureSwizzle
{
- _1dBuffer = 0,
+ _1DBuffer = 0,
PitchColorKey = 1,
Pitch = 2,
BlockLinear = 3,
diff --git a/Ryujinx.Graphics/Memory/NvGpuVmm.cs b/Ryujinx.Graphics/Memory/NvGpuVmm.cs
index 7fdef473..ac1b765a 100644
--- a/Ryujinx.Graphics/Memory/NvGpuVmm.cs
+++ b/Ryujinx.Graphics/Memory/NvGpuVmm.cs
@@ -8,177 +8,177 @@ namespace Ryujinx.Graphics.Memory
{
public const long AddrSize = 1L << 40;
- private const int PTLvl0Bits = 14;
- private const int PTLvl1Bits = 14;
- private const int PTPageBits = 12;
+ private const int PtLvl0Bits = 14;
+ private const int PtLvl1Bits = 14;
+ private const int PtPageBits = 12;
- private const int PTLvl0Size = 1 << PTLvl0Bits;
- private const int PTLvl1Size = 1 << PTLvl1Bits;
- public const int PageSize = 1 << PTPageBits;
+ private const int PtLvl0Size = 1 << PtLvl0Bits;
+ private const int PtLvl1Size = 1 << PtLvl1Bits;
+ public const int PageSize = 1 << PtPageBits;
- private const int PTLvl0Mask = PTLvl0Size - 1;
- private const int PTLvl1Mask = PTLvl1Size - 1;
+ private const int PtLvl0Mask = PtLvl0Size - 1;
+ private const int PtLvl1Mask = PtLvl1Size - 1;
public const int PageMask = PageSize - 1;
- private const int PTLvl0Bit = PTPageBits + PTLvl1Bits;
- private const int PTLvl1Bit = PTPageBits;
+ private const int PtLvl0Bit = PtPageBits + PtLvl1Bits;
+ private const int PtLvl1Bit = PtPageBits;
public MemoryManager Memory { get; private set; }
- private NvGpuVmmCache Cache;
+ private NvGpuVmmCache _cache;
private const long PteUnmapped = -1;
private const long PteReserved = -2;
- private long[][] PageTable;
+ private long[][] _pageTable;
- public NvGpuVmm(MemoryManager Memory)
+ public NvGpuVmm(MemoryManager memory)
{
- this.Memory = Memory;
+ Memory = memory;
- Cache = new NvGpuVmmCache(Memory);
+ _cache = new NvGpuVmmCache(memory);
- PageTable = new long[PTLvl0Size][];
+ _pageTable = new long[PtLvl0Size][];
}
- public long Map(long PA, long VA, long Size)
+ public long Map(long pa, long va, long size)
{
- lock (PageTable)
+ lock (_pageTable)
{
- for (long Offset = 0; Offset < Size; Offset += PageSize)
+ for (long offset = 0; offset < size; offset += PageSize)
{
- SetPte(VA + Offset, PA + Offset);
+ SetPte(va + offset, pa + offset);
}
}
- return VA;
+ return va;
}
- public long Map(long PA, long Size)
+ public long Map(long pa, long size)
{
- lock (PageTable)
+ lock (_pageTable)
{
- long VA = GetFreePosition(Size);
+ long va = GetFreePosition(size);
- if (VA != -1)
+ if (va != -1)
{
- for (long Offset = 0; Offset < Size; Offset += PageSize)
+ for (long offset = 0; offset < size; offset += PageSize)
{
- SetPte(VA + Offset, PA + Offset);
+ SetPte(va + offset, pa + offset);
}
}
- return VA;
+ return va;
}
}
- public long MapLow(long PA, long Size)
+ public long MapLow(long pa, long size)
{
- lock (PageTable)
+ lock (_pageTable)
{
- long VA = GetFreePosition(Size, 1, PageSize);
+ long va = GetFreePosition(size, 1, PageSize);
- if (VA != -1 && (ulong)VA <= uint.MaxValue && (ulong)(VA + Size) <= uint.MaxValue)
+ if (va != -1 && (ulong)va <= uint.MaxValue && (ulong)(va + size) <= uint.MaxValue)
{
- for (long Offset = 0; Offset < Size; Offset += PageSize)
+ for (long offset = 0; offset < size; offset += PageSize)
{
- SetPte(VA + Offset, PA + Offset);
+ SetPte(va + offset, pa + offset);
}
}
else
{
- VA = -1;
+ va = -1;
}
- return VA;
+ return va;
}
}
- public long ReserveFixed(long VA, long Size)
+ public long ReserveFixed(long va, long size)
{
- lock (PageTable)
+ lock (_pageTable)
{
- for (long Offset = 0; Offset < Size; Offset += PageSize)
+ for (long offset = 0; offset < size; offset += PageSize)
{
- if (IsPageInUse(VA + Offset))
+ if (IsPageInUse(va + offset))
{
return -1;
}
}
- for (long Offset = 0; Offset < Size; Offset += PageSize)
+ for (long offset = 0; offset < size; offset += PageSize)
{
- SetPte(VA + Offset, PteReserved);
+ SetPte(va + offset, PteReserved);
}
}
- return VA;
+ return va;
}
- public long Reserve(long Size, long Align)
+ public long Reserve(long size, long align)
{
- lock (PageTable)
+ lock (_pageTable)
{
- long Position = GetFreePosition(Size, Align);
+ long position = GetFreePosition(size, align);
- if (Position != -1)
+ if (position != -1)
{
- for (long Offset = 0; Offset < Size; Offset += PageSize)
+ for (long offset = 0; offset < size; offset += PageSize)
{
- SetPte(Position + Offset, PteReserved);
+ SetPte(position + offset, PteReserved);
}
}
- return Position;
+ return position;
}
}
- public void Free(long VA, long Size)
+ public void Free(long va, long size)
{
- lock (PageTable)
+ lock (_pageTable)
{
- for (long Offset = 0; Offset < Size; Offset += PageSize)
+ for (long offset = 0; offset < size; offset += PageSize)
{
- SetPte(VA + Offset, PteUnmapped);
+ SetPte(va + offset, PteUnmapped);
}
}
}
- private long GetFreePosition(long Size, long Align = 1, long Start = 1L << 32)
+ private long GetFreePosition(long size, long align = 1, long start = 1L << 32)
{
//Note: Address 0 is not considered valid by the driver,
//when 0 is returned it's considered a mapping error.
- long Position = Start;
- long FreeSize = 0;
+ long position = start;
+ long freeSize = 0;
- if (Align < 1)
+ if (align < 1)
{
- Align = 1;
+ align = 1;
}
- Align = (Align + PageMask) & ~PageMask;
+ align = (align + PageMask) & ~PageMask;
- while (Position + FreeSize < AddrSize)
+ while (position + freeSize < AddrSize)
{
- if (!IsPageInUse(Position + FreeSize))
+ if (!IsPageInUse(position + freeSize))
{
- FreeSize += PageSize;
+ freeSize += PageSize;
- if (FreeSize >= Size)
+ if (freeSize >= size)
{
- return Position;
+ return position;
}
}
else
{
- Position += FreeSize + PageSize;
- FreeSize = 0;
+ position += freeSize + PageSize;
+ freeSize = 0;
- long Remainder = Position % Align;
+ long remainder = position % align;
- if (Remainder != 0)
+ if (remainder != 0)
{
- Position = (Position - Remainder) + Align;
+ position = (position - remainder) + align;
}
}
}
@@ -186,23 +186,23 @@ namespace Ryujinx.Graphics.Memory
return -1;
}
- public long GetPhysicalAddress(long VA)
+ public long GetPhysicalAddress(long va)
{
- long BasePos = GetPte(VA);
+ long basePos = GetPte(va);
- if (BasePos < 0)
+ if (basePos < 0)
{
return -1;
}
- return BasePos + (VA & PageMask);
+ return basePos + (va & PageMask);
}
- public bool IsRegionFree(long VA, long Size)
+ public bool IsRegionFree(long va, long size)
{
- for (long Offset = 0; Offset < Size; Offset += PageSize)
+ for (long offset = 0; offset < size; offset += PageSize)
{
- if (IsPageInUse(VA + Offset))
+ if (IsPageInUse(va + offset))
{
return false;
}
@@ -211,189 +211,189 @@ namespace Ryujinx.Graphics.Memory
return true;
}
- private bool IsPageInUse(long VA)
+ private bool IsPageInUse(long va)
{
- if (VA >> PTLvl0Bits + PTLvl1Bits + PTPageBits != 0)
+ if (va >> PtLvl0Bits + PtLvl1Bits + PtPageBits != 0)
{
return false;
}
- long L0 = (VA >> PTLvl0Bit) & PTLvl0Mask;
- long L1 = (VA >> PTLvl1Bit) & PTLvl1Mask;
+ long l0 = (va >> PtLvl0Bit) & PtLvl0Mask;
+ long l1 = (va >> PtLvl1Bit) & PtLvl1Mask;
- if (PageTable[L0] == null)
+ if (_pageTable[l0] == null)
{
return false;
}
- return PageTable[L0][L1] != PteUnmapped;
+ return _pageTable[l0][l1] != PteUnmapped;
}
- private long GetPte(long Position)
+ private long GetPte(long position)
{
- long L0 = (Position >> PTLvl0Bit) & PTLvl0Mask;
- long L1 = (Position >> PTLvl1Bit) & PTLvl1Mask;
+ long l0 = (position >> PtLvl0Bit) & PtLvl0Mask;
+ long l1 = (position >> PtLvl1Bit) & PtLvl1Mask;
- if (PageTable[L0] == null)
+ if (_pageTable[l0] == null)
{
return -1;
}
- return PageTable[L0][L1];
+ return _pageTable[l0][l1];
}
- private void SetPte(long Position, long TgtAddr)
+ private void SetPte(long position, long tgtAddr)
{
- long L0 = (Position >> PTLvl0Bit) & PTLvl0Mask;
- long L1 = (Position >> PTLvl1Bit) & PTLvl1Mask;
+ long l0 = (position >> PtLvl0Bit) & PtLvl0Mask;
+ long l1 = (position >> PtLvl1Bit) & PtLvl1Mask;
- if (PageTable[L0] == null)
+ if (_pageTable[l0] == null)
{
- PageTable[L0] = new long[PTLvl1Size];
+ _pageTable[l0] = new long[PtLvl1Size];
- for (int Index = 0; Index < PTLvl1Size; Index++)
+ for (int index = 0; index < PtLvl1Size; index++)
{
- PageTable[L0][Index] = PteUnmapped;
+ _pageTable[l0][index] = PteUnmapped;
}
}
- PageTable[L0][L1] = TgtAddr;
+ _pageTable[l0][l1] = tgtAddr;
}
- public bool IsRegionModified(long PA, long Size, NvGpuBufferType BufferType)
+ public bool IsRegionModified(long pa, long size, NvGpuBufferType bufferType)
{
- return Cache.IsRegionModified(PA, Size, BufferType);
+ return _cache.IsRegionModified(pa, size, bufferType);
}
- public bool TryGetHostAddress(long Position, long Size, out IntPtr Ptr)
+ public bool TryGetHostAddress(long position, long size, out IntPtr ptr)
{
- return Memory.TryGetHostAddress(GetPhysicalAddress(Position), Size, out Ptr);
+ return Memory.TryGetHostAddress(GetPhysicalAddress(position), size, out ptr);
}
- public byte ReadByte(long Position)
+ public byte ReadByte(long position)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadByte(Position);
+ return Memory.ReadByte(position);
}
- public ushort ReadUInt16(long Position)
+ public ushort ReadUInt16(long position)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadUInt16(Position);
+ return Memory.ReadUInt16(position);
}
- public uint ReadUInt32(long Position)
+ public uint ReadUInt32(long position)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadUInt32(Position);
+ return Memory.ReadUInt32(position);
}
- public ulong ReadUInt64(long Position)
+ public ulong ReadUInt64(long position)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadUInt64(Position);
+ return Memory.ReadUInt64(position);
}
- public sbyte ReadSByte(long Position)
+ public sbyte ReadSByte(long position)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadSByte(Position);
+ return Memory.ReadSByte(position);
}
- public short ReadInt16(long Position)
+ public short ReadInt16(long position)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadInt16(Position);
+ return Memory.ReadInt16(position);
}
- public int ReadInt32(long Position)
+ public int ReadInt32(long position)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadInt32(Position);
+ return Memory.ReadInt32(position);
}
- public long ReadInt64(long Position)
+ public long ReadInt64(long position)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadInt64(Position);
+ return Memory.ReadInt64(position);
}
- public byte[] ReadBytes(long Position, long Size)
+ public byte[] ReadBytes(long position, long size)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- return Memory.ReadBytes(Position, Size);
+ return Memory.ReadBytes(position, size);
}
- public void WriteByte(long Position, byte Value)
+ public void WriteByte(long position, byte value)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteByte(Position, Value);
+ Memory.WriteByte(position, value);
}
- public void WriteUInt16(long Position, ushort Value)
+ public void WriteUInt16(long position, ushort value)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteUInt16(Position, Value);
+ Memory.WriteUInt16(position, value);
}
- public void WriteUInt32(long Position, uint Value)
+ public void WriteUInt32(long position, uint value)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteUInt32(Position, Value);
+ Memory.WriteUInt32(position, value);
}
- public void WriteUInt64(long Position, ulong Value)
+ public void WriteUInt64(long position, ulong value)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteUInt64(Position, Value);
+ Memory.WriteUInt64(position, value);
}
- public void WriteSByte(long Position, sbyte Value)
+ public void WriteSByte(long position, sbyte value)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteSByte(Position, Value);
+ Memory.WriteSByte(position, value);
}
- public void WriteInt16(long Position, short Value)
+ public void WriteInt16(long position, short value)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteInt16(Position, Value);
+ Memory.WriteInt16(position, value);
}
- public void WriteInt32(long Position, int Value)
+ public void WriteInt32(long position, int value)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteInt32(Position, Value);
+ Memory.WriteInt32(position, value);
}
- public void WriteInt64(long Position, long Value)
+ public void WriteInt64(long position, long value)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteInt64(Position, Value);
+ Memory.WriteInt64(position, value);
}
- public void WriteBytes(long Position, byte[] Data)
+ public void WriteBytes(long position, byte[] data)
{
- Position = GetPhysicalAddress(Position);
+ position = GetPhysicalAddress(position);
- Memory.WriteBytes(Position, Data);
+ Memory.WriteBytes(position, data);
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Memory/NvGpuVmmCache.cs b/Ryujinx.Graphics/Memory/NvGpuVmmCache.cs
index 053c2161..ab5ea288 100644
--- a/Ryujinx.Graphics/Memory/NvGpuVmmCache.cs
+++ b/Ryujinx.Graphics/Memory/NvGpuVmmCache.cs
@@ -10,7 +10,7 @@ namespace Ryujinx.Graphics.Memory
private const long PageSize = MemoryManager.PageSize;
private const long PageMask = MemoryManager.PageMask;
- private ConcurrentDictionary<long, int>[] CachedPages;
+ private ConcurrentDictionary<long, int>[] _cachedPages;
private MemoryManager _memory;
@@ -18,7 +18,7 @@ namespace Ryujinx.Graphics.Memory
{
_memory = memory;
- CachedPages = new ConcurrentDictionary<long, int>[1 << 20];
+ _cachedPages = new ConcurrentDictionary<long, int>[1 << 20];
}
public bool IsRegionModified(long position, long size, NvGpuBufferType bufferType)
@@ -41,17 +41,17 @@ namespace Ryujinx.Graphics.Memory
{
long page = _memory.GetPhysicalAddress(va) >> PageBits;
- ConcurrentDictionary<long, int> dictionary = CachedPages[page];
+ ConcurrentDictionary<long, int> dictionary = _cachedPages[page];
if (dictionary == null)
{
dictionary = new ConcurrentDictionary<long, int>();
- CachedPages[page] = dictionary;
+ _cachedPages[page] = dictionary;
}
else if (modified)
{
- CachedPages[page].Clear();
+ _cachedPages[page].Clear();
}
if (dictionary.TryGetValue(pa, out int currBuffMask))
diff --git a/Ryujinx.Graphics/NvGpu.cs b/Ryujinx.Graphics/NvGpu.cs
index 4669c899..baac0b2d 100644
--- a/Ryujinx.Graphics/NvGpu.cs
+++ b/Ryujinx.Graphics/NvGpu.cs
@@ -22,13 +22,13 @@ namespace Ryujinx.Graphics
internal NvGpuEngineM2mf EngineM2mf { get; private set; }
internal NvGpuEngineP2mf EngineP2mf { get; private set; }
- private CdmaProcessor CdmaProcessor;
+ private CdmaProcessor _cdmaProcessor;
internal VideoDecoder VideoDecoder { get; private set; }
internal VideoImageComposer VideoImageComposer { get; private set; }
- public NvGpu(IGalRenderer Renderer)
+ public NvGpu(IGalRenderer renderer)
{
- this.Renderer = Renderer;
+ Renderer = renderer;
ResourceManager = new GpuResourceManager(this);
@@ -40,22 +40,22 @@ namespace Ryujinx.Graphics
EngineM2mf = new NvGpuEngineM2mf(this);
EngineP2mf = new NvGpuEngineP2mf(this);
- CdmaProcessor = new CdmaProcessor(this);
+ _cdmaProcessor = new CdmaProcessor(this);
VideoDecoder = new VideoDecoder(this);
VideoImageComposer = new VideoImageComposer(this);
}
- public void PushCommandBuffer(NvGpuVmm Vmm, int[] CmdBuffer)
+ public void PushCommandBuffer(NvGpuVmm vmm, int[] cmdBuffer)
{
- lock (CdmaProcessor)
+ lock (_cdmaProcessor)
{
- CdmaProcessor.PushCommands(Vmm, CmdBuffer);
+ _cdmaProcessor.PushCommands(vmm, cmdBuffer);
}
}
public void UninitializeVideoDecoder()
{
- lock (CdmaProcessor)
+ lock (_cdmaProcessor)
{
FFmpegWrapper.Uninitialize();
}
diff --git a/Ryujinx.Graphics/QuadHelper.cs b/Ryujinx.Graphics/QuadHelper.cs
index d5fea9ab..49c679e3 100644
--- a/Ryujinx.Graphics/QuadHelper.cs
+++ b/Ryujinx.Graphics/QuadHelper.cs
@@ -4,33 +4,33 @@ namespace Ryujinx.Graphics
{
static class QuadHelper
{
- public static int ConvertSizeQuadsToTris(int Size)
+ public static int ConvertSizeQuadsToTris(int size)
{
- return Size <= 0 ? 0 : (Size / 4) * 6;
+ return size <= 0 ? 0 : (size / 4) * 6;
}
- public static int ConvertSizeQuadStripToTris(int Size)
+ public static int ConvertSizeQuadStripToTris(int size)
{
- return Size <= 1 ? 0 : ((Size - 2) / 2) * 6;
+ return size <= 1 ? 0 : ((size - 2) / 2) * 6;
}
- public static byte[] ConvertQuadsToTris(byte[] Data, int EntrySize, int Count)
+ public static byte[] ConvertQuadsToTris(byte[] data, int entrySize, int count)
{
- int PrimitivesCount = Count / 4;
+ int primitivesCount = count / 4;
- int QuadPrimSize = 4 * EntrySize;
- int TrisPrimSize = 6 * EntrySize;
+ int quadPrimSize = 4 * entrySize;
+ int trisPrimSize = 6 * entrySize;
- byte[] Output = new byte[PrimitivesCount * 6 * EntrySize];
+ byte[] output = new byte[primitivesCount * 6 * entrySize];
- for (int Prim = 0; Prim < PrimitivesCount; Prim++)
+ for (int prim = 0; prim < primitivesCount; prim++)
{
- void AssignIndex(int Src, int Dst, int CopyCount = 1)
+ void AssignIndex(int src, int dst, int copyCount = 1)
{
- Src = Prim * QuadPrimSize + Src * EntrySize;
- Dst = Prim * TrisPrimSize + Dst * EntrySize;
+ src = prim * quadPrimSize + src * entrySize;
+ dst = prim * trisPrimSize + dst * entrySize;
- Buffer.BlockCopy(Data, Src, Output, Dst, CopyCount * EntrySize);
+ Buffer.BlockCopy(data, src, output, dst, copyCount * entrySize);
}
//0 1 2 -> 0 1 2.
@@ -43,26 +43,26 @@ namespace Ryujinx.Graphics
AssignIndex(0, 5);
}
- return Output;
+ return output;
}
- public static byte[] ConvertQuadStripToTris(byte[] Data, int EntrySize, int Count)
+ public static byte[] ConvertQuadStripToTris(byte[] data, int entrySize, int count)
{
- int PrimitivesCount = (Count - 2) / 2;
+ int primitivesCount = (count - 2) / 2;
- int QuadPrimSize = 2 * EntrySize;
- int TrisPrimSize = 6 * EntrySize;
+ int quadPrimSize = 2 * entrySize;
+ int trisPrimSize = 6 * entrySize;
- byte[] Output = new byte[PrimitivesCount * 6 * EntrySize];
+ byte[] output = new byte[primitivesCount * 6 * entrySize];
- for (int Prim = 0; Prim < PrimitivesCount; Prim++)
+ for (int prim = 0; prim < primitivesCount; prim++)
{
- void AssignIndex(int Src, int Dst, int CopyCount = 1)
+ void AssignIndex(int src, int dst, int copyCount = 1)
{
- Src = Prim * QuadPrimSize + Src * EntrySize + 2 * EntrySize;
- Dst = Prim * TrisPrimSize + Dst * EntrySize;
+ src = prim * quadPrimSize + src * entrySize + 2 * entrySize;
+ dst = prim * trisPrimSize + dst * entrySize;
- Buffer.BlockCopy(Data, Src, Output, Dst, CopyCount * EntrySize);
+ Buffer.BlockCopy(data, src, output, dst, copyCount * entrySize);
}
//-2 -1 0 -> 0 1 2.
@@ -75,7 +75,7 @@ namespace Ryujinx.Graphics
AssignIndex(-2, 5);
}
- return Output;
+ return output;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Texture/TextureInstructionSuffix.cs b/Ryujinx.Graphics/Texture/TextureInstructionSuffix.cs
index bcb64af0..65a8f356 100644
--- a/Ryujinx.Graphics/Texture/TextureInstructionSuffix.cs
+++ b/Ryujinx.Graphics/Texture/TextureInstructionSuffix.cs
@@ -6,14 +6,14 @@ namespace Ryujinx.Graphics.Texture
public enum TextureInstructionSuffix
{
None = 0x00, // No Modifier
- LZ = 0x02, // Load LOD Zero
- LB = 0x08, // Load Bias
- LL = 0x10, // Load LOD
- LBA = 0x20, // Load Bias with OperA? Auto?
- LLA = 0x40, // Load LOD with OperA? Auto?
- DC = 0x80, // Depth Compare
+ Lz = 0x02, // Load LOD Zero
+ Lb = 0x08, // Load Bias
+ Ll = 0x10, // Load LOD
+ Lba = 0x20, // Load Bias with OperA? Auto?
+ Lla = 0x40, // Load LOD with OperA? Auto?
+ Dc = 0x80, // Depth Compare
AOffI = 0x100, // Offset
- MZ = 0x200, // Multisample Zero?
- PTP = 0x400 // ???
+ Mz = 0x200, // Multisample Zero?
+ Ptp = 0x400 // ???
}
}
diff --git a/Ryujinx.Graphics/VDec/BitStreamWriter.cs b/Ryujinx.Graphics/VDec/BitStreamWriter.cs
index 44d07906..db2d39e5 100644
--- a/Ryujinx.Graphics/VDec/BitStreamWriter.cs
+++ b/Ryujinx.Graphics/VDec/BitStreamWriter.cs
@@ -6,69 +6,69 @@ namespace Ryujinx.Graphics.VDec
{
private const int BufferSize = 8;
- private Stream BaseStream;
+ private Stream _baseStream;
- private int Buffer;
- private int BufferPos;
+ private int _buffer;
+ private int _bufferPos;
- public BitStreamWriter(Stream BaseStream)
+ public BitStreamWriter(Stream baseStream)
{
- this.BaseStream = BaseStream;
+ _baseStream = baseStream;
}
- public void WriteBit(bool Value)
+ public void WriteBit(bool value)
{
- WriteBits(Value ? 1 : 0, 1);
+ WriteBits(value ? 1 : 0, 1);
}
- public void WriteBits(int Value, int ValueSize)
+ public void WriteBits(int value, int valueSize)
{
- int ValuePos = 0;
+ int valuePos = 0;
- int Remaining = ValueSize;
+ int remaining = valueSize;
- while (Remaining > 0)
+ while (remaining > 0)
{
- int CopySize = Remaining;
+ int copySize = remaining;
- int Free = GetFreeBufferBits();
+ int free = GetFreeBufferBits();
- if (CopySize > Free)
+ if (copySize > free)
{
- CopySize = Free;
+ copySize = free;
}
- int Mask = (1 << CopySize) - 1;
+ int mask = (1 << copySize) - 1;
- int SrcShift = (ValueSize - ValuePos) - CopySize;
- int DstShift = (BufferSize - BufferPos) - CopySize;
+ int srcShift = (valueSize - valuePos) - copySize;
+ int dstShift = (BufferSize - _bufferPos) - copySize;
- Buffer |= ((Value >> SrcShift) & Mask) << DstShift;
+ _buffer |= ((value >> srcShift) & mask) << dstShift;
- ValuePos += CopySize;
- BufferPos += CopySize;
- Remaining -= CopySize;
+ valuePos += copySize;
+ _bufferPos += copySize;
+ remaining -= copySize;
}
}
private int GetFreeBufferBits()
{
- if (BufferPos == BufferSize)
+ if (_bufferPos == BufferSize)
{
Flush();
}
- return BufferSize - BufferPos;
+ return BufferSize - _bufferPos;
}
public void Flush()
{
- if (BufferPos != 0)
+ if (_bufferPos != 0)
{
- BaseStream.WriteByte((byte)Buffer);
+ _baseStream.WriteByte((byte)_buffer);
- Buffer = 0;
- BufferPos = 0;
+ _buffer = 0;
+ _bufferPos = 0;
}
}
}
diff --git a/Ryujinx.Graphics/VDec/DecoderHelper.cs b/Ryujinx.Graphics/VDec/DecoderHelper.cs
index 485bb42b..4f17d8d1 100644
--- a/Ryujinx.Graphics/VDec/DecoderHelper.cs
+++ b/Ryujinx.Graphics/VDec/DecoderHelper.cs
@@ -4,14 +4,14 @@ namespace Ryujinx.Graphics.VDec
{
static class DecoderHelper
{
- public static byte[] Combine(byte[] Arr0, byte[] Arr1)
+ public static byte[] Combine(byte[] arr0, byte[] arr1)
{
- byte[] Output = new byte[Arr0.Length + Arr1.Length];
+ byte[] output = new byte[arr0.Length + arr1.Length];
- Buffer.BlockCopy(Arr0, 0, Output, 0, Arr0.Length);
- Buffer.BlockCopy(Arr1, 0, Output, Arr0.Length, Arr1.Length);
+ Buffer.BlockCopy(arr0, 0, output, 0, arr0.Length);
+ Buffer.BlockCopy(arr1, 0, output, arr0.Length, arr1.Length);
- return Output;
+ return output;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/VDec/FFmpeg.cs b/Ryujinx.Graphics/VDec/FFmpeg.cs
index 183d0779..ccd01f0d 100644
--- a/Ryujinx.Graphics/VDec/FFmpeg.cs
+++ b/Ryujinx.Graphics/VDec/FFmpeg.cs
@@ -4,15 +4,15 @@ using System.Runtime.InteropServices;
namespace Ryujinx.Graphics.VDec
{
- unsafe static class FFmpegWrapper
+ static unsafe class FFmpegWrapper
{
- private static AVCodec* Codec;
- private static AVCodecContext* Context;
- private static AVFrame* Frame;
- private static SwsContext* ScalerCtx;
+ private static AVCodec* _codec;
+ private static AVCodecContext* _context;
+ private static AVFrame* _frame;
+ private static SwsContext* _scalerCtx;
- private static int ScalerWidth;
- private static int ScalerHeight;
+ private static int _scalerWidth;
+ private static int _scalerHeight;
public static bool IsInitialized { get; private set; }
@@ -26,42 +26,42 @@ namespace Ryujinx.Graphics.VDec
EnsureCodecInitialized(AVCodecID.AV_CODEC_ID_VP9);
}
- private static void EnsureCodecInitialized(AVCodecID CodecId)
+ private static void EnsureCodecInitialized(AVCodecID codecId)
{
if (IsInitialized)
{
Uninitialize();
}
- Codec = ffmpeg.avcodec_find_decoder(CodecId);
- Context = ffmpeg.avcodec_alloc_context3(Codec);
- Frame = ffmpeg.av_frame_alloc();
+ _codec = ffmpeg.avcodec_find_decoder(codecId);
+ _context = ffmpeg.avcodec_alloc_context3(_codec);
+ _frame = ffmpeg.av_frame_alloc();
- ffmpeg.avcodec_open2(Context, Codec, null);
+ ffmpeg.avcodec_open2(_context, _codec, null);
IsInitialized = true;
}
- public static int DecodeFrame(byte[] Data)
+ public static int DecodeFrame(byte[] data)
{
if (!IsInitialized)
{
throw new InvalidOperationException("Tried to use uninitialized codec!");
}
- AVPacket Packet;
+ AVPacket packet;
- ffmpeg.av_init_packet(&Packet);
+ ffmpeg.av_init_packet(&packet);
- fixed (byte* Ptr = Data)
+ fixed (byte* ptr = data)
{
- Packet.data = Ptr;
- Packet.size = Data.Length;
+ packet.data = ptr;
+ packet.size = data.Length;
- ffmpeg.avcodec_send_packet(Context, &Packet);
+ ffmpeg.avcodec_send_packet(_context, &packet);
}
- return ffmpeg.avcodec_receive_frame(Context, Frame);
+ return ffmpeg.avcodec_receive_frame(_context, _frame);
}
public static FFmpegFrame GetFrame()
@@ -71,18 +71,18 @@ namespace Ryujinx.Graphics.VDec
throw new InvalidOperationException("Tried to use uninitialized codec!");
}
- AVFrame ManagedFrame = Marshal.PtrToStructure<AVFrame>((IntPtr)Frame);
+ AVFrame managedFrame = Marshal.PtrToStructure<AVFrame>((IntPtr)_frame);
- byte*[] Data = ManagedFrame.data.ToArray();
+ byte*[] data = managedFrame.data.ToArray();
return new FFmpegFrame()
{
- Width = ManagedFrame.width,
- Height = ManagedFrame.height,
+ Width = managedFrame.width,
+ Height = managedFrame.height,
- LumaPtr = Data[0],
- ChromaBPtr = Data[1],
- ChromaRPtr = Data[2]
+ LumaPtr = data[0],
+ ChromaBPtr = data[1],
+ ChromaRPtr = data[2]
};
}
@@ -93,51 +93,51 @@ namespace Ryujinx.Graphics.VDec
throw new InvalidOperationException("Tried to use uninitialized codec!");
}
- AVFrame ManagedFrame = Marshal.PtrToStructure<AVFrame>((IntPtr)Frame);
+ AVFrame managedFrame = Marshal.PtrToStructure<AVFrame>((IntPtr)_frame);
- EnsureScalerSetup(ManagedFrame.width, ManagedFrame.height);
+ EnsureScalerSetup(managedFrame.width, managedFrame.height);
- byte*[] Data = ManagedFrame.data.ToArray();
+ byte*[] data = managedFrame.data.ToArray();
- int[] LineSizes = ManagedFrame.linesize.ToArray();
+ int[] lineSizes = managedFrame.linesize.ToArray();
- byte[] Dst = new byte[ManagedFrame.width * ManagedFrame.height * 4];
+ byte[] dst = new byte[managedFrame.width * managedFrame.height * 4];
- fixed (byte* Ptr = Dst)
+ fixed (byte* ptr = dst)
{
- byte*[] DstData = new byte*[] { Ptr };
+ byte*[] dstData = new byte*[] { ptr };
- int[] DstLineSizes = new int[] { ManagedFrame.width * 4 };
+ int[] dstLineSizes = new int[] { managedFrame.width * 4 };
- ffmpeg.sws_scale(ScalerCtx, Data, LineSizes, 0, ManagedFrame.height, DstData, DstLineSizes);
+ ffmpeg.sws_scale(_scalerCtx, data, lineSizes, 0, managedFrame.height, dstData, dstLineSizes);
}
return new FFmpegFrame()
{
- Width = ManagedFrame.width,
- Height = ManagedFrame.height,
+ Width = managedFrame.width,
+ Height = managedFrame.height,
- Data = Dst
+ Data = dst
};
}
- private static void EnsureScalerSetup(int Width, int Height)
+ private static void EnsureScalerSetup(int width, int height)
{
- if (Width == 0 || Height == 0)
+ if (width == 0 || height == 0)
{
return;
}
- if (ScalerCtx == null || ScalerWidth != Width || ScalerHeight != Height)
+ if (_scalerCtx == null || _scalerWidth != width || _scalerHeight != height)
{
FreeScaler();
- ScalerCtx = ffmpeg.sws_getContext(
- Width, Height, AVPixelFormat.AV_PIX_FMT_YUV420P,
- Width, Height, AVPixelFormat.AV_PIX_FMT_RGBA, 0, null, null, null);
+ _scalerCtx = ffmpeg.sws_getContext(
+ width, height, AVPixelFormat.AV_PIX_FMT_YUV420P,
+ width, height, AVPixelFormat.AV_PIX_FMT_RGBA, 0, null, null, null);
- ScalerWidth = Width;
- ScalerHeight = Height;
+ _scalerWidth = width;
+ _scalerHeight = height;
}
}
@@ -145,9 +145,9 @@ namespace Ryujinx.Graphics.VDec
{
if (IsInitialized)
{
- ffmpeg.av_frame_unref(Frame);
- ffmpeg.av_free(Frame);
- ffmpeg.avcodec_close(Context);
+ ffmpeg.av_frame_unref(_frame);
+ ffmpeg.av_free(_frame);
+ ffmpeg.avcodec_close(_context);
FreeScaler();
@@ -157,11 +157,11 @@ namespace Ryujinx.Graphics.VDec
private static void FreeScaler()
{
- if (ScalerCtx != null)
+ if (_scalerCtx != null)
{
- ffmpeg.sws_freeContext(ScalerCtx);
+ ffmpeg.sws_freeContext(_scalerCtx);
- ScalerCtx = null;
+ _scalerCtx = null;
}
}
}
diff --git a/Ryujinx.Graphics/VDec/H264BitStreamWriter.cs b/Ryujinx.Graphics/VDec/H264BitStreamWriter.cs
index b388a2aa..b4fad59b 100644
--- a/Ryujinx.Graphics/VDec/H264BitStreamWriter.cs
+++ b/Ryujinx.Graphics/VDec/H264BitStreamWriter.cs
@@ -4,21 +4,21 @@ namespace Ryujinx.Graphics.VDec
{
class H264BitStreamWriter : BitStreamWriter
{
- public H264BitStreamWriter(Stream BaseStream) : base(BaseStream) { }
+ public H264BitStreamWriter(Stream baseStream) : base(baseStream) { }
- public void WriteU(int Value, int ValueSize)
+ public void WriteU(int value, int valueSize)
{
- WriteBits(Value, ValueSize);
+ WriteBits(value, valueSize);
}
- public void WriteSe(int Value)
+ public void WriteSe(int value)
{
- WriteExpGolombCodedInt(Value);
+ WriteExpGolombCodedInt(value);
}
- public void WriteUe(int Value)
+ public void WriteUe(int value)
{
- WriteExpGolombCodedUInt((uint)Value);
+ WriteExpGolombCodedUInt((uint)value);
}
public void End()
@@ -28,52 +28,52 @@ namespace Ryujinx.Graphics.VDec
Flush();
}
- private void WriteExpGolombCodedInt(int Value)
+ private void WriteExpGolombCodedInt(int value)
{
- int Sign = Value <= 0 ? 0 : 1;
+ int sign = value <= 0 ? 0 : 1;
- if (Value < 0)
+ if (value < 0)
{
- Value = -Value;
+ value = -value;
}
- Value = (Value << 1) - Sign;
+ value = (value << 1) - sign;
- WriteExpGolombCodedUInt((uint)Value);
+ WriteExpGolombCodedUInt((uint)value);
}
- private void WriteExpGolombCodedUInt(uint Value)
+ private void WriteExpGolombCodedUInt(uint value)
{
- int Size = 32 - CountLeadingZeros((int)Value + 1);
+ int size = 32 - CountLeadingZeros((int)value + 1);
- WriteBits(1, Size);
+ WriteBits(1, size);
- Value -= (1u << (Size - 1)) - 1;
+ value -= (1u << (size - 1)) - 1;
- WriteBits((int)Value, Size - 1);
+ WriteBits((int)value, size - 1);
}
private static readonly byte[] ClzNibbleTbl = { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
- private static int CountLeadingZeros(int Value)
+ private static int CountLeadingZeros(int value)
{
- if (Value == 0)
+ if (value == 0)
{
return 32;
}
- int NibbleIdx = 32;
- int PreCount, Count = 0;
+ int nibbleIdx = 32;
+ int preCount, count = 0;
do
{
- NibbleIdx -= 4;
- PreCount = ClzNibbleTbl[(Value >> NibbleIdx) & 0b1111];
- Count += PreCount;
+ nibbleIdx -= 4;
+ preCount = ClzNibbleTbl[(value >> nibbleIdx) & 0b1111];
+ count += preCount;
}
- while (PreCount == 4);
+ while (preCount == 4);
- return Count;
+ return count;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/VDec/H264Decoder.cs b/Ryujinx.Graphics/VDec/H264Decoder.cs
index d5d46713..01085a73 100644
--- a/Ryujinx.Graphics/VDec/H264Decoder.cs
+++ b/Ryujinx.Graphics/VDec/H264Decoder.cs
@@ -4,195 +4,195 @@ namespace Ryujinx.Graphics.VDec
{
class H264Decoder
{
- private int Log2MaxPicOrderCntLsbMinus4;
- private bool DeltaPicOrderAlwaysZeroFlag;
- private bool FrameMbsOnlyFlag;
- private int PicWidthInMbs;
- private int PicHeightInMapUnits;
- private bool EntropyCodingModeFlag;
- private bool BottomFieldPicOrderInFramePresentFlag;
- private int NumRefIdxL0DefaultActiveMinus1;
- private int NumRefIdxL1DefaultActiveMinus1;
- private bool DeblockingFilterControlPresentFlag;
- private bool RedundantPicCntPresentFlag;
- private bool Transform8x8ModeFlag;
- private bool MbAdaptiveFrameFieldFlag;
- private bool Direct8x8InferenceFlag;
- private bool WeightedPredFlag;
- private bool ConstrainedIntraPredFlag;
- private bool FieldPicFlag;
- private bool BottomFieldFlag;
- private int Log2MaxFrameNumMinus4;
- private int ChromaFormatIdc;
- private int PicOrderCntType;
- private int PicInitQpMinus26;
- private int ChromaQpIndexOffset;
- private int ChromaQpIndexOffset2;
- private int WeightedBipredIdc;
- private int FrameNumber;
- private byte[] ScalingMatrix4;
- private byte[] ScalingMatrix8;
-
- public void Decode(H264ParameterSets Params, H264Matrices Matrices, byte[] FrameData)
+ private int _log2MaxPicOrderCntLsbMinus4;
+ private bool _deltaPicOrderAlwaysZeroFlag;
+ private bool _frameMbsOnlyFlag;
+ private int _picWidthInMbs;
+ private int _picHeightInMapUnits;
+ private bool _entropyCodingModeFlag;
+ private bool _bottomFieldPicOrderInFramePresentFlag;
+ private int _numRefIdxL0DefaultActiveMinus1;
+ private int _numRefIdxL1DefaultActiveMinus1;
+ private bool _deblockingFilterControlPresentFlag;
+ private bool _redundantPicCntPresentFlag;
+ private bool _transform8x8ModeFlag;
+ private bool _mbAdaptiveFrameFieldFlag;
+ private bool _direct8x8InferenceFlag;
+ private bool _weightedPredFlag;
+ private bool _constrainedIntraPredFlag;
+ private bool _fieldPicFlag;
+ private bool _bottomFieldFlag;
+ private int _log2MaxFrameNumMinus4;
+ private int _chromaFormatIdc;
+ private int _picOrderCntType;
+ private int _picInitQpMinus26;
+ private int _chromaQpIndexOffset;
+ private int _chromaQpIndexOffset2;
+ private int _weightedBipredIdc;
+ private int _frameNumber;
+ private byte[] _scalingMatrix4;
+ private byte[] _scalingMatrix8;
+
+ public void Decode(H264ParameterSets Params, H264Matrices matrices, byte[] frameData)
{
- Log2MaxPicOrderCntLsbMinus4 = Params.Log2MaxPicOrderCntLsbMinus4;
- DeltaPicOrderAlwaysZeroFlag = Params.DeltaPicOrderAlwaysZeroFlag;
- FrameMbsOnlyFlag = Params.FrameMbsOnlyFlag;
- PicWidthInMbs = Params.PicWidthInMbs;
- PicHeightInMapUnits = Params.PicHeightInMapUnits;
- EntropyCodingModeFlag = Params.EntropyCodingModeFlag;
- BottomFieldPicOrderInFramePresentFlag = Params.BottomFieldPicOrderInFramePresentFlag;
- NumRefIdxL0DefaultActiveMinus1 = Params.NumRefIdxL0DefaultActiveMinus1;
- NumRefIdxL1DefaultActiveMinus1 = Params.NumRefIdxL1DefaultActiveMinus1;
- DeblockingFilterControlPresentFlag = Params.DeblockingFilterControlPresentFlag;
- RedundantPicCntPresentFlag = Params.RedundantPicCntPresentFlag;
- Transform8x8ModeFlag = Params.Transform8x8ModeFlag;
-
- MbAdaptiveFrameFieldFlag = ((Params.Flags >> 0) & 1) != 0;
- Direct8x8InferenceFlag = ((Params.Flags >> 1) & 1) != 0;
- WeightedPredFlag = ((Params.Flags >> 2) & 1) != 0;
- ConstrainedIntraPredFlag = ((Params.Flags >> 3) & 1) != 0;
- FieldPicFlag = ((Params.Flags >> 5) & 1) != 0;
- BottomFieldFlag = ((Params.Flags >> 6) & 1) != 0;
-
- Log2MaxFrameNumMinus4 = (int)(Params.Flags >> 8) & 0xf;
- ChromaFormatIdc = (int)(Params.Flags >> 12) & 0x3;
- PicOrderCntType = (int)(Params.Flags >> 14) & 0x3;
- PicInitQpMinus26 = (int)(Params.Flags >> 16) & 0x3f;
- ChromaQpIndexOffset = (int)(Params.Flags >> 22) & 0x1f;
- ChromaQpIndexOffset2 = (int)(Params.Flags >> 27) & 0x1f;
- WeightedBipredIdc = (int)(Params.Flags >> 32) & 0x3;
- FrameNumber = (int)(Params.Flags >> 46) & 0x1ffff;
-
- PicInitQpMinus26 = (PicInitQpMinus26 << 26) >> 26;
- ChromaQpIndexOffset = (ChromaQpIndexOffset << 27) >> 27;
- ChromaQpIndexOffset2 = (ChromaQpIndexOffset2 << 27) >> 27;
-
- ScalingMatrix4 = Matrices.ScalingMatrix4;
- ScalingMatrix8 = Matrices.ScalingMatrix8;
+ _log2MaxPicOrderCntLsbMinus4 = Params.Log2MaxPicOrderCntLsbMinus4;
+ _deltaPicOrderAlwaysZeroFlag = Params.DeltaPicOrderAlwaysZeroFlag;
+ _frameMbsOnlyFlag = Params.FrameMbsOnlyFlag;
+ _picWidthInMbs = Params.PicWidthInMbs;
+ _picHeightInMapUnits = Params.PicHeightInMapUnits;
+ _entropyCodingModeFlag = Params.EntropyCodingModeFlag;
+ _bottomFieldPicOrderInFramePresentFlag = Params.BottomFieldPicOrderInFramePresentFlag;
+ _numRefIdxL0DefaultActiveMinus1 = Params.NumRefIdxL0DefaultActiveMinus1;
+ _numRefIdxL1DefaultActiveMinus1 = Params.NumRefIdxL1DefaultActiveMinus1;
+ _deblockingFilterControlPresentFlag = Params.DeblockingFilterControlPresentFlag;
+ _redundantPicCntPresentFlag = Params.RedundantPicCntPresentFlag;
+ _transform8x8ModeFlag = Params.Transform8x8ModeFlag;
+
+ _mbAdaptiveFrameFieldFlag = ((Params.Flags >> 0) & 1) != 0;
+ _direct8x8InferenceFlag = ((Params.Flags >> 1) & 1) != 0;
+ _weightedPredFlag = ((Params.Flags >> 2) & 1) != 0;
+ _constrainedIntraPredFlag = ((Params.Flags >> 3) & 1) != 0;
+ _fieldPicFlag = ((Params.Flags >> 5) & 1) != 0;
+ _bottomFieldFlag = ((Params.Flags >> 6) & 1) != 0;
+
+ _log2MaxFrameNumMinus4 = (int)(Params.Flags >> 8) & 0xf;
+ _chromaFormatIdc = (int)(Params.Flags >> 12) & 0x3;
+ _picOrderCntType = (int)(Params.Flags >> 14) & 0x3;
+ _picInitQpMinus26 = (int)(Params.Flags >> 16) & 0x3f;
+ _chromaQpIndexOffset = (int)(Params.Flags >> 22) & 0x1f;
+ _chromaQpIndexOffset2 = (int)(Params.Flags >> 27) & 0x1f;
+ _weightedBipredIdc = (int)(Params.Flags >> 32) & 0x3;
+ _frameNumber = (int)(Params.Flags >> 46) & 0x1ffff;
+
+ _picInitQpMinus26 = (_picInitQpMinus26 << 26) >> 26;
+ _chromaQpIndexOffset = (_chromaQpIndexOffset << 27) >> 27;
+ _chromaQpIndexOffset2 = (_chromaQpIndexOffset2 << 27) >> 27;
+
+ _scalingMatrix4 = matrices.ScalingMatrix4;
+ _scalingMatrix8 = matrices.ScalingMatrix8;
if (FFmpegWrapper.IsInitialized)
{
- FFmpegWrapper.DecodeFrame(FrameData);
+ FFmpegWrapper.DecodeFrame(frameData);
}
else
{
FFmpegWrapper.H264Initialize();
- FFmpegWrapper.DecodeFrame(DecoderHelper.Combine(EncodeHeader(), FrameData));
+ FFmpegWrapper.DecodeFrame(DecoderHelper.Combine(EncodeHeader(), frameData));
}
}
private byte[] EncodeHeader()
{
- using (MemoryStream Data = new MemoryStream())
+ using (MemoryStream data = new MemoryStream())
{
- H264BitStreamWriter Writer = new H264BitStreamWriter(Data);
+ H264BitStreamWriter writer = new H264BitStreamWriter(data);
//Sequence Parameter Set.
- Writer.WriteU(1, 24);
- Writer.WriteU(0, 1);
- Writer.WriteU(3, 2);
- Writer.WriteU(7, 5);
- Writer.WriteU(100, 8);
- Writer.WriteU(0, 8);
- Writer.WriteU(31, 8);
- Writer.WriteUe(0);
- Writer.WriteUe(ChromaFormatIdc);
-
- if (ChromaFormatIdc == 3)
+ writer.WriteU(1, 24);
+ writer.WriteU(0, 1);
+ writer.WriteU(3, 2);
+ writer.WriteU(7, 5);
+ writer.WriteU(100, 8);
+ writer.WriteU(0, 8);
+ writer.WriteU(31, 8);
+ writer.WriteUe(0);
+ writer.WriteUe(_chromaFormatIdc);
+
+ if (_chromaFormatIdc == 3)
{
- Writer.WriteBit(false);
+ writer.WriteBit(false);
}
- Writer.WriteUe(0);
- Writer.WriteUe(0);
- Writer.WriteBit(false);
- Writer.WriteBit(false); //Scaling matrix present flag
+ writer.WriteUe(0);
+ writer.WriteUe(0);
+ writer.WriteBit(false);
+ writer.WriteBit(false); //Scaling matrix present flag
- Writer.WriteUe(Log2MaxFrameNumMinus4);
- Writer.WriteUe(PicOrderCntType);
+ writer.WriteUe(_log2MaxFrameNumMinus4);
+ writer.WriteUe(_picOrderCntType);
- if (PicOrderCntType == 0)
+ if (_picOrderCntType == 0)
{
- Writer.WriteUe(Log2MaxPicOrderCntLsbMinus4);
+ writer.WriteUe(_log2MaxPicOrderCntLsbMinus4);
}
- else if (PicOrderCntType == 1)
+ else if (_picOrderCntType == 1)
{
- Writer.WriteBit(DeltaPicOrderAlwaysZeroFlag);
+ writer.WriteBit(_deltaPicOrderAlwaysZeroFlag);
- Writer.WriteSe(0);
- Writer.WriteSe(0);
- Writer.WriteUe(0);
+ writer.WriteSe(0);
+ writer.WriteSe(0);
+ writer.WriteUe(0);
}
- int PicHeightInMbs = PicHeightInMapUnits / (FrameMbsOnlyFlag ? 1 : 2);
+ int picHeightInMbs = _picHeightInMapUnits / (_frameMbsOnlyFlag ? 1 : 2);
- Writer.WriteUe(16);
- Writer.WriteBit(false);
- Writer.WriteUe(PicWidthInMbs - 1);
- Writer.WriteUe(PicHeightInMbs - 1);
- Writer.WriteBit(FrameMbsOnlyFlag);
+ writer.WriteUe(16);
+ writer.WriteBit(false);
+ writer.WriteUe(_picWidthInMbs - 1);
+ writer.WriteUe(picHeightInMbs - 1);
+ writer.WriteBit(_frameMbsOnlyFlag);
- if (!FrameMbsOnlyFlag)
+ if (!_frameMbsOnlyFlag)
{
- Writer.WriteBit(MbAdaptiveFrameFieldFlag);
+ writer.WriteBit(_mbAdaptiveFrameFieldFlag);
}
- Writer.WriteBit(Direct8x8InferenceFlag);
- Writer.WriteBit(false); //Frame cropping flag
- Writer.WriteBit(false); //VUI parameter present flag
+ writer.WriteBit(_direct8x8InferenceFlag);
+ writer.WriteBit(false); //Frame cropping flag
+ writer.WriteBit(false); //VUI parameter present flag
- Writer.End();
+ writer.End();
//Picture Parameter Set.
- Writer.WriteU(1, 24);
- Writer.WriteU(0, 1);
- Writer.WriteU(3, 2);
- Writer.WriteU(8, 5);
-
- Writer.WriteUe(0);
- Writer.WriteUe(0);
-
- Writer.WriteBit(EntropyCodingModeFlag);
- Writer.WriteBit(false);
- Writer.WriteUe(0);
- Writer.WriteUe(NumRefIdxL0DefaultActiveMinus1);
- Writer.WriteUe(NumRefIdxL1DefaultActiveMinus1);
- Writer.WriteBit(WeightedPredFlag);
- Writer.WriteU(WeightedBipredIdc, 2);
- Writer.WriteSe(PicInitQpMinus26);
- Writer.WriteSe(0);
- Writer.WriteSe(ChromaQpIndexOffset);
- Writer.WriteBit(DeblockingFilterControlPresentFlag);
- Writer.WriteBit(ConstrainedIntraPredFlag);
- Writer.WriteBit(RedundantPicCntPresentFlag);
- Writer.WriteBit(Transform8x8ModeFlag);
-
- Writer.WriteBit(true);
-
- for (int Index = 0; Index < 6; Index++)
+ writer.WriteU(1, 24);
+ writer.WriteU(0, 1);
+ writer.WriteU(3, 2);
+ writer.WriteU(8, 5);
+
+ writer.WriteUe(0);
+ writer.WriteUe(0);
+
+ writer.WriteBit(_entropyCodingModeFlag);
+ writer.WriteBit(false);
+ writer.WriteUe(0);
+ writer.WriteUe(_numRefIdxL0DefaultActiveMinus1);
+ writer.WriteUe(_numRefIdxL1DefaultActiveMinus1);
+ writer.WriteBit(_weightedPredFlag);
+ writer.WriteU(_weightedBipredIdc, 2);
+ writer.WriteSe(_picInitQpMinus26);
+ writer.WriteSe(0);
+ writer.WriteSe(_chromaQpIndexOffset);
+ writer.WriteBit(_deblockingFilterControlPresentFlag);
+ writer.WriteBit(_constrainedIntraPredFlag);
+ writer.WriteBit(_redundantPicCntPresentFlag);
+ writer.WriteBit(_transform8x8ModeFlag);
+
+ writer.WriteBit(true);
+
+ for (int index = 0; index < 6; index++)
{
- Writer.WriteBit(true);
+ writer.WriteBit(true);
- WriteScalingList(Writer, ScalingMatrix4, Index * 16, 16);
+ WriteScalingList(writer, _scalingMatrix4, index * 16, 16);
}
- if (Transform8x8ModeFlag)
+ if (_transform8x8ModeFlag)
{
- for (int Index = 0; Index < 2; Index++)
+ for (int index = 0; index < 2; index++)
{
- Writer.WriteBit(true);
+ writer.WriteBit(true);
- WriteScalingList(Writer, ScalingMatrix8, Index * 64, 64);
+ WriteScalingList(writer, _scalingMatrix8, index * 64, 64);
}
}
- Writer.WriteSe(ChromaQpIndexOffset2);
+ writer.WriteSe(_chromaQpIndexOffset2);
- Writer.End();
+ writer.End();
- return Data.ToArray();
+ return data.ToArray();
}
}
@@ -217,21 +217,21 @@ namespace Ryujinx.Graphics.VDec
3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4
};
- private static void WriteScalingList(H264BitStreamWriter Writer, byte[] List, int Start, int Count)
+ private static void WriteScalingList(H264BitStreamWriter writer, byte[] list, int start, int count)
{
- byte[] Scan = Count == 16 ? ZigZagScan : ZigZagDirect;
+ byte[] scan = count == 16 ? ZigZagScan : ZigZagDirect;
- int LastScale = 8;
+ int lastScale = 8;
- for (int Index = 0; Index < Count; Index++)
+ for (int index = 0; index < count; index++)
{
- byte Value = List[Start + Scan[Index]];
+ byte value = list[start + scan[index]];
- int DeltaScale = Value - LastScale;
+ int deltaScale = value - lastScale;
- Writer.WriteSe(DeltaScale);
+ writer.WriteSe(deltaScale);
- LastScale = Value;
+ lastScale = value;
}
}
}
diff --git a/Ryujinx.Graphics/VDec/VideoDecoder.cs b/Ryujinx.Graphics/VDec/VideoDecoder.cs
index be53b1a0..2be47a30 100644
--- a/Ryujinx.Graphics/VDec/VideoDecoder.cs
+++ b/Ryujinx.Graphics/VDec/VideoDecoder.cs
@@ -9,124 +9,124 @@ namespace Ryujinx.Graphics.VDec
{
unsafe class VideoDecoder
{
- private NvGpu Gpu;
-
- private H264Decoder H264Decoder;
- private Vp9Decoder Vp9Decoder;
-
- private VideoCodec CurrentVideoCodec;
-
- private long DecoderContextAddress;
- private long FrameDataAddress;
- private long VpxCurrLumaAddress;
- private long VpxRef0LumaAddress;
- private long VpxRef1LumaAddress;
- private long VpxRef2LumaAddress;
- private long VpxCurrChromaAddress;
- private long VpxRef0ChromaAddress;
- private long VpxRef1ChromaAddress;
- private long VpxRef2ChromaAddress;
- private long VpxProbTablesAddress;
-
- public VideoDecoder(NvGpu Gpu)
+ private NvGpu _gpu;
+
+ private H264Decoder _h264Decoder;
+ private Vp9Decoder _vp9Decoder;
+
+ private VideoCodec _currentVideoCodec;
+
+ private long _decoderContextAddress;
+ private long _frameDataAddress;
+ private long _vpxCurrLumaAddress;
+ private long _vpxRef0LumaAddress;
+ private long _vpxRef1LumaAddress;
+ private long _vpxRef2LumaAddress;
+ private long _vpxCurrChromaAddress;
+ private long _vpxRef0ChromaAddress;
+ private long _vpxRef1ChromaAddress;
+ private long _vpxRef2ChromaAddress;
+ private long _vpxProbTablesAddress;
+
+ public VideoDecoder(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
- H264Decoder = new H264Decoder();
- Vp9Decoder = new Vp9Decoder();
+ _h264Decoder = new H264Decoder();
+ _vp9Decoder = new Vp9Decoder();
}
- public void Process(NvGpuVmm Vmm, int MethodOffset, int[] Arguments)
+ public void Process(NvGpuVmm vmm, int methodOffset, int[] arguments)
{
- VideoDecoderMeth Method = (VideoDecoderMeth)MethodOffset;
+ VideoDecoderMeth method = (VideoDecoderMeth)methodOffset;
- switch (Method)
+ switch (method)
{
- case VideoDecoderMeth.SetVideoCodec: SetVideoCodec (Vmm, Arguments); break;
- case VideoDecoderMeth.Execute: Execute (Vmm, Arguments); break;
- case VideoDecoderMeth.SetDecoderCtxAddr: SetDecoderCtxAddr (Vmm, Arguments); break;
- case VideoDecoderMeth.SetFrameDataAddr: SetFrameDataAddr (Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxCurrLumaAddr: SetVpxCurrLumaAddr (Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxRef0LumaAddr: SetVpxRef0LumaAddr (Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxRef1LumaAddr: SetVpxRef1LumaAddr (Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxRef2LumaAddr: SetVpxRef2LumaAddr (Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxCurrChromaAddr: SetVpxCurrChromaAddr(Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxRef0ChromaAddr: SetVpxRef0ChromaAddr(Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxRef1ChromaAddr: SetVpxRef1ChromaAddr(Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxRef2ChromaAddr: SetVpxRef2ChromaAddr(Vmm, Arguments); break;
- case VideoDecoderMeth.SetVpxProbTablesAddr: SetVpxProbTablesAddr(Vmm, Arguments); break;
+ case VideoDecoderMeth.SetVideoCodec: SetVideoCodec (vmm, arguments); break;
+ case VideoDecoderMeth.Execute: Execute (vmm, arguments); break;
+ case VideoDecoderMeth.SetDecoderCtxAddr: SetDecoderCtxAddr (vmm, arguments); break;
+ case VideoDecoderMeth.SetFrameDataAddr: SetFrameDataAddr (vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxCurrLumaAddr: SetVpxCurrLumaAddr (vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxRef0LumaAddr: SetVpxRef0LumaAddr (vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxRef1LumaAddr: SetVpxRef1LumaAddr (vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxRef2LumaAddr: SetVpxRef2LumaAddr (vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxCurrChromaAddr: SetVpxCurrChromaAddr(vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxRef0ChromaAddr: SetVpxRef0ChromaAddr(vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxRef1ChromaAddr: SetVpxRef1ChromaAddr(vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxRef2ChromaAddr: SetVpxRef2ChromaAddr(vmm, arguments); break;
+ case VideoDecoderMeth.SetVpxProbTablesAddr: SetVpxProbTablesAddr(vmm, arguments); break;
}
}
- private void SetVideoCodec(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVideoCodec(NvGpuVmm vmm, int[] arguments)
{
- CurrentVideoCodec = (VideoCodec)Arguments[0];
+ _currentVideoCodec = (VideoCodec)arguments[0];
}
- private void Execute(NvGpuVmm Vmm, int[] Arguments)
+ private void Execute(NvGpuVmm vmm, int[] arguments)
{
- if (CurrentVideoCodec == VideoCodec.H264)
+ if (_currentVideoCodec == VideoCodec.H264)
{
- int FrameDataSize = Vmm.ReadInt32(DecoderContextAddress + 0x48);
+ int frameDataSize = vmm.ReadInt32(_decoderContextAddress + 0x48);
- H264ParameterSets Params = MemoryHelper.Read<H264ParameterSets>(Vmm.Memory, Vmm.GetPhysicalAddress(DecoderContextAddress + 0x58));
+ H264ParameterSets Params = MemoryHelper.Read<H264ParameterSets>(vmm.Memory, vmm.GetPhysicalAddress(_decoderContextAddress + 0x58));
- H264Matrices Matrices = new H264Matrices()
+ H264Matrices matrices = new H264Matrices()
{
- ScalingMatrix4 = Vmm.ReadBytes(DecoderContextAddress + 0x1c0, 6 * 16),
- ScalingMatrix8 = Vmm.ReadBytes(DecoderContextAddress + 0x220, 2 * 64)
+ ScalingMatrix4 = vmm.ReadBytes(_decoderContextAddress + 0x1c0, 6 * 16),
+ ScalingMatrix8 = vmm.ReadBytes(_decoderContextAddress + 0x220, 2 * 64)
};
- byte[] FrameData = Vmm.ReadBytes(FrameDataAddress, FrameDataSize);
+ byte[] frameData = vmm.ReadBytes(_frameDataAddress, frameDataSize);
- H264Decoder.Decode(Params, Matrices, FrameData);
+ _h264Decoder.Decode(Params, matrices, frameData);
}
- else if (CurrentVideoCodec == VideoCodec.Vp9)
+ else if (_currentVideoCodec == VideoCodec.Vp9)
{
- int FrameDataSize = Vmm.ReadInt32(DecoderContextAddress + 0x30);
+ int frameDataSize = vmm.ReadInt32(_decoderContextAddress + 0x30);
- Vp9FrameKeys Keys = new Vp9FrameKeys()
+ Vp9FrameKeys keys = new Vp9FrameKeys()
{
- CurrKey = Vmm.GetPhysicalAddress(VpxCurrLumaAddress),
- Ref0Key = Vmm.GetPhysicalAddress(VpxRef0LumaAddress),
- Ref1Key = Vmm.GetPhysicalAddress(VpxRef1LumaAddress),
- Ref2Key = Vmm.GetPhysicalAddress(VpxRef2LumaAddress)
+ CurrKey = vmm.GetPhysicalAddress(_vpxCurrLumaAddress),
+ Ref0Key = vmm.GetPhysicalAddress(_vpxRef0LumaAddress),
+ Ref1Key = vmm.GetPhysicalAddress(_vpxRef1LumaAddress),
+ Ref2Key = vmm.GetPhysicalAddress(_vpxRef2LumaAddress)
};
- Vp9FrameHeader Header = MemoryHelper.Read<Vp9FrameHeader>(Vmm.Memory, Vmm.GetPhysicalAddress(DecoderContextAddress + 0x48));
+ Vp9FrameHeader header = MemoryHelper.Read<Vp9FrameHeader>(vmm.Memory, vmm.GetPhysicalAddress(_decoderContextAddress + 0x48));
- Vp9ProbabilityTables Probs = new Vp9ProbabilityTables()
+ Vp9ProbabilityTables probs = new Vp9ProbabilityTables()
{
- SegmentationTreeProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x387, 0x7),
- SegmentationPredProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x38e, 0x3),
- Tx8x8Probs = Vmm.ReadBytes(VpxProbTablesAddress + 0x470, 0x2),
- Tx16x16Probs = Vmm.ReadBytes(VpxProbTablesAddress + 0x472, 0x4),
- Tx32x32Probs = Vmm.ReadBytes(VpxProbTablesAddress + 0x476, 0x6),
- CoefProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x5a0, 0x900),
- SkipProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x537, 0x3),
- InterModeProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x400, 0x1c),
- InterpFilterProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x52a, 0x8),
- IsInterProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x41c, 0x4),
- CompModeProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x532, 0x5),
- SingleRefProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x580, 0xa),
- CompRefProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x58a, 0x5),
- YModeProbs0 = Vmm.ReadBytes(VpxProbTablesAddress + 0x480, 0x20),
- YModeProbs1 = Vmm.ReadBytes(VpxProbTablesAddress + 0x47c, 0x4),
- PartitionProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x4e0, 0x40),
- MvJointProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x53b, 0x3),
- MvSignProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x53e, 0x3),
- MvClassProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x54c, 0x14),
- MvClass0BitProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x540, 0x3),
- MvBitsProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x56c, 0x14),
- MvClass0FrProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x560, 0xc),
- MvFrProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x542, 0x6),
- MvClass0HpProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x548, 0x2),
- MvHpProbs = Vmm.ReadBytes(VpxProbTablesAddress + 0x54a, 0x2)
+ SegmentationTreeProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x387, 0x7),
+ SegmentationPredProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x38e, 0x3),
+ Tx8x8Probs = vmm.ReadBytes(_vpxProbTablesAddress + 0x470, 0x2),
+ Tx16x16Probs = vmm.ReadBytes(_vpxProbTablesAddress + 0x472, 0x4),
+ Tx32x32Probs = vmm.ReadBytes(_vpxProbTablesAddress + 0x476, 0x6),
+ CoefProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x5a0, 0x900),
+ SkipProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x537, 0x3),
+ InterModeProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x400, 0x1c),
+ InterpFilterProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x52a, 0x8),
+ IsInterProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x41c, 0x4),
+ CompModeProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x532, 0x5),
+ SingleRefProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x580, 0xa),
+ CompRefProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x58a, 0x5),
+ YModeProbs0 = vmm.ReadBytes(_vpxProbTablesAddress + 0x480, 0x20),
+ YModeProbs1 = vmm.ReadBytes(_vpxProbTablesAddress + 0x47c, 0x4),
+ PartitionProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x4e0, 0x40),
+ MvJointProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x53b, 0x3),
+ MvSignProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x53e, 0x3),
+ MvClassProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x54c, 0x14),
+ MvClass0BitProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x540, 0x3),
+ MvBitsProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x56c, 0x14),
+ MvClass0FrProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x560, 0xc),
+ MvFrProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x542, 0x6),
+ MvClass0HpProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x548, 0x2),
+ MvHpProbs = vmm.ReadBytes(_vpxProbTablesAddress + 0x54a, 0x2)
};
- byte[] FrameData = Vmm.ReadBytes(FrameDataAddress, FrameDataSize);
+ byte[] frameData = vmm.ReadBytes(_frameDataAddress, frameDataSize);
- Vp9Decoder.Decode(Keys, Header, Probs, FrameData);
+ _vp9Decoder.Decode(keys, header, probs, frameData);
}
else
{
@@ -134,148 +134,148 @@ namespace Ryujinx.Graphics.VDec
}
}
- private void SetDecoderCtxAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetDecoderCtxAddr(NvGpuVmm vmm, int[] arguments)
{
- DecoderContextAddress = GetAddress(Arguments);
+ _decoderContextAddress = GetAddress(arguments);
}
- private void SetFrameDataAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetFrameDataAddr(NvGpuVmm vmm, int[] arguments)
{
- FrameDataAddress = GetAddress(Arguments);
+ _frameDataAddress = GetAddress(arguments);
}
- private void SetVpxCurrLumaAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxCurrLumaAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxCurrLumaAddress = GetAddress(Arguments);
+ _vpxCurrLumaAddress = GetAddress(arguments);
}
- private void SetVpxRef0LumaAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxRef0LumaAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxRef0LumaAddress = GetAddress(Arguments);
+ _vpxRef0LumaAddress = GetAddress(arguments);
}
- private void SetVpxRef1LumaAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxRef1LumaAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxRef1LumaAddress = GetAddress(Arguments);
+ _vpxRef1LumaAddress = GetAddress(arguments);
}
- private void SetVpxRef2LumaAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxRef2LumaAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxRef2LumaAddress = GetAddress(Arguments);
+ _vpxRef2LumaAddress = GetAddress(arguments);
}
- private void SetVpxCurrChromaAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxCurrChromaAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxCurrChromaAddress = GetAddress(Arguments);
+ _vpxCurrChromaAddress = GetAddress(arguments);
}
- private void SetVpxRef0ChromaAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxRef0ChromaAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxRef0ChromaAddress = GetAddress(Arguments);
+ _vpxRef0ChromaAddress = GetAddress(arguments);
}
- private void SetVpxRef1ChromaAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxRef1ChromaAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxRef1ChromaAddress = GetAddress(Arguments);
+ _vpxRef1ChromaAddress = GetAddress(arguments);
}
- private void SetVpxRef2ChromaAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxRef2ChromaAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxRef2ChromaAddress = GetAddress(Arguments);
+ _vpxRef2ChromaAddress = GetAddress(arguments);
}
- private void SetVpxProbTablesAddr(NvGpuVmm Vmm, int[] Arguments)
+ private void SetVpxProbTablesAddr(NvGpuVmm vmm, int[] arguments)
{
- VpxProbTablesAddress = GetAddress(Arguments);
+ _vpxProbTablesAddress = GetAddress(arguments);
}
- private static long GetAddress(int[] Arguments)
+ private static long GetAddress(int[] arguments)
{
- return (long)(uint)Arguments[0] << 8;
+ return (long)(uint)arguments[0] << 8;
}
- internal void CopyPlanes(NvGpuVmm Vmm, SurfaceOutputConfig OutputConfig)
+ internal void CopyPlanes(NvGpuVmm vmm, SurfaceOutputConfig outputConfig)
{
- switch (OutputConfig.PixelFormat)
+ switch (outputConfig.PixelFormat)
{
- case SurfacePixelFormat.RGBA8: CopyPlanesRgba8 (Vmm, OutputConfig); break;
- case SurfacePixelFormat.YUV420P: CopyPlanesYuv420p(Vmm, OutputConfig); break;
+ case SurfacePixelFormat.Rgba8: CopyPlanesRgba8 (vmm, outputConfig); break;
+ case SurfacePixelFormat.Yuv420P: CopyPlanesYuv420P(vmm, outputConfig); break;
- default: ThrowUnimplementedPixelFormat(OutputConfig.PixelFormat); break;
+ default: ThrowUnimplementedPixelFormat(outputConfig.PixelFormat); break;
}
}
- private void CopyPlanesRgba8(NvGpuVmm Vmm, SurfaceOutputConfig OutputConfig)
+ private void CopyPlanesRgba8(NvGpuVmm vmm, SurfaceOutputConfig outputConfig)
{
- FFmpegFrame Frame = FFmpegWrapper.GetFrameRgba();
+ FFmpegFrame frame = FFmpegWrapper.GetFrameRgba();
- if ((Frame.Width | Frame.Height) == 0)
+ if ((frame.Width | frame.Height) == 0)
{
return;
}
- GalImage Image = new GalImage(
- OutputConfig.SurfaceWidth,
- OutputConfig.SurfaceHeight, 1, 1, 1,
- OutputConfig.GobBlockHeight, 1,
+ GalImage image = new GalImage(
+ outputConfig.SurfaceWidth,
+ outputConfig.SurfaceHeight, 1, 1, 1,
+ outputConfig.GobBlockHeight, 1,
GalMemoryLayout.BlockLinear,
- GalImageFormat.RGBA8 | GalImageFormat.Unorm,
+ GalImageFormat.Rgba8 | GalImageFormat.Unorm,
GalTextureTarget.TwoD);
- ImageUtils.WriteTexture(Vmm, Image, Vmm.GetPhysicalAddress(OutputConfig.SurfaceLumaAddress), Frame.Data);
+ ImageUtils.WriteTexture(vmm, image, vmm.GetPhysicalAddress(outputConfig.SurfaceLumaAddress), frame.Data);
}
- private void CopyPlanesYuv420p(NvGpuVmm Vmm, SurfaceOutputConfig OutputConfig)
+ private void CopyPlanesYuv420P(NvGpuVmm vmm, SurfaceOutputConfig outputConfig)
{
- FFmpegFrame Frame = FFmpegWrapper.GetFrame();
+ FFmpegFrame frame = FFmpegWrapper.GetFrame();
- if ((Frame.Width | Frame.Height) == 0)
+ if ((frame.Width | frame.Height) == 0)
{
return;
}
- int HalfSrcWidth = Frame.Width / 2;
+ int halfSrcWidth = frame.Width / 2;
- int HalfWidth = Frame.Width / 2;
- int HalfHeight = Frame.Height / 2;
+ int halfWidth = frame.Width / 2;
+ int halfHeight = frame.Height / 2;
- int AlignedWidth = (OutputConfig.SurfaceWidth + 0xff) & ~0xff;
+ int alignedWidth = (outputConfig.SurfaceWidth + 0xff) & ~0xff;
- for (int Y = 0; Y < Frame.Height; Y++)
+ for (int y = 0; y < frame.Height; y++)
{
- int Src = Y * Frame.Width;
- int Dst = Y * AlignedWidth;
+ int src = y * frame.Width;
+ int dst = y * alignedWidth;
- int Size = Frame.Width;
+ int size = frame.Width;
- for (int Offset = 0; Offset < Size; Offset++)
+ for (int offset = 0; offset < size; offset++)
{
- Vmm.WriteByte(OutputConfig.SurfaceLumaAddress + Dst + Offset, *(Frame.LumaPtr + Src + Offset));
+ vmm.WriteByte(outputConfig.SurfaceLumaAddress + dst + offset, *(frame.LumaPtr + src + offset));
}
}
//Copy chroma data from both channels with interleaving.
- for (int Y = 0; Y < HalfHeight; Y++)
+ for (int y = 0; y < halfHeight; y++)
{
- int Src = Y * HalfSrcWidth;
- int Dst = Y * AlignedWidth;
+ int src = y * halfSrcWidth;
+ int dst = y * alignedWidth;
- for (int X = 0; X < HalfWidth; X++)
+ for (int x = 0; x < halfWidth; x++)
{
- Vmm.WriteByte(OutputConfig.SurfaceChromaUAddress + Dst + X * 2 + 0, *(Frame.ChromaBPtr + Src + X));
- Vmm.WriteByte(OutputConfig.SurfaceChromaUAddress + Dst + X * 2 + 1, *(Frame.ChromaRPtr + Src + X));
+ vmm.WriteByte(outputConfig.SurfaceChromaUAddress + dst + x * 2 + 0, *(frame.ChromaBPtr + src + x));
+ vmm.WriteByte(outputConfig.SurfaceChromaUAddress + dst + x * 2 + 1, *(frame.ChromaRPtr + src + x));
}
}
}
private void ThrowUnimplementedCodec()
{
- throw new NotImplementedException("Codec \"" + CurrentVideoCodec + "\" is not supported!");
+ throw new NotImplementedException("Codec \"" + _currentVideoCodec + "\" is not supported!");
}
- private void ThrowUnimplementedPixelFormat(SurfacePixelFormat PixelFormat)
+ private void ThrowUnimplementedPixelFormat(SurfacePixelFormat pixelFormat)
{
- throw new NotImplementedException("Pixel format \"" + PixelFormat + "\" is not supported!");
+ throw new NotImplementedException("Pixel format \"" + pixelFormat + "\" is not supported!");
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/VDec/Vp9Decoder.cs b/Ryujinx.Graphics/VDec/Vp9Decoder.cs
index 6e3fc1f2..d77bc6c4 100644
--- a/Ryujinx.Graphics/VDec/Vp9Decoder.cs
+++ b/Ryujinx.Graphics/VDec/Vp9Decoder.cs
@@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.VDec
private byte[] DefaultTx16x16Probs = new byte[] { 20, 152, 15, 101 };
private byte[] DefaultTx32x32Probs = new byte[] { 3, 136, 37, 5, 52, 13 };
- private byte[] DefaultCoefProbs = new byte[]
+ private byte[] _defaultCoefProbs = new byte[]
{
195, 29, 183, 0, 84, 49, 136, 0, 8, 42, 71, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 31, 107, 169, 0, 35, 99, 159, 0,
@@ -181,39 +181,39 @@ namespace Ryujinx.Graphics.VDec
1, 115, 166, 0, 1, 84, 121, 0, 1, 51, 67, 0, 1, 16, 6, 0
};
- private byte[] DefaultSkipProbs = new byte[] { 192, 128, 64 };
+ private byte[] _defaultSkipProbs = new byte[] { 192, 128, 64 };
- private byte[] DefaultInterModeProbs = new byte[]
+ private byte[] _defaultInterModeProbs = new byte[]
{
2, 173, 34, 0, 7, 145, 85, 0, 7, 166, 63, 0, 7, 94, 66, 0,
8, 64, 46, 0, 17, 81, 31, 0, 25, 29, 30, 0
};
- private byte[] DefaultInterpFilterProbs = new byte[]
+ private byte[] _defaultInterpFilterProbs = new byte[]
{
235, 162, 36, 255, 34, 3, 149, 144
};
- private byte[] DefaultIsInterProbs = new byte[] { 9, 102, 187, 225 };
+ private byte[] _defaultIsInterProbs = new byte[] { 9, 102, 187, 225 };
- private byte[] DefaultCompModeProbs = new byte[] { 239, 183, 119, 96, 41 };
+ private byte[] _defaultCompModeProbs = new byte[] { 239, 183, 119, 96, 41 };
- private byte[] DefaultSingleRefProbs = new byte[]
+ private byte[] _defaultSingleRefProbs = new byte[]
{
33, 16, 77, 74, 142, 142, 172, 170, 238, 247
};
- private byte[] DefaultCompRefProbs = new byte[] { 50, 126, 123, 221, 226 };
+ private byte[] _defaultCompRefProbs = new byte[] { 50, 126, 123, 221, 226 };
- private byte[] DefaultYModeProbs0 = new byte[]
+ private byte[] _defaultYModeProbs0 = new byte[]
{
65, 32, 18, 144, 162, 194, 41, 51, 132, 68, 18, 165, 217, 196, 45, 40,
173, 80, 19, 176, 240, 193, 64, 35, 221, 135, 38, 194, 248, 121, 96, 85
};
- private byte[] DefaultYModeProbs1 = new byte[] { 98, 78, 46, 29 };
+ private byte[] _defaultYModeProbs1 = new byte[] { 98, 78, 46, 29 };
- private byte[] DefaultPartitionProbs = new byte[]
+ private byte[] _defaultPartitionProbs = new byte[]
{
199, 122, 141, 0, 147, 63, 159, 0, 148, 133, 118, 0, 121, 104, 114, 0,
174, 73, 87, 0, 92, 41, 83, 0, 82, 99, 50, 0, 53, 39, 39, 0,
@@ -221,184 +221,184 @@ namespace Ryujinx.Graphics.VDec
222, 34, 30, 0, 72, 16, 44, 0, 58, 32, 12, 0, 10, 7, 6, 0
};
- private byte[] DefaultMvJointProbs = new byte[] { 32, 64, 96 };
+ private byte[] _defaultMvJointProbs = new byte[] { 32, 64, 96 };
- private byte[] DefaultMvSignProbs = new byte[] { 128, 128 };
+ private byte[] _defaultMvSignProbs = new byte[] { 128, 128 };
- private byte[] DefaultMvClassProbs = new byte[]
+ private byte[] _defaultMvClassProbs = new byte[]
{
224, 144, 192, 168, 192, 176, 192, 198, 198, 245, 216, 128, 176, 160, 176, 176,
192, 198, 198, 208
};
- private byte[] DefaultMvClass0BitProbs = new byte[] { 216, 208 };
+ private byte[] _defaultMvClass0BitProbs = new byte[] { 216, 208 };
- private byte[] DefaultMvBitsProbs = new byte[]
+ private byte[] _defaultMvBitsProbs = new byte[]
{
136, 140, 148, 160, 176, 192, 224, 234, 234, 240, 136, 140, 148, 160, 176, 192,
224, 234, 234, 240
};
- private byte[] DefaultMvClass0FrProbs = new byte[]
+ private byte[] _defaultMvClass0FrProbs = new byte[]
{
128, 128, 64, 96, 112, 64, 128, 128, 64, 96, 112, 64
};
- private byte[] DefaultMvFrProbs = new byte[] { 64, 96, 64, 64, 96, 64 };
+ private byte[] _defaultMvFrProbs = new byte[] { 64, 96, 64, 64, 96, 64 };
- private byte[] DefaultMvClass0HpProbs = new byte[] { 160, 160 };
+ private byte[] _defaultMvClass0HpProbs = new byte[] { 160, 160 };
- private byte[] DefaultMvHpProbs = new byte[] { 128, 128 };
+ private byte[] _defaultMvHpProbs = new byte[] { 128, 128 };
- private sbyte[] LoopFilterRefDeltas;
- private sbyte[] LoopFilterModeDeltas;
+ private sbyte[] _loopFilterRefDeltas;
+ private sbyte[] _loopFilterModeDeltas;
- private LinkedList<int> FrameSlotByLastUse;
+ private LinkedList<int> _frameSlotByLastUse;
- private Dictionary<long, LinkedListNode<int>> CachedRefFrames;
+ private Dictionary<long, LinkedListNode<int>> _cachedRefFrames;
public Vp9Decoder()
{
- LoopFilterRefDeltas = new sbyte[4];
- LoopFilterModeDeltas = new sbyte[2];
+ _loopFilterRefDeltas = new sbyte[4];
+ _loopFilterModeDeltas = new sbyte[2];
- FrameSlotByLastUse = new LinkedList<int>();
+ _frameSlotByLastUse = new LinkedList<int>();
- for (int Slot = 0; Slot < 8; Slot++)
+ for (int slot = 0; slot < 8; slot++)
{
- FrameSlotByLastUse.AddFirst(Slot);
+ _frameSlotByLastUse.AddFirst(slot);
}
- CachedRefFrames = new Dictionary<long, LinkedListNode<int>>();
+ _cachedRefFrames = new Dictionary<long, LinkedListNode<int>>();
}
public void Decode(
- Vp9FrameKeys Keys,
- Vp9FrameHeader Header,
- Vp9ProbabilityTables Probs,
- byte[] FrameData)
+ Vp9FrameKeys keys,
+ Vp9FrameHeader header,
+ Vp9ProbabilityTables probs,
+ byte[] frameData)
{
- bool IsKeyFrame = ((Header.Flags >> 0) & 1) != 0;
- bool LastIsKeyFrame = ((Header.Flags >> 1) & 1) != 0;
- bool FrameSizeChanged = ((Header.Flags >> 2) & 1) != 0;
- bool ErrorResilientMode = ((Header.Flags >> 3) & 1) != 0;
- bool LastShowFrame = ((Header.Flags >> 4) & 1) != 0;
- bool IsFrameIntra = ((Header.Flags >> 5) & 1) != 0;
+ bool isKeyFrame = ((header.Flags >> 0) & 1) != 0;
+ bool lastIsKeyFrame = ((header.Flags >> 1) & 1) != 0;
+ bool frameSizeChanged = ((header.Flags >> 2) & 1) != 0;
+ bool errorResilientMode = ((header.Flags >> 3) & 1) != 0;
+ bool lastShowFrame = ((header.Flags >> 4) & 1) != 0;
+ bool isFrameIntra = ((header.Flags >> 5) & 1) != 0;
- bool ShowFrame = !IsFrameIntra;
+ bool showFrame = !isFrameIntra;
//Write compressed header.
- byte[] CompressedHeaderData;
+ byte[] compressedHeaderData;
- using (MemoryStream CompressedHeader = new MemoryStream())
+ using (MemoryStream compressedHeader = new MemoryStream())
{
- VpxRangeEncoder Writer = new VpxRangeEncoder(CompressedHeader);
+ VpxRangeEncoder writer = new VpxRangeEncoder(compressedHeader);
- if (!Header.Lossless)
+ if (!header.Lossless)
{
- if ((uint)Header.TxMode >= 3)
+ if ((uint)header.TxMode >= 3)
{
- Writer.Write(3, 2);
- Writer.Write(Header.TxMode == 4);
+ writer.Write(3, 2);
+ writer.Write(header.TxMode == 4);
}
else
{
- Writer.Write(Header.TxMode, 2);
+ writer.Write(header.TxMode, 2);
}
}
- if (Header.TxMode == 4)
+ if (header.TxMode == 4)
{
- WriteProbabilityUpdate(Writer, Probs.Tx8x8Probs, DefaultTx8x8Probs);
- WriteProbabilityUpdate(Writer, Probs.Tx16x16Probs, DefaultTx16x16Probs);
- WriteProbabilityUpdate(Writer, Probs.Tx32x32Probs, DefaultTx32x32Probs);
+ WriteProbabilityUpdate(writer, probs.Tx8x8Probs, DefaultTx8x8Probs);
+ WriteProbabilityUpdate(writer, probs.Tx16x16Probs, DefaultTx16x16Probs);
+ WriteProbabilityUpdate(writer, probs.Tx32x32Probs, DefaultTx32x32Probs);
}
- WriteCoefProbabilityUpdate(Writer, Header.TxMode, Probs.CoefProbs, DefaultCoefProbs);
+ WriteCoefProbabilityUpdate(writer, header.TxMode, probs.CoefProbs, _defaultCoefProbs);
- WriteProbabilityUpdate(Writer, Probs.SkipProbs, DefaultSkipProbs);
+ WriteProbabilityUpdate(writer, probs.SkipProbs, _defaultSkipProbs);
- if (!IsFrameIntra)
+ if (!isFrameIntra)
{
- WriteProbabilityUpdateAligned4(Writer, Probs.InterModeProbs, DefaultInterModeProbs);
+ WriteProbabilityUpdateAligned4(writer, probs.InterModeProbs, _defaultInterModeProbs);
- if (Header.RawInterpolationFilter == 4)
+ if (header.RawInterpolationFilter == 4)
{
- WriteProbabilityUpdate(Writer, Probs.InterpFilterProbs, DefaultInterpFilterProbs);
+ WriteProbabilityUpdate(writer, probs.InterpFilterProbs, _defaultInterpFilterProbs);
}
- WriteProbabilityUpdate(Writer, Probs.IsInterProbs, DefaultIsInterProbs);
+ WriteProbabilityUpdate(writer, probs.IsInterProbs, _defaultIsInterProbs);
- if ((Header.RefFrameSignBias[1] & 1) != (Header.RefFrameSignBias[2] & 1) ||
- (Header.RefFrameSignBias[1] & 1) != (Header.RefFrameSignBias[3] & 1))
+ if ((header.RefFrameSignBias[1] & 1) != (header.RefFrameSignBias[2] & 1) ||
+ (header.RefFrameSignBias[1] & 1) != (header.RefFrameSignBias[3] & 1))
{
- if ((uint)Header.CompPredMode >= 1)
+ if ((uint)header.CompPredMode >= 1)
{
- Writer.Write(1, 1);
- Writer.Write(Header.CompPredMode == 2);
+ writer.Write(1, 1);
+ writer.Write(header.CompPredMode == 2);
}
else
{
- Writer.Write(0, 1);
+ writer.Write(0, 1);
}
}
- if (Header.CompPredMode == 2)
+ if (header.CompPredMode == 2)
{
- WriteProbabilityUpdate(Writer, Probs.CompModeProbs, DefaultCompModeProbs);
+ WriteProbabilityUpdate(writer, probs.CompModeProbs, _defaultCompModeProbs);
}
- if (Header.CompPredMode != 1)
+ if (header.CompPredMode != 1)
{
- WriteProbabilityUpdate(Writer, Probs.SingleRefProbs, DefaultSingleRefProbs);
+ WriteProbabilityUpdate(writer, probs.SingleRefProbs, _defaultSingleRefProbs);
}
- if (Header.CompPredMode != 0)
+ if (header.CompPredMode != 0)
{
- WriteProbabilityUpdate(Writer, Probs.CompRefProbs, DefaultCompRefProbs);
+ WriteProbabilityUpdate(writer, probs.CompRefProbs, _defaultCompRefProbs);
}
- for (int Index = 0; Index < 4; Index++)
+ for (int index = 0; index < 4; index++)
{
- int i = Index * 8;
- int j = Index;
-
- WriteProbabilityUpdate(Writer, Probs.YModeProbs0[i + 0], DefaultYModeProbs0[i + 0]);
- WriteProbabilityUpdate(Writer, Probs.YModeProbs0[i + 1], DefaultYModeProbs0[i + 1]);
- WriteProbabilityUpdate(Writer, Probs.YModeProbs0[i + 2], DefaultYModeProbs0[i + 2]);
- WriteProbabilityUpdate(Writer, Probs.YModeProbs0[i + 3], DefaultYModeProbs0[i + 3]);
- WriteProbabilityUpdate(Writer, Probs.YModeProbs0[i + 4], DefaultYModeProbs0[i + 4]);
- WriteProbabilityUpdate(Writer, Probs.YModeProbs0[i + 5], DefaultYModeProbs0[i + 5]);
- WriteProbabilityUpdate(Writer, Probs.YModeProbs0[i + 6], DefaultYModeProbs0[i + 6]);
- WriteProbabilityUpdate(Writer, Probs.YModeProbs0[i + 7], DefaultYModeProbs0[i + 7]);
- WriteProbabilityUpdate(Writer, Probs.YModeProbs1[j + 0], DefaultYModeProbs1[j + 0]);
+ int i = index * 8;
+ int j = index;
+
+ WriteProbabilityUpdate(writer, probs.YModeProbs0[i + 0], _defaultYModeProbs0[i + 0]);
+ WriteProbabilityUpdate(writer, probs.YModeProbs0[i + 1], _defaultYModeProbs0[i + 1]);
+ WriteProbabilityUpdate(writer, probs.YModeProbs0[i + 2], _defaultYModeProbs0[i + 2]);
+ WriteProbabilityUpdate(writer, probs.YModeProbs0[i + 3], _defaultYModeProbs0[i + 3]);
+ WriteProbabilityUpdate(writer, probs.YModeProbs0[i + 4], _defaultYModeProbs0[i + 4]);
+ WriteProbabilityUpdate(writer, probs.YModeProbs0[i + 5], _defaultYModeProbs0[i + 5]);
+ WriteProbabilityUpdate(writer, probs.YModeProbs0[i + 6], _defaultYModeProbs0[i + 6]);
+ WriteProbabilityUpdate(writer, probs.YModeProbs0[i + 7], _defaultYModeProbs0[i + 7]);
+ WriteProbabilityUpdate(writer, probs.YModeProbs1[j + 0], _defaultYModeProbs1[j + 0]);
}
- WriteProbabilityUpdateAligned4(Writer, Probs.PartitionProbs, DefaultPartitionProbs);
+ WriteProbabilityUpdateAligned4(writer, probs.PartitionProbs, _defaultPartitionProbs);
for (int i = 0; i < 3; i++)
{
- WriteMvProbabilityUpdate(Writer, Probs.MvJointProbs[i], DefaultMvJointProbs[i]);
+ WriteMvProbabilityUpdate(writer, probs.MvJointProbs[i], _defaultMvJointProbs[i]);
}
for (int i = 0; i < 2; i++)
{
- WriteMvProbabilityUpdate(Writer, Probs.MvSignProbs[i], DefaultMvSignProbs[i]);
+ WriteMvProbabilityUpdate(writer, probs.MvSignProbs[i], _defaultMvSignProbs[i]);
for (int j = 0; j < 10; j++)
{
- int Index = i * 10 + j;
+ int index = i * 10 + j;
- WriteMvProbabilityUpdate(Writer, Probs.MvClassProbs[Index], DefaultMvClassProbs[Index]);
+ WriteMvProbabilityUpdate(writer, probs.MvClassProbs[index], _defaultMvClassProbs[index]);
}
- WriteMvProbabilityUpdate(Writer, Probs.MvClass0BitProbs[i], DefaultMvClass0BitProbs[i]);
+ WriteMvProbabilityUpdate(writer, probs.MvClass0BitProbs[i], _defaultMvClass0BitProbs[i]);
for (int j = 0; j < 10; j++)
{
- int Index = i * 10 + j;
+ int index = i * 10 + j;
- WriteMvProbabilityUpdate(Writer, Probs.MvBitsProbs[Index], DefaultMvBitsProbs[Index]);
+ WriteMvProbabilityUpdate(writer, probs.MvBitsProbs[index], _defaultMvBitsProbs[index]);
}
}
@@ -408,249 +408,249 @@ namespace Ryujinx.Graphics.VDec
{
for (int k = 0; k < 3; k++)
{
- int Index = i * 2 * 3 + j * 3 + k;
+ int index = i * 2 * 3 + j * 3 + k;
- WriteMvProbabilityUpdate(Writer, Probs.MvClass0FrProbs[Index], DefaultMvClass0FrProbs[Index]);
+ WriteMvProbabilityUpdate(writer, probs.MvClass0FrProbs[index], _defaultMvClass0FrProbs[index]);
}
}
for (int j = 0; j < 3; j++)
{
- int Index = i * 3 + j;
+ int index = i * 3 + j;
- WriteMvProbabilityUpdate(Writer, Probs.MvFrProbs[Index], DefaultMvFrProbs[Index]);
+ WriteMvProbabilityUpdate(writer, probs.MvFrProbs[index], _defaultMvFrProbs[index]);
}
}
- if (Header.AllowHighPrecisionMv)
+ if (header.AllowHighPrecisionMv)
{
- for (int Index = 0; Index < 2; Index++)
+ for (int index = 0; index < 2; index++)
{
- WriteMvProbabilityUpdate(Writer, Probs.MvClass0HpProbs[Index], DefaultMvClass0HpProbs[Index]);
- WriteMvProbabilityUpdate(Writer, Probs.MvHpProbs[Index], DefaultMvHpProbs[Index]);
+ WriteMvProbabilityUpdate(writer, probs.MvClass0HpProbs[index], _defaultMvClass0HpProbs[index]);
+ WriteMvProbabilityUpdate(writer, probs.MvHpProbs[index], _defaultMvHpProbs[index]);
}
}
}
- Writer.End();
+ writer.End();
- CompressedHeaderData = CompressedHeader.ToArray();
+ compressedHeaderData = compressedHeader.ToArray();
}
//Write uncompressed header.
- using (MemoryStream EncodedHeader = new MemoryStream())
+ using (MemoryStream encodedHeader = new MemoryStream())
{
- VpxBitStreamWriter Writer = new VpxBitStreamWriter(EncodedHeader);
+ VpxBitStreamWriter writer = new VpxBitStreamWriter(encodedHeader);
- Writer.WriteU(2, 2); //Frame marker.
- Writer.WriteU(0, 2); //Profile.
- Writer.WriteBit(false); //Show existing frame.
- Writer.WriteBit(!IsKeyFrame);
- Writer.WriteBit(ShowFrame);
- Writer.WriteBit(ErrorResilientMode);
+ writer.WriteU(2, 2); //Frame marker.
+ writer.WriteU(0, 2); //Profile.
+ writer.WriteBit(false); //Show existing frame.
+ writer.WriteBit(!isKeyFrame);
+ writer.WriteBit(showFrame);
+ writer.WriteBit(errorResilientMode);
- if (IsKeyFrame)
+ if (isKeyFrame)
{
- Writer.WriteU(FrameSyncCode, 24);
- Writer.WriteU(0, 3); //Color space.
- Writer.WriteU(0, 1); //Color range.
- Writer.WriteU(Header.CurrentFrame.Width - 1, 16);
- Writer.WriteU(Header.CurrentFrame.Height - 1, 16);
- Writer.WriteBit(false); //Render and frame size different.
+ writer.WriteU(FrameSyncCode, 24);
+ writer.WriteU(0, 3); //Color space.
+ writer.WriteU(0, 1); //Color range.
+ writer.WriteU(header.CurrentFrame.Width - 1, 16);
+ writer.WriteU(header.CurrentFrame.Height - 1, 16);
+ writer.WriteBit(false); //Render and frame size different.
- CachedRefFrames.Clear();
+ _cachedRefFrames.Clear();
//On key frames, all frame slots are set to the current frame,
//so the value of the selected slot doesn't really matter.
- GetNewFrameSlot(Keys.CurrKey);
+ GetNewFrameSlot(keys.CurrKey);
}
else
{
- if (!ShowFrame)
+ if (!showFrame)
{
- Writer.WriteBit(IsFrameIntra);
+ writer.WriteBit(isFrameIntra);
}
- if (!ErrorResilientMode)
+ if (!errorResilientMode)
{
- Writer.WriteU(0, 2); //Reset frame context.
+ writer.WriteU(0, 2); //Reset frame context.
}
- int RefreshFrameFlags = 1 << GetNewFrameSlot(Keys.CurrKey);
+ int refreshFrameFlags = 1 << GetNewFrameSlot(keys.CurrKey);
- if (IsFrameIntra)
+ if (isFrameIntra)
{
- Writer.WriteU(FrameSyncCode, 24);
- Writer.WriteU(RefreshFrameFlags, 8);
- Writer.WriteU(Header.CurrentFrame.Width - 1, 16);
- Writer.WriteU(Header.CurrentFrame.Height - 1, 16);
- Writer.WriteBit(false); //Render and frame size different.
+ writer.WriteU(FrameSyncCode, 24);
+ writer.WriteU(refreshFrameFlags, 8);
+ writer.WriteU(header.CurrentFrame.Width - 1, 16);
+ writer.WriteU(header.CurrentFrame.Height - 1, 16);
+ writer.WriteBit(false); //Render and frame size different.
}
else
{
- Writer.WriteU(RefreshFrameFlags, 8);
+ writer.WriteU(refreshFrameFlags, 8);
- int[] RefFrameIndex = new int[]
+ int[] refFrameIndex = new int[]
{
- GetFrameSlot(Keys.Ref0Key),
- GetFrameSlot(Keys.Ref1Key),
- GetFrameSlot(Keys.Ref2Key)
+ GetFrameSlot(keys.Ref0Key),
+ GetFrameSlot(keys.Ref1Key),
+ GetFrameSlot(keys.Ref2Key)
};
- byte[] RefFrameSignBias = Header.RefFrameSignBias;
+ byte[] refFrameSignBias = header.RefFrameSignBias;
- for (int Index = 1; Index < 4; Index++)
+ for (int index = 1; index < 4; index++)
{
- Writer.WriteU(RefFrameIndex[Index - 1], 3);
- Writer.WriteU(RefFrameSignBias[Index], 1);
+ writer.WriteU(refFrameIndex[index - 1], 3);
+ writer.WriteU(refFrameSignBias[index], 1);
}
- Writer.WriteBit(true); //Frame size with refs.
- Writer.WriteBit(false); //Render and frame size different.
- Writer.WriteBit(Header.AllowHighPrecisionMv);
- Writer.WriteBit(Header.RawInterpolationFilter == 4);
+ writer.WriteBit(true); //Frame size with refs.
+ writer.WriteBit(false); //Render and frame size different.
+ writer.WriteBit(header.AllowHighPrecisionMv);
+ writer.WriteBit(header.RawInterpolationFilter == 4);
- if (Header.RawInterpolationFilter != 4)
+ if (header.RawInterpolationFilter != 4)
{
- Writer.WriteU(Header.RawInterpolationFilter, 2);
+ writer.WriteU(header.RawInterpolationFilter, 2);
}
}
}
- if (!ErrorResilientMode)
+ if (!errorResilientMode)
{
- Writer.WriteBit(false); //Refresh frame context.
- Writer.WriteBit(true); //Frame parallel decoding mode.
+ writer.WriteBit(false); //Refresh frame context.
+ writer.WriteBit(true); //Frame parallel decoding mode.
}
- Writer.WriteU(0, 2); //Frame context index.
+ writer.WriteU(0, 2); //Frame context index.
- Writer.WriteU(Header.LoopFilterLevel, 6);
- Writer.WriteU(Header.LoopFilterSharpness, 3);
- Writer.WriteBit(Header.LoopFilterDeltaEnabled);
+ writer.WriteU(header.LoopFilterLevel, 6);
+ writer.WriteU(header.LoopFilterSharpness, 3);
+ writer.WriteBit(header.LoopFilterDeltaEnabled);
- if (Header.LoopFilterDeltaEnabled)
+ if (header.LoopFilterDeltaEnabled)
{
- bool[] UpdateLoopFilterRefDeltas = new bool[4];
- bool[] UpdateLoopFilterModeDeltas = new bool[2];
+ bool[] updateLoopFilterRefDeltas = new bool[4];
+ bool[] updateLoopFilterModeDeltas = new bool[2];
- bool LoopFilterDeltaUpdate = false;
+ bool loopFilterDeltaUpdate = false;
- for (int Index = 0; Index < Header.LoopFilterRefDeltas.Length; Index++)
+ for (int index = 0; index < header.LoopFilterRefDeltas.Length; index++)
{
- sbyte Old = LoopFilterRefDeltas[Index];
- sbyte New = Header.LoopFilterRefDeltas[Index];
+ sbyte old = _loopFilterRefDeltas[index];
+ sbyte New = header.LoopFilterRefDeltas[index];
- LoopFilterDeltaUpdate |= (UpdateLoopFilterRefDeltas[Index] = Old != New);
+ loopFilterDeltaUpdate |= (updateLoopFilterRefDeltas[index] = old != New);
}
- for (int Index = 0; Index < Header.LoopFilterModeDeltas.Length; Index++)
+ for (int index = 0; index < header.LoopFilterModeDeltas.Length; index++)
{
- sbyte Old = LoopFilterModeDeltas[Index];
- sbyte New = Header.LoopFilterModeDeltas[Index];
+ sbyte old = _loopFilterModeDeltas[index];
+ sbyte New = header.LoopFilterModeDeltas[index];
- LoopFilterDeltaUpdate |= (UpdateLoopFilterModeDeltas[Index] = Old != New);
+ loopFilterDeltaUpdate |= (updateLoopFilterModeDeltas[index] = old != New);
}
- Writer.WriteBit(LoopFilterDeltaUpdate);
+ writer.WriteBit(loopFilterDeltaUpdate);
- if (LoopFilterDeltaUpdate)
+ if (loopFilterDeltaUpdate)
{
- for (int Index = 0; Index < Header.LoopFilterRefDeltas.Length; Index++)
+ for (int index = 0; index < header.LoopFilterRefDeltas.Length; index++)
{
- Writer.WriteBit(UpdateLoopFilterRefDeltas[Index]);
+ writer.WriteBit(updateLoopFilterRefDeltas[index]);
- if (UpdateLoopFilterRefDeltas[Index])
+ if (updateLoopFilterRefDeltas[index])
{
- Writer.WriteS(Header.LoopFilterRefDeltas[Index], 6);
+ writer.WriteS(header.LoopFilterRefDeltas[index], 6);
}
}
- for (int Index = 0; Index < Header.LoopFilterModeDeltas.Length; Index++)
+ for (int index = 0; index < header.LoopFilterModeDeltas.Length; index++)
{
- Writer.WriteBit(UpdateLoopFilterModeDeltas[Index]);
+ writer.WriteBit(updateLoopFilterModeDeltas[index]);
- if (UpdateLoopFilterModeDeltas[Index])
+ if (updateLoopFilterModeDeltas[index])
{
- Writer.WriteS(Header.LoopFilterModeDeltas[Index], 6);
+ writer.WriteS(header.LoopFilterModeDeltas[index], 6);
}
}
}
}
- Writer.WriteU(Header.BaseQIndex, 8);
+ writer.WriteU(header.BaseQIndex, 8);
- Writer.WriteDeltaQ(Header.DeltaQYDc);
- Writer.WriteDeltaQ(Header.DeltaQUvDc);
- Writer.WriteDeltaQ(Header.DeltaQUvAc);
+ writer.WriteDeltaQ(header.DeltaQYDc);
+ writer.WriteDeltaQ(header.DeltaQUvDc);
+ writer.WriteDeltaQ(header.DeltaQUvAc);
- Writer.WriteBit(false); //Segmentation enabled (TODO).
+ writer.WriteBit(false); //Segmentation enabled (TODO).
- int MinTileColsLog2 = CalcMinLog2TileCols(Header.CurrentFrame.Width);
- int MaxTileColsLog2 = CalcMaxLog2TileCols(Header.CurrentFrame.Width);
+ int minTileColsLog2 = CalcMinLog2TileCols(header.CurrentFrame.Width);
+ int maxTileColsLog2 = CalcMaxLog2TileCols(header.CurrentFrame.Width);
- int TileColsLog2Diff = Header.TileColsLog2 - MinTileColsLog2;
+ int tileColsLog2Diff = header.TileColsLog2 - minTileColsLog2;
- int TileColsLog2IncMask = (1 << TileColsLog2Diff) - 1;
+ int tileColsLog2IncMask = (1 << tileColsLog2Diff) - 1;
//If it's less than the maximum, we need to add an extra 0 on the bitstream
//to indicate that it should stop reading.
- if (Header.TileColsLog2 < MaxTileColsLog2)
+ if (header.TileColsLog2 < maxTileColsLog2)
{
- Writer.WriteU(TileColsLog2IncMask << 1, TileColsLog2Diff + 1);
+ writer.WriteU(tileColsLog2IncMask << 1, tileColsLog2Diff + 1);
}
else
{
- Writer.WriteU(TileColsLog2IncMask, TileColsLog2Diff);
+ writer.WriteU(tileColsLog2IncMask, tileColsLog2Diff);
}
- bool TileRowsLog2IsNonZero = Header.TileRowsLog2 != 0;
+ bool tileRowsLog2IsNonZero = header.TileRowsLog2 != 0;
- Writer.WriteBit(TileRowsLog2IsNonZero);
+ writer.WriteBit(tileRowsLog2IsNonZero);
- if (TileRowsLog2IsNonZero)
+ if (tileRowsLog2IsNonZero)
{
- Writer.WriteBit(Header.TileRowsLog2 > 1);
+ writer.WriteBit(header.TileRowsLog2 > 1);
}
- Writer.WriteU(CompressedHeaderData.Length, 16);
+ writer.WriteU(compressedHeaderData.Length, 16);
- Writer.Flush();
+ writer.Flush();
- EncodedHeader.Write(CompressedHeaderData, 0, CompressedHeaderData.Length);
+ encodedHeader.Write(compressedHeaderData, 0, compressedHeaderData.Length);
if (!FFmpegWrapper.IsInitialized)
{
FFmpegWrapper.Vp9Initialize();
}
- FFmpegWrapper.DecodeFrame(DecoderHelper.Combine(EncodedHeader.ToArray(), FrameData));
+ FFmpegWrapper.DecodeFrame(DecoderHelper.Combine(encodedHeader.ToArray(), frameData));
}
- LoopFilterRefDeltas = Header.LoopFilterRefDeltas;
- LoopFilterModeDeltas = Header.LoopFilterModeDeltas;
+ _loopFilterRefDeltas = header.LoopFilterRefDeltas;
+ _loopFilterModeDeltas = header.LoopFilterModeDeltas;
}
- private int GetNewFrameSlot(long Key)
+ private int GetNewFrameSlot(long key)
{
- LinkedListNode<int> Node = FrameSlotByLastUse.Last;
+ LinkedListNode<int> node = _frameSlotByLastUse.Last;
- FrameSlotByLastUse.RemoveLast();
- FrameSlotByLastUse.AddFirst(Node);
+ _frameSlotByLastUse.RemoveLast();
+ _frameSlotByLastUse.AddFirst(node);
- CachedRefFrames[Key] = Node;
+ _cachedRefFrames[key] = node;
- return Node.Value;
+ return node.Value;
}
- private int GetFrameSlot(long Key)
+ private int GetFrameSlot(long key)
{
- if (CachedRefFrames.TryGetValue(Key, out LinkedListNode<int> Node))
+ if (_cachedRefFrames.TryGetValue(key, out LinkedListNode<int> node))
{
- FrameSlotByLastUse.Remove(Node);
- FrameSlotByLastUse.AddFirst(Node);
+ _frameSlotByLastUse.Remove(node);
+ _frameSlotByLastUse.AddFirst(node);
- return Node.Value;
+ return node.Value;
}
//Reference frame was lost.
@@ -658,53 +658,53 @@ namespace Ryujinx.Graphics.VDec
return 0;
}
- private void WriteProbabilityUpdate(VpxRangeEncoder Writer, byte[] New, byte[] Old)
+ private void WriteProbabilityUpdate(VpxRangeEncoder writer, byte[] New, byte[] old)
{
- for (int Offset = 0; Offset < New.Length; Offset++)
+ for (int offset = 0; offset < New.Length; offset++)
{
- WriteProbabilityUpdate(Writer, New[Offset], Old[Offset]);
+ WriteProbabilityUpdate(writer, New[offset], old[offset]);
}
}
- private void WriteCoefProbabilityUpdate(VpxRangeEncoder Writer, int TxMode, byte[] New, byte[] Old)
+ private void WriteCoefProbabilityUpdate(VpxRangeEncoder writer, int txMode, byte[] New, byte[] old)
{
//Note: There's 1 byte added on each packet for alignment,
//this byte is ignored when doing updates.
- const int BlockBytes = 2 * 2 * 6 * 6 * 4;
+ const int blockBytes = 2 * 2 * 6 * 6 * 4;
- bool NeedsUpdate(int BaseIndex)
+ bool NeedsUpdate(int baseIndex)
{
- int Index = BaseIndex;
+ int index = baseIndex;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 6; k++)
for (int l = 0; l < 6; l++)
{
- if (New[Index + 0] != Old[Index + 0] ||
- New[Index + 1] != Old[Index + 1] ||
- New[Index + 2] != Old[Index + 2])
+ if (New[index + 0] != old[index + 0] ||
+ New[index + 1] != old[index + 1] ||
+ New[index + 2] != old[index + 2])
{
return true;
}
- Index += 4;
+ index += 4;
}
return false;
}
- for (int BlockIndex = 0; BlockIndex < 4; BlockIndex++)
+ for (int blockIndex = 0; blockIndex < 4; blockIndex++)
{
- int BaseIndex = BlockIndex * BlockBytes;
+ int baseIndex = blockIndex * blockBytes;
- bool Update = NeedsUpdate(BaseIndex);
+ bool update = NeedsUpdate(baseIndex);
- Writer.Write(Update);
+ writer.Write(update);
- if (Update)
+ if (update)
{
- int Index = BaseIndex;
+ int index = baseIndex;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
@@ -713,167 +713,167 @@ namespace Ryujinx.Graphics.VDec
{
if (k != 0 || l < 3)
{
- WriteProbabilityUpdate(Writer, New[Index + 0], Old[Index + 0]);
- WriteProbabilityUpdate(Writer, New[Index + 1], Old[Index + 1]);
- WriteProbabilityUpdate(Writer, New[Index + 2], Old[Index + 2]);
+ WriteProbabilityUpdate(writer, New[index + 0], old[index + 0]);
+ WriteProbabilityUpdate(writer, New[index + 1], old[index + 1]);
+ WriteProbabilityUpdate(writer, New[index + 2], old[index + 2]);
}
- Index += 4;
+ index += 4;
}
}
- if (BlockIndex == TxMode)
+ if (blockIndex == txMode)
{
break;
}
}
}
- private void WriteProbabilityUpdateAligned4(VpxRangeEncoder Writer, byte[] New, byte[] Old)
+ private void WriteProbabilityUpdateAligned4(VpxRangeEncoder writer, byte[] New, byte[] old)
{
- for (int Offset = 0; Offset < New.Length; Offset += 4)
+ for (int offset = 0; offset < New.Length; offset += 4)
{
- WriteProbabilityUpdate(Writer, New[Offset + 0], Old[Offset + 0]);
- WriteProbabilityUpdate(Writer, New[Offset + 1], Old[Offset + 1]);
- WriteProbabilityUpdate(Writer, New[Offset + 2], Old[Offset + 2]);
+ WriteProbabilityUpdate(writer, New[offset + 0], old[offset + 0]);
+ WriteProbabilityUpdate(writer, New[offset + 1], old[offset + 1]);
+ WriteProbabilityUpdate(writer, New[offset + 2], old[offset + 2]);
}
}
- private void WriteProbabilityUpdate(VpxRangeEncoder Writer, byte New, byte Old)
+ private void WriteProbabilityUpdate(VpxRangeEncoder writer, byte New, byte old)
{
- bool Update = New != Old;
+ bool update = New != old;
- Writer.Write(Update, DiffUpdateProbability);
+ writer.Write(update, DiffUpdateProbability);
- if (Update)
+ if (update)
{
- WriteProbabilityDelta(Writer, New, Old);
+ WriteProbabilityDelta(writer, New, old);
}
}
- private void WriteProbabilityDelta(VpxRangeEncoder Writer, int New, int Old)
+ private void WriteProbabilityDelta(VpxRangeEncoder writer, int New, int old)
{
- int Delta = RemapProbability(New, Old);
+ int delta = RemapProbability(New, old);
- EncodeTermSubExp(Writer, Delta);
+ EncodeTermSubExp(writer, delta);
}
- private int RemapProbability(int New, int Old)
+ private int RemapProbability(int New, int old)
{
New--;
- Old--;
+ old--;
- int Index;
+ int index;
- if (Old * 2 <= 0xff)
+ if (old * 2 <= 0xff)
{
- Index = RecenterNonNeg(New, Old) - 1;
+ index = RecenterNonNeg(New, old) - 1;
}
else
{
- Index = RecenterNonNeg(0xff - 1 - New, 0xff - 1 - Old) - 1;
+ index = RecenterNonNeg(0xff - 1 - New, 0xff - 1 - old) - 1;
}
- return MapLut[Index];
+ return MapLut[index];
}
- private int RecenterNonNeg(int New, int Old)
+ private int RecenterNonNeg(int New, int old)
{
- if (New > Old * 2)
+ if (New > old * 2)
{
return New;
}
- else if (New >= Old)
+ else if (New >= old)
{
- return (New - Old) * 2;
+ return (New - old) * 2;
}
else /* if (New < Old) */
{
- return (Old - New) * 2 - 1;
+ return (old - New) * 2 - 1;
}
}
- private void EncodeTermSubExp(VpxRangeEncoder Writer, int Value)
+ private void EncodeTermSubExp(VpxRangeEncoder writer, int value)
{
- if (WriteLessThan(Writer, Value, 16))
+ if (WriteLessThan(writer, value, 16))
{
- Writer.Write(Value, 4);
+ writer.Write(value, 4);
}
- else if (WriteLessThan(Writer, Value, 32))
+ else if (WriteLessThan(writer, value, 32))
{
- Writer.Write(Value - 16, 4);
+ writer.Write(value - 16, 4);
}
- else if (WriteLessThan(Writer, Value, 64))
+ else if (WriteLessThan(writer, value, 64))
{
- Writer.Write(Value - 32, 5);
+ writer.Write(value - 32, 5);
}
else
{
- Value -= 64;
+ value -= 64;
- const int Size = 8;
+ const int size = 8;
- int Mask = (1 << Size) - 191;
+ int mask = (1 << size) - 191;
- int Delta = Value - Mask;
+ int delta = value - mask;
- if (Delta < 0)
+ if (delta < 0)
{
- Writer.Write(Value, Size - 1);
+ writer.Write(value, size - 1);
}
else
{
- Writer.Write(Delta / 2 + Mask, Size - 1);
- Writer.Write(Delta & 1, 1);
+ writer.Write(delta / 2 + mask, size - 1);
+ writer.Write(delta & 1, 1);
}
}
}
- private bool WriteLessThan(VpxRangeEncoder Writer, int Value, int Test)
+ private bool WriteLessThan(VpxRangeEncoder writer, int value, int test)
{
- bool IsLessThan = Value < Test;
+ bool isLessThan = value < test;
- Writer.Write(!IsLessThan);
+ writer.Write(!isLessThan);
- return IsLessThan;
+ return isLessThan;
}
- private void WriteMvProbabilityUpdate(VpxRangeEncoder Writer, byte New, byte Old)
+ private void WriteMvProbabilityUpdate(VpxRangeEncoder writer, byte New, byte old)
{
- bool Update = New != Old;
+ bool update = New != old;
- Writer.Write(Update, DiffUpdateProbability);
+ writer.Write(update, DiffUpdateProbability);
- if (Update)
+ if (update)
{
- Writer.Write(New >> 1, 7);
+ writer.Write(New >> 1, 7);
}
}
- private static int CalcMinLog2TileCols(int FrameWidth)
+ private static int CalcMinLog2TileCols(int frameWidth)
{
- int Sb64Cols = (FrameWidth + 63) / 64;
- int MinLog2 = 0;
+ int sb64Cols = (frameWidth + 63) / 64;
+ int minLog2 = 0;
- while ((64 << MinLog2) < Sb64Cols)
+ while ((64 << minLog2) < sb64Cols)
{
- MinLog2++;
+ minLog2++;
}
- return MinLog2;
+ return minLog2;
}
- private static int CalcMaxLog2TileCols(int FrameWidth)
+ private static int CalcMaxLog2TileCols(int frameWidth)
{
- int Sb64Cols = (FrameWidth + 63) / 64;
- int MaxLog2 = 1;
+ int sb64Cols = (frameWidth + 63) / 64;
+ int maxLog2 = 1;
- while ((Sb64Cols >> MaxLog2) >= 4)
+ while ((sb64Cols >> maxLog2) >= 4)
{
- MaxLog2++;
+ maxLog2++;
}
- return MaxLog2 - 1;
+ return maxLog2 - 1;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/VDec/VpxBitStreamWriter.cs b/Ryujinx.Graphics/VDec/VpxBitStreamWriter.cs
index 0c712d2c..97ada333 100644
--- a/Ryujinx.Graphics/VDec/VpxBitStreamWriter.cs
+++ b/Ryujinx.Graphics/VDec/VpxBitStreamWriter.cs
@@ -4,34 +4,34 @@ namespace Ryujinx.Graphics.VDec
{
class VpxBitStreamWriter : BitStreamWriter
{
- public VpxBitStreamWriter(Stream BaseStream) : base(BaseStream) { }
+ public VpxBitStreamWriter(Stream baseStream) : base(baseStream) { }
- public void WriteU(int Value, int ValueSize)
+ public void WriteU(int value, int valueSize)
{
- WriteBits(Value, ValueSize);
+ WriteBits(value, valueSize);
}
- public void WriteS(int Value, int ValueSize)
+ public void WriteS(int value, int valueSize)
{
- bool Sign = Value < 0;
+ bool sign = value < 0;
- if (Sign)
+ if (sign)
{
- Value = -Value;
+ value = -value;
}
- WriteBits((Value << 1) | (Sign ? 1 : 0), ValueSize + 1);
+ WriteBits((value << 1) | (sign ? 1 : 0), valueSize + 1);
}
- public void WriteDeltaQ(int Value)
+ public void WriteDeltaQ(int value)
{
- bool DeltaCoded = Value != 0;
+ bool deltaCoded = value != 0;
- WriteBit(DeltaCoded);
+ WriteBit(deltaCoded);
- if (DeltaCoded)
+ if (deltaCoded)
{
- WriteBits(Value, 4);
+ WriteBits(value, 4);
}
}
}
diff --git a/Ryujinx.Graphics/VDec/VpxRangeEncoder.cs b/Ryujinx.Graphics/VDec/VpxRangeEncoder.cs
index 3e381d2c..c854c9d9 100644
--- a/Ryujinx.Graphics/VDec/VpxRangeEncoder.cs
+++ b/Ryujinx.Graphics/VDec/VpxRangeEncoder.cs
@@ -26,106 +26,106 @@ namespace Ryujinx.Graphics.VDec
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
- private Stream BaseStream;
+ private Stream _baseStream;
- private uint LowValue;
- private uint Range;
- private int Count;
+ private uint _lowValue;
+ private uint _range;
+ private int _count;
- public VpxRangeEncoder(Stream BaseStream)
+ public VpxRangeEncoder(Stream baseStream)
{
- this.BaseStream = BaseStream;
+ _baseStream = baseStream;
- Range = 0xff;
- Count = -24;
+ _range = 0xff;
+ _count = -24;
Write(false);
}
- public void WriteByte(byte Value)
+ public void WriteByte(byte value)
{
- Write(Value, 8);
+ Write(value, 8);
}
- public void Write(int Value, int ValueSize)
+ public void Write(int value, int valueSize)
{
- for (int Bit = ValueSize - 1; Bit >= 0; Bit--)
+ for (int bit = valueSize - 1; bit >= 0; bit--)
{
- Write(((Value >> Bit) & 1) != 0);
+ Write(((value >> bit) & 1) != 0);
}
}
- public void Write(bool Bit)
+ public void Write(bool bit)
{
- Write(Bit, HalfProbability);
+ Write(bit, HalfProbability);
}
- public void Write(bool Bit, int Probability)
+ public void Write(bool bit, int probability)
{
- uint Range = this.Range;
+ uint range = _range;
- uint Split = 1 + (((Range - 1) * (uint)Probability) >> 8);
+ uint split = 1 + (((range - 1) * (uint)probability) >> 8);
- Range = Split;
+ range = split;
- if (Bit)
+ if (bit)
{
- LowValue += Split;
- Range = this.Range - Split;
+ _lowValue += split;
+ range = _range - split;
}
- int Shift = NormLut[Range];
+ int shift = NormLut[range];
- Range <<= Shift;
- Count += Shift;
+ range <<= shift;
+ _count += shift;
- if (Count >= 0)
+ if (_count >= 0)
{
- int Offset = Shift - Count;
+ int offset = shift - _count;
- if (((LowValue << (Offset - 1)) >> 31) != 0)
+ if (((_lowValue << (offset - 1)) >> 31) != 0)
{
- long CurrentPos = BaseStream.Position;
+ long currentPos = _baseStream.Position;
- BaseStream.Seek(-1, SeekOrigin.Current);
+ _baseStream.Seek(-1, SeekOrigin.Current);
- while (BaseStream.Position >= 0 && PeekByte() == 0xff)
+ while (_baseStream.Position >= 0 && PeekByte() == 0xff)
{
- BaseStream.WriteByte(0);
+ _baseStream.WriteByte(0);
- BaseStream.Seek(-2, SeekOrigin.Current);
+ _baseStream.Seek(-2, SeekOrigin.Current);
}
- BaseStream.WriteByte((byte)(PeekByte() + 1));
+ _baseStream.WriteByte((byte)(PeekByte() + 1));
- BaseStream.Seek(CurrentPos, SeekOrigin.Begin);
+ _baseStream.Seek(currentPos, SeekOrigin.Begin);
}
- BaseStream.WriteByte((byte)(LowValue >> (24 - Offset)));
+ _baseStream.WriteByte((byte)(_lowValue >> (24 - offset)));
- LowValue <<= Offset;
- Shift = Count;
- LowValue &= 0xffffff;
- Count -= 8;
+ _lowValue <<= offset;
+ shift = _count;
+ _lowValue &= 0xffffff;
+ _count -= 8;
}
- LowValue <<= Shift;
+ _lowValue <<= shift;
- this.Range = Range;
+ _range = range;
}
private byte PeekByte()
{
- byte Value = (byte)BaseStream.ReadByte();
+ byte value = (byte)_baseStream.ReadByte();
- BaseStream.Seek(-1, SeekOrigin.Current);
+ _baseStream.Seek(-1, SeekOrigin.Current);
- return Value;
+ return value;
}
public void End()
{
- for (int Index = 0; Index < 32; Index++)
+ for (int index = 0; index < 32; index++)
{
Write(false);
}
diff --git a/Ryujinx.Graphics/Vic/StructUnpacker.cs b/Ryujinx.Graphics/Vic/StructUnpacker.cs
index 62777aad..6b6b9795 100644
--- a/Ryujinx.Graphics/Vic/StructUnpacker.cs
+++ b/Ryujinx.Graphics/Vic/StructUnpacker.cs
@@ -5,64 +5,64 @@ namespace Ryujinx.Graphics.Vic
{
class StructUnpacker
{
- private NvGpuVmm Vmm;
+ private NvGpuVmm _vmm;
- private long Position;
+ private long _position;
- private ulong Buffer;
- private int BuffPos;
+ private ulong _buffer;
+ private int _buffPos;
- public StructUnpacker(NvGpuVmm Vmm, long Position)
+ public StructUnpacker(NvGpuVmm vmm, long position)
{
- this.Vmm = Vmm;
- this.Position = Position;
+ _vmm = vmm;
+ _position = position;
- BuffPos = 64;
+ _buffPos = 64;
}
- public int Read(int Bits)
+ public int Read(int bits)
{
- if ((uint)Bits > 32)
+ if ((uint)bits > 32)
{
- throw new ArgumentOutOfRangeException(nameof(Bits));
+ throw new ArgumentOutOfRangeException(nameof(bits));
}
- int Value = 0;
+ int value = 0;
- while (Bits > 0)
+ while (bits > 0)
{
RefillBufferIfNeeded();
- int ReadBits = Bits;
+ int readBits = bits;
- int MaxReadBits = 64 - BuffPos;
+ int maxReadBits = 64 - _buffPos;
- if (ReadBits > MaxReadBits)
+ if (readBits > maxReadBits)
{
- ReadBits = MaxReadBits;
+ readBits = maxReadBits;
}
- Value <<= ReadBits;
+ value <<= readBits;
- Value |= (int)(Buffer >> BuffPos) & (int)(0xffffffff >> (32 - ReadBits));
+ value |= (int)(_buffer >> _buffPos) & (int)(0xffffffff >> (32 - readBits));
- BuffPos += ReadBits;
+ _buffPos += readBits;
- Bits -= ReadBits;
+ bits -= readBits;
}
- return Value;
+ return value;
}
private void RefillBufferIfNeeded()
{
- if (BuffPos >= 64)
+ if (_buffPos >= 64)
{
- Buffer = Vmm.ReadUInt64(Position);
+ _buffer = _vmm.ReadUInt64(_position);
- Position += 8;
+ _position += 8;
- BuffPos = 0;
+ _buffPos = 0;
}
}
}
diff --git a/Ryujinx.Graphics/Vic/SurfaceOutputConfig.cs b/Ryujinx.Graphics/Vic/SurfaceOutputConfig.cs
index 0a232744..bdd55fc7 100644
--- a/Ryujinx.Graphics/Vic/SurfaceOutputConfig.cs
+++ b/Ryujinx.Graphics/Vic/SurfaceOutputConfig.cs
@@ -13,21 +13,21 @@ namespace Ryujinx.Graphics.Vic
public long SurfaceChromaVAddress;
public SurfaceOutputConfig(
- SurfacePixelFormat PixelFormat,
- int SurfaceWidth,
- int SurfaceHeight,
- int GobBlockHeight,
- long OutputSurfaceLumaAddress,
- long OutputSurfaceChromaUAddress,
- long OutputSurfaceChromaVAddress)
+ SurfacePixelFormat pixelFormat,
+ int surfaceWidth,
+ int surfaceHeight,
+ int gobBlockHeight,
+ long outputSurfaceLumaAddress,
+ long outputSurfaceChromaUAddress,
+ long outputSurfaceChromaVAddress)
{
- this.PixelFormat = PixelFormat;
- this.SurfaceWidth = SurfaceWidth;
- this.SurfaceHeight = SurfaceHeight;
- this.GobBlockHeight = GobBlockHeight;
- this.SurfaceLumaAddress = OutputSurfaceLumaAddress;
- this.SurfaceChromaUAddress = OutputSurfaceChromaUAddress;
- this.SurfaceChromaVAddress = OutputSurfaceChromaVAddress;
+ PixelFormat = pixelFormat;
+ SurfaceWidth = surfaceWidth;
+ SurfaceHeight = surfaceHeight;
+ GobBlockHeight = gobBlockHeight;
+ SurfaceLumaAddress = outputSurfaceLumaAddress;
+ SurfaceChromaUAddress = outputSurfaceChromaUAddress;
+ SurfaceChromaVAddress = outputSurfaceChromaVAddress;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Vic/SurfacePixelFormat.cs b/Ryujinx.Graphics/Vic/SurfacePixelFormat.cs
index ee56ac05..8dabd094 100644
--- a/Ryujinx.Graphics/Vic/SurfacePixelFormat.cs
+++ b/Ryujinx.Graphics/Vic/SurfacePixelFormat.cs
@@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.Vic
{
enum SurfacePixelFormat
{
- RGBA8 = 0x1f,
- YUV420P = 0x44
+ Rgba8 = 0x1f,
+ Yuv420P = 0x44
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics/Vic/VideoImageComposer.cs b/Ryujinx.Graphics/Vic/VideoImageComposer.cs
index 758382fa..e05bcfdb 100644
--- a/Ryujinx.Graphics/Vic/VideoImageComposer.cs
+++ b/Ryujinx.Graphics/Vic/VideoImageComposer.cs
@@ -4,104 +4,104 @@ namespace Ryujinx.Graphics.Vic
{
class VideoImageComposer
{
- private NvGpu Gpu;
+ private NvGpu _gpu;
- private long ConfigStructAddress;
- private long OutputSurfaceLumaAddress;
- private long OutputSurfaceChromaUAddress;
- private long OutputSurfaceChromaVAddress;
+ private long _configStructAddress;
+ private long _outputSurfaceLumaAddress;
+ private long _outputSurfaceChromaUAddress;
+ private long _outputSurfaceChromaVAddress;
- public VideoImageComposer(NvGpu Gpu)
+ public VideoImageComposer(NvGpu gpu)
{
- this.Gpu = Gpu;
+ _gpu = gpu;
}
- public void Process(NvGpuVmm Vmm, int MethodOffset, int[] Arguments)
+ public void Process(NvGpuVmm vmm, int methodOffset, int[] arguments)
{
- VideoImageComposerMeth Method = (VideoImageComposerMeth)MethodOffset;
+ VideoImageComposerMeth method = (VideoImageComposerMeth)methodOffset;
- switch (Method)
+ switch (method)
{
case VideoImageComposerMeth.Execute:
- Execute(Vmm, Arguments);
+ Execute(vmm, arguments);
break;
case VideoImageComposerMeth.SetConfigStructOffset:
- SetConfigStructOffset(Vmm, Arguments);
+ SetConfigStructOffset(vmm, arguments);
break;
case VideoImageComposerMeth.SetOutputSurfaceLumaOffset:
- SetOutputSurfaceLumaOffset(Vmm, Arguments);
+ SetOutputSurfaceLumaOffset(vmm, arguments);
break;
case VideoImageComposerMeth.SetOutputSurfaceChromaUOffset:
- SetOutputSurfaceChromaUOffset(Vmm, Arguments);
+ SetOutputSurfaceChromaUOffset(vmm, arguments);
break;
case VideoImageComposerMeth.SetOutputSurfaceChromaVOffset:
- SetOutputSurfaceChromaVOffset(Vmm, Arguments);
+ SetOutputSurfaceChromaVOffset(vmm, arguments);
break;
}
}
- private void Execute(NvGpuVmm Vmm, int[] Arguments)
+ private void Execute(NvGpuVmm vmm, int[] arguments)
{
- StructUnpacker Unpacker = new StructUnpacker(Vmm, ConfigStructAddress + 0x20);
+ StructUnpacker unpacker = new StructUnpacker(vmm, _configStructAddress + 0x20);
- SurfacePixelFormat PixelFormat = (SurfacePixelFormat)Unpacker.Read(7);
+ SurfacePixelFormat pixelFormat = (SurfacePixelFormat)unpacker.Read(7);
- int ChromaLocHoriz = Unpacker.Read(2);
- int ChromaLocVert = Unpacker.Read(2);
+ int chromaLocHoriz = unpacker.Read(2);
+ int chromaLocVert = unpacker.Read(2);
- int BlockLinearKind = Unpacker.Read(4);
- int BlockLinearHeightLog2 = Unpacker.Read(4);
+ int blockLinearKind = unpacker.Read(4);
+ int blockLinearHeightLog2 = unpacker.Read(4);
- int Reserved0 = Unpacker.Read(3);
- int Reserved1 = Unpacker.Read(10);
+ int reserved0 = unpacker.Read(3);
+ int reserved1 = unpacker.Read(10);
- int SurfaceWidthMinus1 = Unpacker.Read(14);
- int SurfaceHeightMinus1 = Unpacker.Read(14);
+ int surfaceWidthMinus1 = unpacker.Read(14);
+ int surfaceHeightMinus1 = unpacker.Read(14);
- int GobBlockHeight = 1 << BlockLinearHeightLog2;
+ int gobBlockHeight = 1 << blockLinearHeightLog2;
- int SurfaceWidth = SurfaceWidthMinus1 + 1;
- int SurfaceHeight = SurfaceHeightMinus1 + 1;
+ int surfaceWidth = surfaceWidthMinus1 + 1;
+ int surfaceHeight = surfaceHeightMinus1 + 1;
- SurfaceOutputConfig OutputConfig = new SurfaceOutputConfig(
- PixelFormat,
- SurfaceWidth,
- SurfaceHeight,
- GobBlockHeight,
- OutputSurfaceLumaAddress,
- OutputSurfaceChromaUAddress,
- OutputSurfaceChromaVAddress);
+ SurfaceOutputConfig outputConfig = new SurfaceOutputConfig(
+ pixelFormat,
+ surfaceWidth,
+ surfaceHeight,
+ gobBlockHeight,
+ _outputSurfaceLumaAddress,
+ _outputSurfaceChromaUAddress,
+ _outputSurfaceChromaVAddress);
- Gpu.VideoDecoder.CopyPlanes(Vmm, OutputConfig);
+ _gpu.VideoDecoder.CopyPlanes(vmm, outputConfig);
}
- private void SetConfigStructOffset(NvGpuVmm Vmm, int[] Arguments)
+ private void SetConfigStructOffset(NvGpuVmm vmm, int[] arguments)
{
- ConfigStructAddress = GetAddress(Arguments);
+ _configStructAddress = GetAddress(arguments);
}
- private void SetOutputSurfaceLumaOffset(NvGpuVmm Vmm, int[] Arguments)
+ private void SetOutputSurfaceLumaOffset(NvGpuVmm vmm, int[] arguments)
{
- OutputSurfaceLumaAddress = GetAddress(Arguments);
+ _outputSurfaceLumaAddress = GetAddress(arguments);
}
- private void SetOutputSurfaceChromaUOffset(NvGpuVmm Vmm, int[] Arguments)
+ private void SetOutputSurfaceChromaUOffset(NvGpuVmm vmm, int[] arguments)
{
- OutputSurfaceChromaUAddress = GetAddress(Arguments);
+ _outputSurfaceChromaUAddress = GetAddress(arguments);
}
- private void SetOutputSurfaceChromaVOffset(NvGpuVmm Vmm, int[] Arguments)
+ private void SetOutputSurfaceChromaVOffset(NvGpuVmm vmm, int[] arguments)
{
- OutputSurfaceChromaVAddress = GetAddress(Arguments);
+ _outputSurfaceChromaVAddress = GetAddress(arguments);
}
- private static long GetAddress(int[] Arguments)
+ private static long GetAddress(int[] arguments)
{
- return (long)(uint)Arguments[0] << 8;
+ return (long)(uint)arguments[0] << 8;
}
}
} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs b/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs
index dbf255be..66c33279 100644
--- a/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs
+++ b/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs
@@ -357,15 +357,15 @@ namespace Ryujinx.HLE.HOS.Services.Android
switch (colorFormat)
{
case ColorFormat.A8B8G8R8:
- return GalImageFormat.RGBA8 | GalImageFormat.Unorm;
+ return GalImageFormat.Rgba8 | GalImageFormat.Unorm;
case ColorFormat.X8B8G8R8:
- return GalImageFormat.RGBX8 | GalImageFormat.Unorm;
+ return GalImageFormat.Rgbx8 | GalImageFormat.Unorm;
case ColorFormat.R5G6B5:
- return GalImageFormat.BGR565 | GalImageFormat.Unorm;
+ return GalImageFormat.Bgr565 | GalImageFormat.Unorm;
case ColorFormat.A8R8G8B8:
- return GalImageFormat.BGRA8 | GalImageFormat.Unorm;
+ return GalImageFormat.Bgra8 | GalImageFormat.Unorm;
case ColorFormat.A4B4G4R4:
- return GalImageFormat.RGBA4 | GalImageFormat.Unorm;
+ return GalImageFormat.Rgba4 | GalImageFormat.Unorm;
default:
throw new NotImplementedException($"Color Format \"{colorFormat}\" not implemented!");
}
diff --git a/Ryujinx.sln.DotSettings b/Ryujinx.sln.DotSettings
index 737b5688..579d97a4 100644
--- a/Ryujinx.sln.DotSettings
+++ b/Ryujinx.sln.DotSettings
@@ -4,4 +4,11 @@
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForOtherTypes/@EntryValue">UseExplicitType</s:String>
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForSimpleTypes/@EntryValue">UseExplicitType</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=TypesAndNamespaces/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb"&gt;&lt;ExtraRule Prefix="I" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
+ <s:Boolean x:Key="/Default/UserDictionary/Words/=Astc/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/UserDictionary/Words/=Luma/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/UserDictionary/Words/=Probs/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/UserDictionary/Words/=Sint/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/UserDictionary/Words/=Snorm/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/UserDictionary/Words/=Srgb/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/UserDictionary/Words/=Unorm/@EntryIndexedValue">True</s:Boolean>
</wpf:ResourceDictionary> \ No newline at end of file
diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs
index 52c85d56..1b26b391 100644
--- a/Ryujinx/Program.cs
+++ b/Ryujinx/Program.cs
@@ -16,7 +16,7 @@ namespace Ryujinx
{
Console.Title = "Ryujinx Console";
- IGalRenderer renderer = new OGLRenderer();
+ IGalRenderer renderer = new OglRenderer();
IAalOutput audioOut = InitializeAudioEngine();