diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2018-03-19 15:58:46 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-19 15:58:46 -0300 |
| commit | 4314a8f3e5b76bbf2143f701c06e9354de712027 (patch) | |
| tree | acded3e24125e54bc791f322f0be869f1d379c19 /Ryujinx.Graphics | |
| parent | 4940cf0ea58c77c8666d76abdfc35c6380efed4c (diff) | |
[WIP] Add support for events (#60)
* Add support for events, move concept of domains to IpcService
* Support waiting for KThread, remove some test code, other tweaks
* Use move handle on NIFM since I can't test that now, it's better to leave it how it was
Diffstat (limited to 'Ryujinx.Graphics')
| -rw-r--r-- | Ryujinx.Graphics/Gpu/NsGpuPGraph.cs | 59 | ||||
| -rw-r--r-- | Ryujinx.Graphics/Gpu/NsGpuRegister.cs | 1 |
2 files changed, 45 insertions, 15 deletions
diff --git a/Ryujinx.Graphics/Gpu/NsGpuPGraph.cs b/Ryujinx.Graphics/Gpu/NsGpuPGraph.cs index 6543b1d1..652f3e75 100644 --- a/Ryujinx.Graphics/Gpu/NsGpuPGraph.cs +++ b/Ryujinx.Graphics/Gpu/NsGpuPGraph.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Graphics.Gpu { private NsGpu Gpu; - private int[] Registers; + private uint[] Registers; public NsGpuEngine[] SubChannels; @@ -18,7 +18,7 @@ namespace Ryujinx.Graphics.Gpu { this.Gpu = Gpu; - Registers = new int[0x1000]; + Registers = new uint[0x1000]; SubChannels = new NsGpuEngine[8]; @@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.Gpu { if (Entry.Arguments.Count == 1) { - SetRegister(Entry.Register, Entry.Arguments[0]); + SetRegister(Entry.Register, (uint)Entry.Arguments[0]); } switch (Entry.Register) @@ -48,7 +48,7 @@ namespace Ryujinx.Graphics.Gpu case NsGpuRegister._3dVertexArray0Fetch: SendVertexBuffers(Memory); break; - + case NsGpuRegister._3dCbData0: if (GetRegister(NsGpuRegister._3dCbPos) == 0x20) { @@ -62,6 +62,22 @@ namespace Ryujinx.Graphics.Gpu case NsGpuRegister._3dQueryGet: HasQuery = true; break; + + case NsGpuRegister._3dSetShader: + uint ShaderPrg = (uint)Entry.Arguments[0]; + uint ShaderId = (uint)Entry.Arguments[1]; + uint CodeAddr = (uint)Entry.Arguments[2]; + uint ShaderType = (uint)Entry.Arguments[3]; + uint CodeEnd = (uint)Entry.Arguments[4]; + + SendShader( + Memory, + ShaderPrg, + ShaderId, + CodeAddr, + ShaderType, + CodeEnd); + break; } } @@ -71,10 +87,10 @@ namespace Ryujinx.Graphics.Gpu (long)GetRegister(NsGpuRegister._3dQueryAddressHigh) << 32 | (long)GetRegister(NsGpuRegister._3dQueryAddressLow) << 0; - int Seq = GetRegister(NsGpuRegister._3dQuerySequence); - int Get = GetRegister(NsGpuRegister._3dQueryGet); + uint Seq = GetRegister(NsGpuRegister._3dQuerySequence); + uint Get = GetRegister(NsGpuRegister._3dQueryGet); - int Mode = Get & 3; + uint Mode = Get & 3; if (Mode == 0) { @@ -85,7 +101,7 @@ namespace Ryujinx.Graphics.Gpu { Gpu.Renderer.QueueAction(delegate() { - Memory.WriteInt32(Position, Seq); + Memory.WriteUInt32(Position, Seq); }); } } @@ -119,13 +135,13 @@ namespace Ryujinx.Graphics.Gpu { byte[] Buffer = AMemoryHelper.ReadBytes(Memory, Position, Size); - int Stride = GetRegister(NsGpuRegister._3dVertexArray0Fetch) & 0xfff; + int Stride = (int)GetRegister(NsGpuRegister._3dVertexArray0Fetch) & 0xfff; List<GalVertexAttrib> Attribs = new List<GalVertexAttrib>(); for (int Attr = 0; Attr < 16; Attr++) { - int Packed = GetRegister(NsGpuRegister._3dVertexAttrib0Format + Attr * 4); + int Packed = (int)GetRegister(NsGpuRegister._3dVertexAttrib0Format + Attr * 4); GalVertexAttrib Attrib = new GalVertexAttrib(Attr, (Packed >> 0) & 0x1f, @@ -154,10 +170,10 @@ namespace Ryujinx.Graphics.Gpu long TicPos = (long)GetRegister(NsGpuRegister._3dTicAddressHigh) << 32 | (long)GetRegister(NsGpuRegister._3dTicAddressLow) << 0; - int CbData = GetRegister(NsGpuRegister._3dCbData0); + uint CbData = GetRegister(NsGpuRegister._3dCbData0); - int TicIndex = (CbData >> 0) & 0xfffff; - int TscIndex = (CbData >> 20) & 0xfff; //I guess? + uint TicIndex = (CbData >> 0) & 0xfffff; + uint TscIndex = (CbData >> 20) & 0xfff; //I guess? TicPos = Gpu.MemoryMgr.GetCpuAddr(TicPos + TicIndex * 0x20); @@ -198,6 +214,19 @@ namespace Ryujinx.Graphics.Gpu } } + private void SendShader( + AMemory Memory, + uint ShaderPrg, + uint ShaderId, + uint CodeAddr, + uint ShaderType, + uint CodeEnd) + { + long CodePos = Gpu.MemoryMgr.GetCpuAddr(CodeAddr); + + byte[] Data = AMemoryHelper.ReadBytes(Memory, CodePos, 0x300); + } + private static byte[] GetDecodedTexture( AMemory Memory, NsGpuTextureFormat Format, @@ -263,12 +292,12 @@ namespace Ryujinx.Graphics.Gpu return Data; } - public int GetRegister(NsGpuRegister Register) + public uint GetRegister(NsGpuRegister Register) { return Registers[((int)Register >> 2) & 0xfff]; } - public void SetRegister(NsGpuRegister Register, int Value) + public void SetRegister(NsGpuRegister Register, uint Value) { Registers[((int)Register >> 2) & 0xfff] = Value; } diff --git a/Ryujinx.Graphics/Gpu/NsGpuRegister.cs b/Ryujinx.Graphics/Gpu/NsGpuRegister.cs index 319e2c01..4642e68d 100644 --- a/Ryujinx.Graphics/Gpu/NsGpuRegister.cs +++ b/Ryujinx.Graphics/Gpu/NsGpuRegister.cs @@ -89,5 +89,6 @@ namespace Ryujinx.Graphics.Gpu _3dCbData13 = 0x23c4, _3dCbData14 = 0x23c8, _3dCbData15 = 0x23cc, + _3dSetShader = 0x3890 } }
\ No newline at end of file |
