| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- using Ryujinx.Graphics.GAL;
- using Ryujinx.Graphics.GAL.Texture;
- using Ryujinx.Graphics.Gpu.Engine;
- using Ryujinx.Graphics.Gpu.Image;
- using Ryujinx.Graphics.Gpu.Memory;
- using Ryujinx.Graphics.Gpu.State;
- using System;
- namespace Ryujinx.Graphics.Gpu
- {
- public class GpuContext
- {
- public IRenderer Renderer { get; }
- internal GpuState State { get; }
- internal IPhysicalMemory PhysicalMemory { get; private set; }
- public MemoryManager MemoryManager { get; }
- internal MemoryAccessor MemoryAccessor { get; }
- internal Methods Methods { get; }
- internal NvGpuFifo Fifo { get; }
- public DmaPusher DmaPusher { get; }
- internal int SequenceNumber { get; private set; }
- private Lazy<Capabilities> _caps;
- internal Capabilities Capabilities => _caps.Value;
- public GpuContext(IRenderer renderer)
- {
- Renderer = renderer;
- State = new GpuState();
- MemoryManager = new MemoryManager();
- MemoryAccessor = new MemoryAccessor(this);
- Methods = new Methods(this);
- Fifo = new NvGpuFifo(this);
- DmaPusher = new DmaPusher(this);
- _caps = new Lazy<Capabilities>(GetCapabilities);
- }
- internal void AdvanceSequence()
- {
- SequenceNumber++;
- }
- public ITexture GetTexture(
- ulong address,
- int width,
- int height,
- int stride,
- bool isLinear,
- int gobBlocksInY,
- Format format,
- int bytesPerPixel)
- {
- FormatInfo formatInfo = new FormatInfo(format, 1, 1, bytesPerPixel);
- TextureInfo info = new TextureInfo(
- address,
- width,
- height,
- 1,
- 1,
- 1,
- 1,
- stride,
- isLinear,
- gobBlocksInY,
- 1,
- 1,
- Target.Texture2D,
- formatInfo);
- return Methods.GetTexture(address)?.HostTexture;
- }
- private Capabilities GetCapabilities()
- {
- return Renderer.GetCapabilities();
- }
- public void SetVmm(IPhysicalMemory mm)
- {
- PhysicalMemory = mm;
- }
- }
- }
|