diff options
Diffstat (limited to 'Ryujinx.Graphics.GAL')
5 files changed, 28 insertions, 10 deletions
diff --git a/Ryujinx.Graphics.GAL/IRenderer.cs b/Ryujinx.Graphics.GAL/IRenderer.cs index a1193208..a36d999d 100644 --- a/Ryujinx.Graphics.GAL/IRenderer.cs +++ b/Ryujinx.Graphics.GAL/IRenderer.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Graphics.GAL BufferHandle CreateBuffer(int size); - IProgram CreateProgram(IShader[] shaders); + IProgram CreateProgram(IShader[] shaders, ShaderInfo info); ISampler CreateSampler(SamplerCreateInfo info); ITexture CreateTexture(TextureCreateInfo info, float scale); @@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.GAL Capabilities GetCapabilities(); - IProgram LoadProgramBinary(byte[] programBinary); + IProgram LoadProgramBinary(byte[] programBinary, bool hasFragmentShader, ShaderInfo info); void SetBufferData(BufferHandle buffer, int offset, ReadOnlySpan<byte> data); diff --git a/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/BinaryProgramRequest.cs b/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/BinaryProgramRequest.cs index 96bfedf8..b4c6853f 100644 --- a/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/BinaryProgramRequest.cs +++ b/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/BinaryProgramRequest.cs @@ -5,17 +5,21 @@ public ThreadedProgram Threaded { get; set; } private byte[] _data; + private bool _hasFragmentShader; + private ShaderInfo _info; - public BinaryProgramRequest(ThreadedProgram program, byte[] data) + public BinaryProgramRequest(ThreadedProgram program, byte[] data, bool hasFragmentShader, ShaderInfo info) { Threaded = program; _data = data; + _hasFragmentShader = hasFragmentShader; + _info = info; } public IProgram Create(IRenderer renderer) { - return renderer.LoadProgramBinary(_data); + return renderer.LoadProgramBinary(_data, _hasFragmentShader, _info); } } } diff --git a/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs b/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs index 8e4cd1d4..d808fe22 100644 --- a/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs +++ b/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs @@ -7,12 +7,14 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Resources.Programs public ThreadedProgram Threaded { get; set; } private IShader[] _shaders; + private ShaderInfo _info; - public SourceProgramRequest(ThreadedProgram program, IShader[] shaders) + public SourceProgramRequest(ThreadedProgram program, IShader[] shaders, ShaderInfo info) { Threaded = program; _shaders = shaders; + _info = info; } public IProgram Create(IRenderer renderer) @@ -24,7 +26,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Resources.Programs return threaded?.Base; }).ToArray(); - return renderer.CreateProgram(shaders); + return renderer.CreateProgram(shaders, _info); } } } diff --git a/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs b/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs index df46b428..5030fee6 100644 --- a/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs +++ b/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs @@ -268,10 +268,10 @@ namespace Ryujinx.Graphics.GAL.Multithreading return handle; } - public IProgram CreateProgram(IShader[] shaders) + public IProgram CreateProgram(IShader[] shaders, ShaderInfo info) { var program = new ThreadedProgram(this); - SourceProgramRequest request = new SourceProgramRequest(program, shaders); + SourceProgramRequest request = new SourceProgramRequest(program, shaders, info); Programs.Add(request); New<CreateProgramCommand>().Set(Ref((IProgramRequest)request)); @@ -355,11 +355,11 @@ namespace Ryujinx.Graphics.GAL.Multithreading _baseRenderer.Initialize(logLevel); } - public IProgram LoadProgramBinary(byte[] programBinary) + public IProgram LoadProgramBinary(byte[] programBinary, bool hasFragmentShader, ShaderInfo info) { var program = new ThreadedProgram(this); - BinaryProgramRequest request = new BinaryProgramRequest(program, programBinary); + BinaryProgramRequest request = new BinaryProgramRequest(program, programBinary, hasFragmentShader, info); Programs.Add(request); New<CreateProgramCommand>().Set(Ref((IProgramRequest)request)); diff --git a/Ryujinx.Graphics.GAL/ShaderInfo.cs b/Ryujinx.Graphics.GAL/ShaderInfo.cs new file mode 100644 index 00000000..0c187e06 --- /dev/null +++ b/Ryujinx.Graphics.GAL/ShaderInfo.cs @@ -0,0 +1,12 @@ +namespace Ryujinx.Graphics.GAL +{ + public struct ShaderInfo + { + public int FragmentOutputMap { get; } + + public ShaderInfo(int fragmentOutputMap) + { + FragmentOutputMap = fragmentOutputMap; + } + } +}
\ No newline at end of file |