mirror of
https://git.ryujinx.app/kenji-nx/ryujinx.git
synced 2025-12-22 22:37:10 +00:00
Memory Changes part 2
* Slightly refactors RangeLists from the last Memory Changes MR, which fixes issue 61. * Convert as many const size array iterators to span iterators as possible. When iterating over a const size array, every iteration created a Span, now only the first iteration does in most places. * Now using object pooling for a few object types that were rapidly deleted and recreated. * Converted a few flag checks to binary operations to save memory allocations.
This commit is contained in:
parent
ff0daa9f35
commit
3deddbd491
89 changed files with 2121 additions and 1154 deletions
|
|
@ -821,6 +821,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
|
|||
// on the screen scissor state, then we need to force only one texture to be bound to avoid
|
||||
// host clipping.
|
||||
var screenScissorState = _state.State.ScreenScissorState;
|
||||
|
||||
Span<ScissorState> scissorStateSpan = _state.State.ScissorState.AsSpan();
|
||||
|
||||
bool clearAffectedByStencilMask = (_state.State.ClearFlags & 1) != 0;
|
||||
bool clearAffectedByScissor = (_state.State.ClearFlags & 0x100) != 0;
|
||||
|
|
@ -831,9 +833,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
|
|||
|
||||
bool fullClear = screenScissorState.X == 0 && screenScissorState.Y == 0;
|
||||
|
||||
if (fullClear && clearAffectedByScissor && _state.State.ScissorState[0].Enable)
|
||||
if (fullClear && clearAffectedByScissor && scissorStateSpan[0].Enable)
|
||||
{
|
||||
ref var scissorState = ref _state.State.ScissorState[0];
|
||||
ref var scissorState = ref scissorStateSpan[0];
|
||||
|
||||
fullClear = scissorState.X1 == screenScissorState.X &&
|
||||
scissorState.Y1 == screenScissorState.Y &&
|
||||
|
|
@ -892,9 +894,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
|
|||
int scissorW = screenScissorState.Width;
|
||||
int scissorH = screenScissorState.Height;
|
||||
|
||||
if (clearAffectedByScissor && _state.State.ScissorState[0].Enable)
|
||||
if (clearAffectedByScissor && scissorStateSpan[0].Enable)
|
||||
{
|
||||
ref var scissorState = ref _state.State.ScissorState[0];
|
||||
ref var scissorState = ref scissorStateSpan[0];
|
||||
|
||||
scissorX = Math.Max(scissorX, scissorState.X1);
|
||||
scissorY = Math.Max(scissorY, scissorState.Y1);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue