From 40b21cc3c4d2622bbd4f88d43073341854d9a671 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sun, 11 Jul 2021 17:20:40 -0300 Subject: Separate GPU engines (part 2/2) (#2440) * 3D engine now uses DeviceState too, plus new state modification tracking * Remove old methods code * Remove GpuState and friends * Optimize DeviceState, force inline some functions * This change was not supposed to go in * Proper channel initialization * Optimize state read/write methods even more * Fix debug build * Do not dirty state if the write is redundant * The YControl register should dirty either the viewport or front face state too, to update the host origin * Avoid redundant vertex buffer updates * Move state and get rid of the Ryujinx.Graphics.Gpu.State namespace * Comments and nits * Fix rebase * PR feedback * Move changed = false to improve codegen * PR feedback * Carry RyuJIT a bit more --- .../Engine/MethodUniformBufferBind.cs | 85 ---------------------- 1 file changed, 85 deletions(-) delete mode 100644 Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferBind.cs (limited to 'Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferBind.cs') diff --git a/Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferBind.cs b/Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferBind.cs deleted file mode 100644 index 0746efa5..00000000 --- a/Ryujinx.Graphics.Gpu/Engine/MethodUniformBufferBind.cs +++ /dev/null @@ -1,85 +0,0 @@ -using Ryujinx.Graphics.Gpu.State; - -namespace Ryujinx.Graphics.Gpu.Engine -{ - partial class Methods - { - /// - /// Binds a uniform buffer for the vertex shader stage. - /// - /// Current GPU state - /// Method call argument - private void UniformBufferBindVertex(GpuState state, int argument) - { - UniformBufferBind(state, argument, ShaderType.Vertex); - } - - /// - /// Binds a uniform buffer for the tessellation control shader stage. - /// - /// Current GPU state - /// Method call argument - private void UniformBufferBindTessControl(GpuState state, int argument) - { - UniformBufferBind(state, argument, ShaderType.TessellationControl); - } - - /// - /// Binds a uniform buffer for the tessellation evaluation shader stage. - /// - /// Current GPU state - /// Method call argument - private void UniformBufferBindTessEvaluation(GpuState state, int argument) - { - UniformBufferBind(state, argument, ShaderType.TessellationEvaluation); - } - - /// - /// Binds a uniform buffer for the geometry shader stage. - /// - /// Current GPU state - /// Method call argument - private void UniformBufferBindGeometry(GpuState state, int argument) - { - UniformBufferBind(state, argument, ShaderType.Geometry); - } - - /// - /// Binds a uniform buffer for the fragment shader stage. - /// - /// Current GPU state - /// Method call argument - private void UniformBufferBindFragment(GpuState state, int argument) - { - UniformBufferBind(state, argument, ShaderType.Fragment); - } - - /// - ///Binds a uniform buffer for the specified shader stage. - /// - /// Current GPU state - /// Method call argument - /// Shader stage that will access the uniform buffer - private void UniformBufferBind(GpuState state, int argument, ShaderType type) - { - bool enable = (argument & 1) != 0; - - int index = (argument >> 4) & 0x1f; - - FlushUboDirty(state.Channel.MemoryManager); - - if (enable) - { - var uniformBuffer = state.Get(MethodOffset.UniformBufferState); - - ulong address = uniformBuffer.Address.Pack(); - - state.Channel.BufferManager.SetGraphicsUniformBuffer((int)type, index, address, (uint)uniformBuffer.Size); - } - else - { - state.Channel.BufferManager.SetGraphicsUniformBuffer((int)type, index, 0, 0); - } - } - } -} \ No newline at end of file -- cgit v1.2.3