Compare commits

...

6 commits

Author SHA1 Message Date
Keaton
2f25ec8a51 Merge branch 'feature/dsb-ub' into 'master'
Workaround undefined behavior in bad dual source blend states

See merge request ryubing/ryujinx!14
2025-03-30 14:38:51 -05:00
GreemDev
2ea9e945ab Move locales.json to repository root under "assets" folder
See merge request ryubing/ryujinx!20
2025-03-30 02:06:04 -05:00
Yeager
5d8451b41a Update Swedish in locales.json 2025-03-29 20:22:23 -05:00
Isaac Marovitz
c1051a9d6a Return 2025-03-27 18:29:26 -05:00
Isaac Marovitz
27b042ca16 Always declare even in bad state on GLSL 2025-03-27 18:29:26 -05:00
Isaac Marovitz
27b5251bd3 Initial Changes 2025-03-27 18:29:26 -05:00
7 changed files with 38 additions and 24 deletions

View file

@ -4939,7 +4939,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"sv_SE": "Multiplikator för turboläge:",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
@ -4964,7 +4964,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"sv_SE": "Målvärdet för multiplikatorn i turboläget. \n\nLämna den på 200 om du är osäker.",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
@ -4989,7 +4989,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"sv_SE": "Turboläget är en emulatorfunktion som effektivt ökar eller sänker hastigheten när ett spel inte är känsligt för bildfrekvens.\nDu kan växla denna funktion i spelet med en snabbtangent, konfigurerbar i Ryujinx inställningar för snabbtangenter.\n\nLämna den på 200 om du är osäker.",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
@ -10014,7 +10014,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "Enter (блок цифр)",
"sv_SE": "",
"sv_SE": "Enter (numerisk)",
"th_TH": "",
"tr_TR": "",
"uk_UA": "Enter (цифровий блок)",
@ -11064,7 +11064,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "Тачпад",
"sv_SE": "",
"sv_SE": "Pekplatta",
"th_TH": "",
"tr_TR": "",
"uk_UA": "Сенсорна панель",
@ -18189,7 +18189,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"sv_SE": "{0} bilder/s ({1}ms)",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
@ -18214,7 +18214,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"sv_SE": "{0} bilder/s ({1}ms), Turbo ({2}%)",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
@ -23964,7 +23964,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"sv_SE": "Turboläge:",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
@ -23989,7 +23989,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"sv_SE": "Snabbtangenten för turboläge.\nKonfigurera beteendet för turboläge i Ryujinx CPU-inställningar.\n\nLämna Obunden om du är osäker.",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
@ -24014,7 +24014,7 @@
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"sv_SE": "Endast när du trycker ner",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",

View file

@ -15,7 +15,7 @@ namespace Ryujinx.BuildValidationTasks
{
Console.WriteLine("Running Locale Validation Task...");
string path = projectPath + "src/Ryujinx/Assets/locales.json";
string path = projectPath + "assets/locales.json";
string data;
using (StreamReader sr = new(path))

View file

@ -512,13 +512,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
if (context.Definitions.Stage == ShaderStage.Fragment && context.Definitions.DualSourceBlend)
{
IoDefinition firstOutput = outputs.ElementAtOrDefault(0);
IoDefinition secondOutput = outputs.ElementAtOrDefault(1);
if (firstOutput.Location + 1 == secondOutput.Location)
{
DeclareOutputDualSourceBlendAttribute(context, firstOutput.Location);
outputs = outputs.Skip(2);
}
DeclareOutputDualSourceBlendAttribute(context, firstOutput.Location);
outputs = outputs.Skip(2);
}
foreach (IoDefinition ioDefinition in outputs)

View file

@ -181,13 +181,29 @@ namespace Ryujinx.Graphics.Shader.Translation
private static void EmitOutputsInitialization(EmitterContext context, AttributeUsage attributeUsage, IGpuAccessor gpuAccessor, ShaderStage stage)
{
// Compute has no output attributes, and fragment is the last stage, so we
// don't need to initialize outputs on those stages.
if (stage == ShaderStage.Compute || stage == ShaderStage.Fragment)
// Compute has no output attributes, so we
// don't need to initialize outputs on that stage.
if (stage == ShaderStage.Compute)
{
return;
}
if (stage == ShaderStage.Fragment)
{
// Fragment is the last stage, so we don't need to
// initialize outputs unless we're using DSB, in which
// we need to make sure the ouput has a valid value.
if (gpuAccessor.QueryGraphicsState().DualSourceBlendEnable)
{
for (int i = 0; i < 4; i++)
{
context.Store(StorageKind.Output, IoVariable.FragmentOutputColor, null, Const(1), Const(i), ConstF(0));
}
}
return;
}
if (stage == ShaderStage.Vertex)
{
InitializeVertexOutputs(context);

View file

@ -154,7 +154,7 @@ namespace Ryujinx.Ava.Common.Locale
{
Dictionary<LocaleKeys, string> localeStrings = new();
_localeData ??= EmbeddedResources.ReadAllText("Ryujinx/Assets/locales.json")
_localeData ??= EmbeddedResources.ReadAllText("Ryujinx/Assets/Locale.json")
.Into(it => JsonHelper.Deserialize(it, LocalesJsonContext.Default.LocalesJson));
foreach (LocalesEntry locale in _localeData.Value.Locales)

View file

@ -154,7 +154,9 @@
<EmbeddedResource Include="..\..\docs\compatibility.csv" LogicalName="RyujinxGameCompatibilityList">
<Link>Assets\RyujinxGameCompatibility.csv</Link>
</EmbeddedResource>
<EmbeddedResource Include="Assets\locales.json" />
<EmbeddedResource Include="..\..\assets\locales.json">
<Link>Assets\Locale.json</Link>
</EmbeddedResource>
<EmbeddedResource Include="Assets\Styles\Styles.xaml" />
<EmbeddedResource Include="Assets\Icons\Controller_JoyConLeft.svg" />
<EmbeddedResource Include="Assets\Icons\Controller_JoyConPair.svg" />
@ -173,6 +175,6 @@
<EmbeddedResource Include="Assets\UIImages\Logo_Ryujinx_AntiAlias.png" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Assets\locales.json" />
<AdditionalFiles Include="..\..\assets\locales.json" />
</ItemGroup>
</Project>

View file

@ -76,7 +76,7 @@ namespace Ryujinx.Ava.UI.Views.Main
private static IEnumerable<MenuItem> GenerateLanguageMenuItems()
{
const string LocalePath = "Ryujinx/Assets/locales.json";
const string LocalePath = "Ryujinx/Assets/Locale.json";
string languageJson = EmbeddedResources.ReadAllText(LocalePath);