Only reupload the texture scale array if it changes. (#2595)
* Only reupload the texture scale array if it changes. Before, this would be called all the time if any shader needed a scale value. The cost of doing this has increased with threaded-gal, as the scale array is copied to a span pool, and it's was called on pretty much every draw sometimes. This improves GPU performance in games, scaled or not. Most affected game seems to be Xenoblade Chronicles: Definitive Edition. * Just use = instead of |=
This commit is contained in:
parent
ee1038e542
commit
76e8f9ac87
1 changed files with 9 additions and 3 deletions
|
@ -177,8 +177,6 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
|
||||
if ((binding.Flags & TextureUsageFlags.NeedsScaleValue) != 0 && texture != null)
|
||||
{
|
||||
_scaleChanged |= true;
|
||||
|
||||
switch (stage)
|
||||
{
|
||||
case ShaderStage.Fragment:
|
||||
|
@ -218,7 +216,13 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
}
|
||||
}
|
||||
|
||||
_scales[index] = result;
|
||||
if (result != _scales[index])
|
||||
{
|
||||
_scaleChanged = true;
|
||||
|
||||
_scales[index] = result;
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
|
@ -232,6 +236,8 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
if (_scaleChanged)
|
||||
{
|
||||
_context.Renderer.Pipeline.UpdateRenderScale(stage, _scales, _textureBindings[stageIndex]?.Length ?? 0, _imageBindings[stageIndex]?.Length ?? 0);
|
||||
|
||||
_scaleChanged = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue