Simplify handling of shader vertex A (#1999)

* Simplify handling of shader vertex A

* Theres no transformation feedback, its transform

* Merge TextureHandlesForCache
This commit is contained in:
gdkchan 2021-02-07 20:42:17 -03:00 committed by GitHub
parent 1319eda8b7
commit 4047477866
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 94 deletions

View file

@ -10,16 +10,12 @@ namespace Ryujinx.Graphics.Shader.Translation
public class TranslatorContext
{
private readonly Block[][] _cfg;
private readonly Block[][] _cfgA;
private ShaderConfig _config;
private ShaderConfig _configA;
public ulong Address { get; }
public ulong AddressA { get; }
public ShaderStage Stage => _config.Stage;
public int Size => _config.Size;
public int SizeA => _configA != null ? _configA.Size : 0;
public HashSet<int> TextureHandlesForCache => _config.TextureHandlesForCache;
@ -27,22 +23,9 @@ namespace Ryujinx.Graphics.Shader.Translation
internal TranslatorContext(ulong address, Block[][] cfg, ShaderConfig config)
{
Address = address;
AddressA = 0;
_config = config;
_configA = null;
_cfg = cfg;
_cfgA = null;
}
internal TranslatorContext(ulong addressA, ulong addressB, Block[][] cfgA, Block[][] cfgB, ShaderConfig configA, ShaderConfig configB)
{
Address = addressB;
AddressA = addressA;
_config = configB;
_configA = configA;
_cfg = cfgB;
_cfgA = cfgA;
Address = address;
_config = config;
_cfg = cfg;
}
private static bool IsUserAttribute(Operand operand)
@ -141,20 +124,19 @@ namespace Ryujinx.Graphics.Shader.Translation
return output;
}
public ShaderProgram Translate(out ShaderProgramInfo shaderProgramInfo)
public ShaderProgram Translate(out ShaderProgramInfo shaderProgramInfo, TranslatorContext other = null)
{
FunctionCode[] code = EmitShader(_cfg, _config);
if (_configA != null)
if (other != null)
{
FunctionCode[] codeA = EmitShader(_cfgA, _configA);
_config.SetUsedFeature(other._config.UsedFeatures);
TextureHandlesForCache.UnionWith(other.TextureHandlesForCache);
_config.SetUsedFeature(_configA.UsedFeatures);
code = Combine(codeA, code);
code = Combine(EmitShader(other._cfg, other._config), code);
}
return Translator.Translate(code, _config, out shaderProgramInfo, SizeA);
return Translator.Translate(code, _config, out shaderProgramInfo);
}
}
}