Add workflow to automatically check code style issues for PRs (#4670)
* Add workflow to perform automated checks for PRs * Downgrade Microsoft.CodeAnalysis to 4.4.0 This is a workaround to fix issues with dotnet-format. See: - https://github.com/dotnet/format/issues/1805 - https://github.com/dotnet/format/issues/1800 * Adjust editorconfig to be more compatible with Ryujinx code-style * Adjust .editorconfig line endings to match .gitattributes * Disable 'prefer switch expression' rule * Remove naming styles These are the default rules, so we don't need to override them. * Silence IDE0060 in .editorconfig * Slightly adjust .editorconfig * Add lost workflow changes * Move .editorconfig comment to the top * .editorconfig: private static readonly fields should be _lowerCamelCase * .editorconfig: Remove alignment for declarations as well * editorconfig: Add rule for local constants * Disable CA1822 for HLE services * Disable CA1822 for ViewModels Bindings won't work with static members, but this issue is silently ignored. * Run dotnet format for the whole solution * Check result code of SDL_GetDisplayBounds * Fix dotnet format style issues * Add missing trailing commas * Update Microsoft.CodeAnalysis.CSharp to 4.6.0 Skipping 4.5.0 since it breaks dotnet format * Restore old default naming rules for dotnet format * Add naming rule exception for CPU tests * checks: Include all files before excluding paths * Fix dotnet format issues * Check dotnet format version * checks: Run dotnet format with severity info again * checks: Disable naming style rules until they won't crash the process anymore * Remove unread private member * checks: Attempt to run analyzers 3 times before giving up * checks: Enable naming style rules again with the new retry logic
This commit is contained in:
parent
487261592e
commit
eb528ae0f0
@ -1,8 +1,7 @@
|
|||||||
# Remove the line below if you want to inherit .editorconfig settings from higher directories
|
# Remove the line below if you want to inherit .editorconfig settings from higher directories
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
# C# files
|
[*]
|
||||||
[*.cs]
|
|
||||||
|
|
||||||
#### Core EditorConfig Options ####
|
#### Core EditorConfig Options ####
|
||||||
|
|
||||||
@ -12,8 +11,11 @@ indent_style = space
|
|||||||
tab_width = 4
|
tab_width = 4
|
||||||
|
|
||||||
# New line preferences
|
# New line preferences
|
||||||
end_of_line = crlf
|
end_of_line = lf
|
||||||
insert_final_newline = false
|
insert_final_newline = true
|
||||||
|
|
||||||
|
# C# files
|
||||||
|
[*.cs]
|
||||||
|
|
||||||
#### .NET Coding Conventions ####
|
#### .NET Coding Conventions ####
|
||||||
|
|
||||||
@ -59,7 +61,7 @@ dotnet_style_prefer_simplified_interpolation = true:suggestion
|
|||||||
dotnet_style_readonly_field = true:suggestion
|
dotnet_style_readonly_field = true:suggestion
|
||||||
|
|
||||||
# Parameter preferences
|
# Parameter preferences
|
||||||
dotnet_code_quality_unused_parameters = all:suggestion
|
dotnet_code_quality_unused_parameters = all:silent
|
||||||
|
|
||||||
#### C# Coding Conventions ####
|
#### C# Coding Conventions ####
|
||||||
|
|
||||||
@ -85,7 +87,7 @@ csharp_style_expression_bodied_properties = true:silent
|
|||||||
# Pattern matching preferences
|
# Pattern matching preferences
|
||||||
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
|
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
|
||||||
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
|
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
|
||||||
csharp_style_prefer_switch_expression = true:suggestion
|
csharp_style_prefer_switch_expression = false:silent
|
||||||
|
|
||||||
# Null-checking preferences
|
# Null-checking preferences
|
||||||
csharp_style_conditional_delegate_call = true:suggestion
|
csharp_style_conditional_delegate_call = true:suggestion
|
||||||
@ -94,6 +96,7 @@ csharp_style_conditional_delegate_call = true:suggestion
|
|||||||
csharp_prefer_static_local_function = true:suggestion
|
csharp_prefer_static_local_function = true:suggestion
|
||||||
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent
|
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent
|
||||||
csharp_style_prefer_readonly_struct = true
|
csharp_style_prefer_readonly_struct = true
|
||||||
|
csharp_style_prefer_method_group_conversion = true
|
||||||
|
|
||||||
# Code-block preferences
|
# Code-block preferences
|
||||||
csharp_prefer_braces = true:silent
|
csharp_prefer_braces = true:silent
|
||||||
@ -109,6 +112,7 @@ csharp_style_prefer_range_operator = true:suggestion
|
|||||||
csharp_style_throw_expression = true:suggestion
|
csharp_style_throw_expression = true:suggestion
|
||||||
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
|
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
|
||||||
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
|
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
|
||||||
|
csharp_style_implicit_object_creation_when_type_is_apparent = true
|
||||||
|
|
||||||
# 'using' directive preferences
|
# 'using' directive preferences
|
||||||
csharp_using_directive_placement = outside_namespace:silent
|
csharp_using_directive_placement = outside_namespace:silent
|
||||||
@ -140,7 +144,6 @@ csharp_space_after_dot = false
|
|||||||
csharp_space_after_keywords_in_control_flow_statements = true
|
csharp_space_after_keywords_in_control_flow_statements = true
|
||||||
csharp_space_after_semicolon_in_for_statement = true
|
csharp_space_after_semicolon_in_for_statement = true
|
||||||
csharp_space_around_binary_operators = before_and_after
|
csharp_space_around_binary_operators = before_and_after
|
||||||
csharp_space_around_declaration_statements = false
|
|
||||||
csharp_space_before_colon_in_inheritance_clause = true
|
csharp_space_before_colon_in_inheritance_clause = true
|
||||||
csharp_space_before_comma = false
|
csharp_space_before_comma = false
|
||||||
csharp_space_before_dot = false
|
csharp_space_before_dot = false
|
||||||
@ -158,23 +161,31 @@ csharp_space_between_square_brackets = false
|
|||||||
|
|
||||||
# Wrapping preferences
|
# Wrapping preferences
|
||||||
csharp_preserve_single_line_blocks = true
|
csharp_preserve_single_line_blocks = true
|
||||||
csharp_preserve_single_line_statements = true
|
csharp_preserve_single_line_statements = false
|
||||||
|
|
||||||
#### Naming styles ####
|
#### Naming styles ####
|
||||||
|
|
||||||
# Naming rules
|
# Naming rules
|
||||||
|
|
||||||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
|
dotnet_naming_rule.interfaces_should_be_prefixed_with_I.severity = suggestion
|
||||||
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
|
dotnet_naming_rule.interfaces_should_be_prefixed_with_I.symbols = interface
|
||||||
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
|
dotnet_naming_rule.interfaces_should_be_prefixed_with_I.style = IPascalCase
|
||||||
|
|
||||||
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
|
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
|
||||||
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
|
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
|
||||||
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
|
dotnet_naming_rule.types_should_be_pascal_case.style = PascalCase
|
||||||
|
|
||||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
|
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
|
||||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
|
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
|
||||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
|
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = PascalCase
|
||||||
|
|
||||||
|
dotnet_naming_rule.private_static_readonly_fields_should_be_camel_case_and_prefixed_with__.symbols = private_static_readonly_fields
|
||||||
|
dotnet_naming_rule.private_static_readonly_fields_should_be_camel_case_and_prefixed_with__.severity = suggestion
|
||||||
|
dotnet_naming_rule.private_static_readonly_fields_should_be_camel_case_and_prefixed_with__.style = _camelCase
|
||||||
|
|
||||||
|
dotnet_naming_rule.local_constants_should_be_pascal_case.symbols = local_constants
|
||||||
|
dotnet_naming_rule.local_constants_should_be_pascal_case.severity = suggestion
|
||||||
|
dotnet_naming_rule.local_constants_should_be_pascal_case.style = PascalCase
|
||||||
|
|
||||||
# Symbol specifications
|
# Symbol specifications
|
||||||
|
|
||||||
@ -190,14 +201,39 @@ dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, meth
|
|||||||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
dotnet_naming_symbols.non_field_members.required_modifiers =
|
dotnet_naming_symbols.non_field_members.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.private_static_readonly_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.private_static_readonly_fields.applicable_accessibilities = private
|
||||||
|
dotnet_naming_symbols.private_static_readonly_fields.required_modifiers = static, readonly
|
||||||
|
|
||||||
|
dotnet_naming_symbols.local_constants.applicable_kinds = local
|
||||||
|
dotnet_naming_symbols.local_constants.applicable_accessibilities = local
|
||||||
|
dotnet_naming_symbols.local_constants.required_modifiers = const
|
||||||
|
|
||||||
# Naming styles
|
# Naming styles
|
||||||
|
|
||||||
dotnet_naming_style.pascal_case.required_prefix =
|
dotnet_naming_style._camelCase.required_prefix = _
|
||||||
dotnet_naming_style.pascal_case.required_suffix =
|
dotnet_naming_style._camelCase.required_suffix =
|
||||||
dotnet_naming_style.pascal_case.word_separator =
|
dotnet_naming_style._camelCase.word_separator =
|
||||||
dotnet_naming_style.pascal_case.capitalization = pascal_case
|
dotnet_naming_style._camelCase.capitalization = camel_case
|
||||||
|
|
||||||
dotnet_naming_style.begins_with_i.required_prefix = I
|
dotnet_naming_style.PascalCase.required_prefix =
|
||||||
dotnet_naming_style.begins_with_i.required_suffix =
|
dotnet_naming_style.PascalCase.required_suffix =
|
||||||
dotnet_naming_style.begins_with_i.word_separator =
|
dotnet_naming_style.PascalCase.word_separator =
|
||||||
dotnet_naming_style.begins_with_i.capitalization = pascal_case
|
dotnet_naming_style.PascalCase.capitalization = pascal_case
|
||||||
|
|
||||||
|
dotnet_naming_style.IPascalCase.required_prefix = I
|
||||||
|
dotnet_naming_style.IPascalCase.required_suffix =
|
||||||
|
dotnet_naming_style.IPascalCase.word_separator =
|
||||||
|
dotnet_naming_style.IPascalCase.capitalization = pascal_case
|
||||||
|
|
||||||
|
[src/Ryujinx.HLE/HOS/Services/**.cs]
|
||||||
|
# Disable "mark members as static" rule for services
|
||||||
|
dotnet_diagnostic.CA1822.severity = none
|
||||||
|
|
||||||
|
[src/Ryujinx.Ava/UI/ViewModels/**.cs]
|
||||||
|
# Disable "mark members as static" rule for ViewModels
|
||||||
|
dotnet_diagnostic.CA1822.severity = none
|
||||||
|
|
||||||
|
[src/Ryujinx.Tests/Cpu/*.cs]
|
||||||
|
# Disable naming rules for CPU tests
|
||||||
|
dotnet_diagnostic.IDE1006.severity = none
|
||||||
|
13
.github/workflows/build.yml
vendored
13
.github/workflows/build.yml
vendored
@ -1,19 +1,10 @@
|
|||||||
name: Build job
|
name: Build job
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_call:
|
||||||
inputs: {}
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
paths-ignore:
|
|
||||||
- '.github/**'
|
|
||||||
- '*.yml'
|
|
||||||
- '*.json'
|
|
||||||
- '*.config'
|
|
||||||
- 'README.md'
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: pr-checks-${{ github.event.number }}
|
group: pr-builds-${{ github.event.number }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
|
71
.github/workflows/checks.yml
vendored
Normal file
71
.github/workflows/checks.yml
vendored
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
name: Perform checks
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
paths:
|
||||||
|
- '**'
|
||||||
|
- '!.github/**'
|
||||||
|
- '!*.yml'
|
||||||
|
- '!*.config'
|
||||||
|
- '!README.md'
|
||||||
|
- '.github/workflows/*.yml'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
checks: write
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: pr-checks-${{ github.event.number }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
format:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: actions/setup-dotnet@v3
|
||||||
|
with:
|
||||||
|
global-json-file: global.json
|
||||||
|
|
||||||
|
- run: dotnet restore
|
||||||
|
|
||||||
|
- name: Print dotnet format version
|
||||||
|
run: dotnet format --version
|
||||||
|
|
||||||
|
- name: Run dotnet format whitespace
|
||||||
|
run: |
|
||||||
|
dotnet format whitespace --verify-no-changes --report ./whitespace-report.json -v d
|
||||||
|
|
||||||
|
- name: Run dotnet format style
|
||||||
|
run: |
|
||||||
|
dotnet format style --severity info --verify-no-changes --report ./style-report.json -v d
|
||||||
|
|
||||||
|
# For some reason this step sometimes fails with exit code 139 (segfault?),
|
||||||
|
# so should that be the case we'll try again (3 tries max).
|
||||||
|
- name: Run dotnet format analyzers
|
||||||
|
run: |
|
||||||
|
attempt=0
|
||||||
|
exit_code=139
|
||||||
|
until [ $attempt -ge 3 ] || [ $exit_code -ne 139 ]; do
|
||||||
|
((attempt+=1))
|
||||||
|
exit_code=0
|
||||||
|
echo "Attempt: ${attempt}/3"
|
||||||
|
dotnet format analyzers --severity info --verify-no-changes --report ./analyzers-report.json -v d || exit_code=$?
|
||||||
|
done
|
||||||
|
exit $exit_code
|
||||||
|
|
||||||
|
- name: Upload report
|
||||||
|
if: failure()
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: dotnet-format
|
||||||
|
path: ./*-report.json
|
||||||
|
|
||||||
|
pr_build:
|
||||||
|
uses: ./.github/workflows/build.yml
|
||||||
|
needs: format
|
||||||
|
secrets: inherit
|
4
.github/workflows/nightly_pr_comment.yml
vendored
4
.github/workflows/nightly_pr_comment.yml
vendored
@ -1,8 +1,10 @@
|
|||||||
name: Comment PR artifacts links
|
name: Comment PR artifacts links
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_run:
|
workflow_run:
|
||||||
workflows: ['Build job']
|
workflows: ['Perform checks']
|
||||||
types: [completed]
|
types: [completed]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pr_comment:
|
pr_comment:
|
||||||
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<PackageVersion Include="jp2masa.Avalonia.Flexbox" Version="0.2.0" />
|
<PackageVersion Include="jp2masa.Avalonia.Flexbox" Version="0.2.0" />
|
||||||
<PackageVersion Include="LibHac" Version="0.18.0" />
|
<PackageVersion Include="LibHac" Version="0.18.0" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.5.0" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.6.0" />
|
||||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
|
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
|
||||||
<PackageVersion Include="Microsoft.IO.RecyclableMemoryStream" Version="2.3.2" />
|
<PackageVersion Include="Microsoft.IO.RecyclableMemoryStream" Version="2.3.2" />
|
||||||
<PackageVersion Include="MsgPack.Cli" Version="1.0.1" />
|
<PackageVersion Include="MsgPack.Cli" Version="1.0.1" />
|
||||||
|
@ -31,7 +31,7 @@ namespace Ryujinx.Audio.Backends.OpenAL
|
|||||||
_stillRunning = true;
|
_stillRunning = true;
|
||||||
_updaterThread = new Thread(Update)
|
_updaterThread = new Thread(Update)
|
||||||
{
|
{
|
||||||
Name = "HardwareDeviceDriver.OpenAL"
|
Name = "HardwareDeviceDriver.OpenAL",
|
||||||
};
|
};
|
||||||
|
|
||||||
_updaterThread.Start();
|
_updaterThread.Start();
|
||||||
|
@ -67,7 +67,7 @@ namespace Ryujinx.Audio.Backends.OpenAL
|
|||||||
{
|
{
|
||||||
DriverIdentifier = buffer.DataPointer,
|
DriverIdentifier = buffer.DataPointer,
|
||||||
BufferId = AL.GenBuffer(),
|
BufferId = AL.GenBuffer(),
|
||||||
SampleCount = GetSampleCount(buffer)
|
SampleCount = GetSampleCount(buffer),
|
||||||
};
|
};
|
||||||
|
|
||||||
AL.BufferData(driverBuffer.BufferId, _targetFormat, buffer.Data, (int)RequestedSampleRate);
|
AL.BufferData(driverBuffer.BufferId, _targetFormat, buffer.Data, (int)RequestedSampleRate);
|
||||||
|
@ -7,7 +7,6 @@ using System;
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
using static Ryujinx.Audio.Integration.IHardwareDeviceDriver;
|
using static Ryujinx.Audio.Integration.IHardwareDeviceDriver;
|
||||||
using static SDL2.SDL;
|
using static SDL2.SDL;
|
||||||
|
|
||||||
@ -111,7 +110,7 @@ namespace Ryujinx.Audio.Backends.SDL2
|
|||||||
channels = (byte)requestedChannelCount,
|
channels = (byte)requestedChannelCount,
|
||||||
format = GetSDL2Format(requestedSampleFormat),
|
format = GetSDL2Format(requestedSampleFormat),
|
||||||
freq = (int)requestedSampleRate,
|
freq = (int)requestedSampleRate,
|
||||||
samples = (ushort)sampleCount
|
samples = (ushort)sampleCount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,6 @@
|
|||||||
Alsa = 3,
|
Alsa = 3,
|
||||||
CoreAudio = 4,
|
CoreAudio = 4,
|
||||||
Wasapi = 5,
|
Wasapi = 5,
|
||||||
Dummy = 6
|
Dummy = 6,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
public enum SoundIoDeviceAim
|
public enum SoundIoDeviceAim
|
||||||
{
|
{
|
||||||
SoundIoDeviceAimInput = 0,
|
SoundIoDeviceAimInput = 0,
|
||||||
SoundIoDeviceAimOutput = 1
|
SoundIoDeviceAimOutput = 1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,6 @@
|
|||||||
{
|
{
|
||||||
List,
|
List,
|
||||||
Grid,
|
Grid,
|
||||||
Chip
|
Chip,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ namespace Ryujinx.Common
|
|||||||
_workerThread = new Thread(DoWork)
|
_workerThread = new Thread(DoWork)
|
||||||
{
|
{
|
||||||
Name = name,
|
Name = name,
|
||||||
IsBackground = true
|
IsBackground = true,
|
||||||
};
|
};
|
||||||
_workerThread.Start();
|
_workerThread.Start();
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@ namespace Ryujinx.Common.Configuration
|
|||||||
{
|
{
|
||||||
Auto,
|
Auto,
|
||||||
Off,
|
Off,
|
||||||
On
|
On,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,6 @@ namespace Ryujinx.Common.Configuration
|
|||||||
public enum GraphicsBackend
|
public enum GraphicsBackend
|
||||||
{
|
{
|
||||||
Vulkan,
|
Vulkan,
|
||||||
OpenGl
|
OpenGl,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,6 @@ namespace Ryujinx.Common.Configuration
|
|||||||
None,
|
None,
|
||||||
Error,
|
Error,
|
||||||
Slowdowns,
|
Slowdowns,
|
||||||
All
|
All,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@ namespace Ryujinx.Common.Configuration.Hid.Controller.Motion
|
|||||||
{
|
{
|
||||||
Invalid,
|
Invalid,
|
||||||
GamepadDriver,
|
GamepadDriver,
|
||||||
CemuHook
|
CemuHook,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@ namespace Ryujinx.Common.Configuration
|
|||||||
{
|
{
|
||||||
SoftwarePageTable,
|
SoftwarePageTable,
|
||||||
HostMapped,
|
HostMapped,
|
||||||
HostMappedUnsafe
|
HostMappedUnsafe,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,6 @@
|
|||||||
|
|
||||||
OglThreadControlDefault = 0,
|
OglThreadControlDefault = 0,
|
||||||
OglThreadControlEnable = 1,
|
OglThreadControlEnable = 1,
|
||||||
OglThreadControlDisable = 2
|
OglThreadControlDisable = 2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,6 @@ namespace Ryujinx.Common.Logging
|
|||||||
Guest,
|
Guest,
|
||||||
AccessLog,
|
AccessLog,
|
||||||
Notice,
|
Notice,
|
||||||
Trace
|
Trace,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,7 +179,7 @@ namespace Ryujinx.Cpu
|
|||||||
{
|
{
|
||||||
addressSpace = null;
|
addressSpace = null;
|
||||||
|
|
||||||
const MemoryAllocationFlags asFlags = MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible;
|
const MemoryAllocationFlags AsFlags = MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible;
|
||||||
|
|
||||||
ulong minAddressSpaceSize = Math.Min(asSize, 1UL << 36);
|
ulong minAddressSpaceSize = Math.Min(asSize, 1UL << 36);
|
||||||
|
|
||||||
@ -191,8 +191,8 @@ namespace Ryujinx.Cpu
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
baseMemory = new MemoryBlock(addressSpaceSize, asFlags);
|
baseMemory = new MemoryBlock(addressSpaceSize, AsFlags);
|
||||||
mirrorMemory = new MemoryBlock(addressSpaceSize, asFlags);
|
mirrorMemory = new MemoryBlock(addressSpaceSize, AsFlags);
|
||||||
addressSpace = new AddressSpace(backingMemory, baseMemory, mirrorMemory, addressSpaceSize, supports4KBPages);
|
addressSpace = new AddressSpace(backingMemory, baseMemory, mirrorMemory, addressSpaceSize, supports4KBPages);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -22,6 +22,6 @@ namespace Ryujinx.Cpu.AppleHv.Arm
|
|||||||
|
|
||||||
UserNoneKernelReadWrite = (1UL << (int)PxnShift) | (1UL << (int)UxnShift) | (0UL << (int)ApShift),
|
UserNoneKernelReadWrite = (1UL << (int)PxnShift) | (1UL << (int)UxnShift) | (0UL << (int)ApShift),
|
||||||
UserNoneKernelRead = (1UL << (int)PxnShift) | (1UL << (int)UxnShift) | (2UL << (int)ApShift),
|
UserNoneKernelRead = (1UL << (int)PxnShift) | (1UL << (int)UxnShift) | (2UL << (int)ApShift),
|
||||||
UserReadKernelRead = (1UL << (int)PxnShift) | (1UL << (int)UxnShift) | (3UL << (int)ApShift)
|
UserReadKernelRead = (1UL << (int)PxnShift) | (1UL << (int)UxnShift) | (3UL << (int)ApShift),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ namespace Ryujinx.Graphics.Device
|
|||||||
TypeCode.Double => sizeof(double),
|
TypeCode.Double => sizeof(double),
|
||||||
TypeCode.Decimal => sizeof(decimal),
|
TypeCode.Decimal => sizeof(decimal),
|
||||||
TypeCode.Boolean => sizeof(bool),
|
TypeCode.Boolean => sizeof(bool),
|
||||||
_ => throw new ArgumentException($"Length for type \"{type.Name}\" is unknown.")
|
_ => throw new ArgumentException($"Length for type \"{type.Name}\" is unknown."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -412,7 +412,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading
|
|||||||
|
|
||||||
public ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, float divisor, bool hostReserved)
|
public ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, float divisor, bool hostReserved)
|
||||||
{
|
{
|
||||||
ThreadedCounterEvent evt = new ThreadedCounterEvent(this, type, _lastSampleCounterClear);
|
ThreadedCounterEvent evt = new(this, type, _lastSampleCounterClear);
|
||||||
New<ReportCounterCommand>().Set(Ref(evt), type, Ref(resultHandler), divisor, hostReserved);
|
New<ReportCounterCommand>().Set(Ref(evt), type, Ref(resultHandler), divisor, hostReserved);
|
||||||
QueueCommand();
|
QueueCommand();
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
|
|||||||
X = scale * 2f / viewportWidth,
|
X = scale * 2f / viewportWidth,
|
||||||
Y = scale * 2f / viewportHeight,
|
Y = scale * 2f / viewportHeight,
|
||||||
Z = 1,
|
Z = 1,
|
||||||
W = disableTransformF
|
W = disableTransformF,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -210,7 +210,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
|
|||||||
|
|
||||||
ReadOnlySpan<byte> data = MemoryMarshal.Cast<SupportBuffer, byte>(MemoryMarshal.CreateSpan(ref _data, 1));
|
ReadOnlySpan<byte> data = MemoryMarshal.Cast<SupportBuffer, byte>(MemoryMarshal.CreateSpan(ref _data, 1));
|
||||||
|
|
||||||
_renderer.SetBufferData(_handle, _startOffset, data.Slice(_startOffset, _endOffset - _startOffset));
|
_renderer.SetBufferData(_handle, _startOffset, data[_startOffset.._endOffset]);
|
||||||
|
|
||||||
_startOffset = -1;
|
_startOffset = -1;
|
||||||
_endOffset = -1;
|
_endOffset = -1;
|
||||||
|
@ -8,8 +8,6 @@ using System.Threading;
|
|||||||
|
|
||||||
namespace Ryujinx.Graphics.Gpu
|
namespace Ryujinx.Graphics.Gpu
|
||||||
{
|
{
|
||||||
using Texture = Image.Texture;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// GPU image presentation window.
|
/// GPU image presentation window.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -202,13 +200,13 @@ namespace Ryujinx.Graphics.Gpu
|
|||||||
{
|
{
|
||||||
pt.AcquireCallback(_context, pt.UserObj);
|
pt.AcquireCallback(_context, pt.UserObj);
|
||||||
|
|
||||||
Texture texture = pt.Cache.FindOrCreateTexture(null, TextureSearchFlags.WithUpscale, pt.Info, 0, pt.Range);
|
Image.Texture texture = pt.Cache.FindOrCreateTexture(null, TextureSearchFlags.WithUpscale, pt.Info, 0, pt.Range);
|
||||||
|
|
||||||
pt.Cache.Tick();
|
pt.Cache.Tick();
|
||||||
|
|
||||||
texture.SynchronizeMemory();
|
texture.SynchronizeMemory();
|
||||||
|
|
||||||
ImageCrop crop = new ImageCrop(
|
ImageCrop crop = new(
|
||||||
(int)(pt.Crop.Left * texture.ScaleFactor),
|
(int)(pt.Crop.Left * texture.ScaleFactor),
|
||||||
(int)MathF.Ceiling(pt.Crop.Right * texture.ScaleFactor),
|
(int)MathF.Ceiling(pt.Crop.Right * texture.ScaleFactor),
|
||||||
(int)(pt.Crop.Top * texture.ScaleFactor),
|
(int)(pt.Crop.Top * texture.ScaleFactor),
|
||||||
|
@ -15,6 +15,6 @@
|
|||||||
Tsec = 0xe0,
|
Tsec = 0xe0,
|
||||||
Tsecb = 0xe1,
|
Tsecb = 0xe1,
|
||||||
Nvjpg = 0xc0,
|
Nvjpg = 0xc0,
|
||||||
Nvdec = 0xf0
|
Nvdec = 0xf0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ namespace Ryujinx.Graphics.Host1x
|
|||||||
_syncMgr = syncMgr;
|
_syncMgr = syncMgr;
|
||||||
_state = new DeviceState<Host1xClassRegisters>(new Dictionary<string, RwCallback>
|
_state = new DeviceState<Host1xClassRegisters>(new Dictionary<string, RwCallback>
|
||||||
{
|
{
|
||||||
{ nameof(Host1xClassRegisters.WaitSyncpt32), new RwCallback(WaitSyncpt32, null) }
|
{ nameof(Host1xClassRegisters.WaitSyncpt32), new RwCallback(WaitSyncpt32, null) },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,6 @@
|
|||||||
NonIncrW,
|
NonIncrW,
|
||||||
GatherW,
|
GatherW,
|
||||||
RestartW,
|
RestartW,
|
||||||
Extend
|
Extend,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ namespace Ryujinx.Graphics.Host1x
|
|||||||
_state = new DeviceState<ThiRegisters>(new Dictionary<string, RwCallback>
|
_state = new DeviceState<ThiRegisters>(new Dictionary<string, RwCallback>
|
||||||
{
|
{
|
||||||
{ nameof(ThiRegisters.IncrSyncpt), new RwCallback(IncrSyncpt, null) },
|
{ nameof(ThiRegisters.IncrSyncpt), new RwCallback(IncrSyncpt, null) },
|
||||||
{ nameof(ThiRegisters.Method1), new RwCallback(Method1, null) }
|
{ nameof(ThiRegisters.Method1), new RwCallback(Method1, null) },
|
||||||
});
|
});
|
||||||
|
|
||||||
_previousContextId = -1;
|
_previousContextId = -1;
|
||||||
|
@ -127,7 +127,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.H264
|
|||||||
35, 42, 49, 56, 57, 50, 43, 36,
|
35, 42, 49, 56, 57, 50, 43, 36,
|
||||||
29, 22, 15, 23, 30, 37, 44, 51,
|
29, 22, 15, 23, 30, 37, 44, 51,
|
||||||
58, 59, 52, 45, 38, 31, 39, 46,
|
58, 59, 52, 45, 38, 31, 39, 46,
|
||||||
53, 60, 61, 54, 47, 55, 62, 63
|
53, 60, 61, 54, 47, 55, 62, 63,
|
||||||
};
|
};
|
||||||
|
|
||||||
private static ReadOnlySpan<byte> ZigZagScan => new byte[]
|
private static ReadOnlySpan<byte> ZigZagScan => new byte[]
|
||||||
@ -135,7 +135,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.H264
|
|||||||
0 + 0 * 4, 1 + 0 * 4, 0 + 1 * 4, 0 + 2 * 4,
|
0 + 0 * 4, 1 + 0 * 4, 0 + 1 * 4, 0 + 2 * 4,
|
||||||
1 + 1 * 4, 2 + 0 * 4, 3 + 0 * 4, 2 + 1 * 4,
|
1 + 1 * 4, 2 + 0 * 4, 3 + 0 * 4, 2 + 1 * 4,
|
||||||
1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4,
|
1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4,
|
||||||
3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4
|
3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
private static void WriteScalingList(ref H264BitStreamWriter writer, IArray<byte> list)
|
private static void WriteScalingList(ref H264BitStreamWriter writer, IArray<byte> list)
|
||||||
|
@ -10,6 +10,6 @@
|
|||||||
Verbose = 40,
|
Verbose = 40,
|
||||||
Debug = 48,
|
Debug = 48,
|
||||||
Trace = 56,
|
Trace = 56,
|
||||||
MaxOffset = 64
|
MaxOffset = 64,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
|
|||||||
private static readonly Dictionary<string, (int, int)> _librariesWhitelist = new()
|
private static readonly Dictionary<string, (int, int)> _librariesWhitelist = new()
|
||||||
{
|
{
|
||||||
{ AvCodecLibraryName, (58, 59) },
|
{ AvCodecLibraryName, (58, 59) },
|
||||||
{ AvUtilLibraryName, (56, 57) }
|
{ AvUtilLibraryName, (56, 57) },
|
||||||
};
|
};
|
||||||
|
|
||||||
private static string FormatLibraryNameForCurrentOs(string libraryName, int version)
|
private static string FormatLibraryNameForCurrentOs(string libraryName, int version)
|
||||||
|
@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.Nvdec
|
|||||||
_rm = new ResourceManager(gmm, new SurfaceCache(gmm));
|
_rm = new ResourceManager(gmm, new SurfaceCache(gmm));
|
||||||
_state = new DeviceState<NvdecRegisters>(new Dictionary<string, RwCallback>
|
_state = new DeviceState<NvdecRegisters>(new Dictionary<string, RwCallback>
|
||||||
{
|
{
|
||||||
{ nameof(NvdecRegisters.Execute), new RwCallback(Execute, null) }
|
{ nameof(NvdecRegisters.Execute), new RwCallback(Execute, null) },
|
||||||
});
|
});
|
||||||
_contexts = new ConcurrentDictionary<long, NvdecDecoderContext>();
|
_contexts = new ConcurrentDictionary<long, NvdecDecoderContext>();
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,7 @@ namespace Ryujinx.Graphics.Nvdec.Types.H264
|
|||||||
FrameType = 0,
|
FrameType = 0,
|
||||||
PicWidthInMbsMinus1 = PicWidthInMbs - 1,
|
PicWidthInMbsMinus1 = PicWidthInMbs - 1,
|
||||||
PicHeightInMapUnitsMinus1 = (PicHeightInMbs >> (FrameMbsOnlyFlag != 0 ? 0 : 1)) - 1,
|
PicHeightInMapUnitsMinus1 = (PicHeightInMbs >> (FrameMbsOnlyFlag != 0 ? 0 : 1)) - 1,
|
||||||
QpprimeYZeroTransformBypassFlag = QpprimeYZeroTransformBypassFlag
|
QpprimeYZeroTransformBypassFlag = QpprimeYZeroTransformBypassFlag,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp8
|
|||||||
FirstPartSize = FirstPartSize,
|
FirstPartSize = FirstPartSize,
|
||||||
Version = Version,
|
Version = Version,
|
||||||
FrameWidth = FrameWidth,
|
FrameWidth = FrameWidth,
|
||||||
FrameHeight = FrameHeight
|
FrameHeight = FrameHeight,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,6 @@
|
|||||||
FrameSizeChanged = 1 << 2,
|
FrameSizeChanged = 1 << 2,
|
||||||
ErrorResilientMode = 1 << 3,
|
ErrorResilientMode = 1 << 3,
|
||||||
LastShowFrame = 1 << 4,
|
LastShowFrame = 1 << 4,
|
||||||
IntraOnly = 1 << 5
|
IntraOnly = 1 << 5,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
|
|||||||
SegmentFeatureData = Seg.FeatureData,
|
SegmentFeatureData = Seg.FeatureData,
|
||||||
ModeRefDeltaEnabled = Lf.ModeRefDeltaEnabled != 0,
|
ModeRefDeltaEnabled = Lf.ModeRefDeltaEnabled != 0,
|
||||||
RefDeltas = Lf.RefDeltas,
|
RefDeltas = Lf.RefDeltas,
|
||||||
ModeDeltas = Lf.ModeDeltas
|
ModeDeltas = Lf.ModeDeltas,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -668,7 +668,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
ShaderStage.TessellationEvaluation => ShaderType.TessEvaluationShader,
|
ShaderStage.TessellationEvaluation => ShaderType.TessEvaluationShader,
|
||||||
ShaderStage.Geometry => ShaderType.GeometryShader,
|
ShaderStage.Geometry => ShaderType.GeometryShader,
|
||||||
ShaderStage.Fragment => ShaderType.FragmentShader,
|
ShaderStage.Fragment => ShaderType.FragmentShader,
|
||||||
_ => ShaderType.VertexShader
|
_ => ShaderType.VertexShader,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
AmdUnix,
|
AmdUnix,
|
||||||
IntelWindows,
|
IntelWindows,
|
||||||
IntelUnix,
|
IntelUnix,
|
||||||
Nvidia
|
Nvidia,
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly Lazy<GpuVendor> _gpuVendor = new(GetGpuVendor);
|
private static readonly Lazy<GpuVendor> _gpuVendor = new(GetGpuVendor);
|
||||||
|
@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
info.BorderColor.Red,
|
info.BorderColor.Red,
|
||||||
info.BorderColor.Green,
|
info.BorderColor.Green,
|
||||||
info.BorderColor.Blue,
|
info.BorderColor.Blue,
|
||||||
info.BorderColor.Alpha
|
info.BorderColor.Alpha,
|
||||||
};
|
};
|
||||||
|
|
||||||
GL.SamplerParameter(Handle, SamplerParameterName.TextureBorderColor, borderColor);
|
GL.SamplerParameter(Handle, SamplerParameterName.TextureBorderColor, borderColor);
|
||||||
|
@ -133,7 +133,7 @@ void main()
|
|||||||
1 => SizedInternalFormat.R8ui,
|
1 => SizedInternalFormat.R8ui,
|
||||||
2 => SizedInternalFormat.Rg8ui,
|
2 => SizedInternalFormat.Rg8ui,
|
||||||
4 => SizedInternalFormat.Rgba8ui,
|
4 => SizedInternalFormat.Rgba8ui,
|
||||||
_ => throw new ArgumentException($"Invalid components count {componentsCount}.")
|
_ => throw new ArgumentException($"Invalid components count {componentsCount}."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else if (componentSize == 2)
|
else if (componentSize == 2)
|
||||||
@ -143,7 +143,7 @@ void main()
|
|||||||
1 => SizedInternalFormat.R16ui,
|
1 => SizedInternalFormat.R16ui,
|
||||||
2 => SizedInternalFormat.Rg16ui,
|
2 => SizedInternalFormat.Rg16ui,
|
||||||
4 => SizedInternalFormat.Rgba16ui,
|
4 => SizedInternalFormat.Rgba16ui,
|
||||||
_ => throw new ArgumentException($"Invalid components count {componentsCount}.")
|
_ => throw new ArgumentException($"Invalid components count {componentsCount}."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else if (componentSize == 4)
|
else if (componentSize == 4)
|
||||||
@ -153,7 +153,7 @@ void main()
|
|||||||
1 => SizedInternalFormat.R32ui,
|
1 => SizedInternalFormat.R32ui,
|
||||||
2 => SizedInternalFormat.Rg32ui,
|
2 => SizedInternalFormat.Rg32ui,
|
||||||
4 => SizedInternalFormat.Rgba32ui,
|
4 => SizedInternalFormat.Rgba32ui,
|
||||||
_ => throw new ArgumentException($"Invalid components count {componentsCount}.")
|
_ => throw new ArgumentException($"Invalid components count {componentsCount}."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -173,7 +173,7 @@ void main()
|
|||||||
4 => SizedInternalFormat.R32ui,
|
4 => SizedInternalFormat.R32ui,
|
||||||
8 => SizedInternalFormat.Rg32ui,
|
8 => SizedInternalFormat.Rg32ui,
|
||||||
16 => SizedInternalFormat.Rgba32ui,
|
16 => SizedInternalFormat.Rgba32ui,
|
||||||
_ => throw new ArgumentException($"Invalid bytes per pixel {bytesPerPixel}.")
|
_ => throw new ArgumentException($"Invalid bytes per pixel {bytesPerPixel}."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
(int)Info.SwizzleR.Convert(),
|
(int)Info.SwizzleR.Convert(),
|
||||||
(int)Info.SwizzleG.Convert(),
|
(int)Info.SwizzleG.Convert(),
|
||||||
(int)Info.SwizzleB.Convert(),
|
(int)Info.SwizzleB.Convert(),
|
||||||
(int)Info.SwizzleA.Convert()
|
(int)Info.SwizzleA.Convert(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Info.Format == Format.A1B5G5R5Unorm)
|
if (Info.Format == Format.A1B5G5R5Unorm)
|
||||||
@ -210,7 +210,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
{
|
{
|
||||||
Target.Texture2DMultisample => Target.Texture2D,
|
Target.Texture2DMultisample => Target.Texture2D,
|
||||||
Target.Texture2DMultisampleArray => Target.Texture2DArray,
|
Target.Texture2DMultisampleArray => Target.Texture2DArray,
|
||||||
_ => Target
|
_ => Target,
|
||||||
};
|
};
|
||||||
|
|
||||||
TextureView intermmediate = _renderer.TextureCopy.IntermediatePool.GetOrCreateWithAtLeast(
|
TextureView intermmediate = _renderer.TextureCopy.IntermediatePool.GetOrCreateWithAtLeast(
|
||||||
@ -354,7 +354,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
TextureTarget.TextureCubeMapArray => (layer / 6) * mipSize,
|
TextureTarget.TextureCubeMapArray => (layer / 6) * mipSize,
|
||||||
TextureTarget.Texture1DArray => layer * mipSize,
|
TextureTarget.Texture1DArray => layer * mipSize,
|
||||||
TextureTarget.Texture2DArray => layer * mipSize,
|
TextureTarget.Texture2DArray => layer * mipSize,
|
||||||
_ => 0
|
_ => 0,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,7 +210,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
GL.Arb.MaxShaderCompilerThreads(Math.Min(Environment.ProcessorCount, 8));
|
GL.Arb.MaxShaderCompilerThreads(Math.Min(Environment.ProcessorCount, 8));
|
||||||
}
|
}
|
||||||
|
|
||||||
_counters.Initialize(_pipeline);
|
_counters.Initialize();
|
||||||
|
|
||||||
// This is required to disable [0, 1] clamping for SNorm outputs on compatibility profiles.
|
// This is required to disable [0, 1] clamping for SNorm outputs on compatibility profiles.
|
||||||
// This call is expected to fail if we're running with a core profile,
|
// This call is expected to fail if we're running with a core profile,
|
||||||
|
@ -5,7 +5,6 @@ using Ryujinx.Graphics.OpenGL.Image;
|
|||||||
using Ryujinx.Graphics.OpenGL.Queries;
|
using Ryujinx.Graphics.OpenGL.Queries;
|
||||||
using Ryujinx.Graphics.Shader;
|
using Ryujinx.Graphics.Shader;
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
|
|
||||||
namespace Ryujinx.Graphics.OpenGL
|
namespace Ryujinx.Graphics.OpenGL
|
||||||
{
|
{
|
||||||
@ -44,7 +43,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
|
|
||||||
private CounterQueueEvent _activeConditionalRender;
|
private CounterQueueEvent _activeConditionalRender;
|
||||||
|
|
||||||
private Vector4<int>[] _fpIsBgra = new Vector4<int>[SupportBuffer.FragmentIsBgraCount];
|
private readonly Vector4<int>[] _fpIsBgra = new Vector4<int>[SupportBuffer.FragmentIsBgraCount];
|
||||||
|
|
||||||
private readonly (TextureBase, Format)[] _images;
|
private readonly (TextureBase, Format)[] _images;
|
||||||
private TextureBase _unit0Texture;
|
private TextureBase _unit0Texture;
|
||||||
|
@ -13,8 +13,6 @@ namespace Ryujinx.Graphics.OpenGL.Queries
|
|||||||
public CounterType Type { get; }
|
public CounterType Type { get; }
|
||||||
public bool Disposed { get; private set; }
|
public bool Disposed { get; private set; }
|
||||||
|
|
||||||
private readonly Pipeline _pipeline;
|
|
||||||
|
|
||||||
private readonly Queue<CounterQueueEvent> _events = new();
|
private readonly Queue<CounterQueueEvent> _events = new();
|
||||||
private CounterQueueEvent _current;
|
private CounterQueueEvent _current;
|
||||||
|
|
||||||
@ -30,12 +28,10 @@ namespace Ryujinx.Graphics.OpenGL.Queries
|
|||||||
|
|
||||||
private readonly Thread _consumerThread;
|
private readonly Thread _consumerThread;
|
||||||
|
|
||||||
internal CounterQueue(Pipeline pipeline, CounterType type)
|
internal CounterQueue(CounterType type)
|
||||||
{
|
{
|
||||||
Type = type;
|
Type = type;
|
||||||
|
|
||||||
_pipeline = pipeline;
|
|
||||||
|
|
||||||
QueryTarget glType = GetTarget(Type);
|
QueryTarget glType = GetTarget(Type);
|
||||||
|
|
||||||
_queryPool = new Queue<BufferedQuery>(QueryPoolInitialSize);
|
_queryPool = new Queue<BufferedQuery>(QueryPoolInitialSize);
|
||||||
|
@ -14,12 +14,12 @@ namespace Ryujinx.Graphics.OpenGL.Queries
|
|||||||
_counterQueues = new CounterQueue[count];
|
_counterQueues = new CounterQueue[count];
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize(Pipeline pipeline)
|
public void Initialize()
|
||||||
{
|
{
|
||||||
for (int index = 0; index < _counterQueues.Length; index++)
|
for (int index = 0; index < _counterQueues.Length; index++)
|
||||||
{
|
{
|
||||||
CounterType type = (CounterType)index;
|
CounterType type = (CounterType)index;
|
||||||
_counterQueues[index] = new CounterQueue(pipeline, type);
|
_counterQueues[index] = new CounterQueue(type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
{
|
{
|
||||||
Info = view.Info,
|
Info = view.Info,
|
||||||
View = view,
|
View = view,
|
||||||
RemainingFrames = DisposedLiveFrames
|
RemainingFrames = DisposedLiveFrames,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
SyncHandle handle = new()
|
SyncHandle handle = new()
|
||||||
{
|
{
|
||||||
ID = id,
|
ID = id,
|
||||||
Handle = GL.FenceSync(SyncCondition.SyncGpuCommandsComplete, WaitSyncFlags.None)
|
Handle = GL.FenceSync(SyncCondition.SyncGpuCommandsComplete, WaitSyncFlags.None),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.Graphics.Shader
|
namespace Ryujinx.Graphics.Shader
|
||||||
{
|
{
|
||||||
public struct BufferDescriptor
|
public readonly struct BufferDescriptor
|
||||||
{
|
{
|
||||||
// New fields should be added to the end of the struct to keep disk shader cache compatibility.
|
// New fields should be added to the end of the struct to keep disk shader cache compatibility.
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
|
|||||||
{
|
{
|
||||||
class OperandManager
|
class OperandManager
|
||||||
{
|
{
|
||||||
private Dictionary<AstOperand, string> _locals;
|
private readonly Dictionary<AstOperand, string> _locals;
|
||||||
|
|
||||||
public OperandManager()
|
public OperandManager()
|
||||||
{
|
{
|
||||||
|
@ -13,8 +13,6 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
|||||||
{
|
{
|
||||||
static class Declarations
|
static class Declarations
|
||||||
{
|
{
|
||||||
private static readonly string[] _stagePrefixes = { "cp", "vp", "tcp", "tep", "gp", "fp" };
|
|
||||||
|
|
||||||
public static void DeclareParameters(CodeGenContext context, StructuredFunction function)
|
public static void DeclareParameters(CodeGenContext context, StructuredFunction function)
|
||||||
{
|
{
|
||||||
DeclareParameters(context, function.InArguments, 0);
|
DeclareParameters(context, function.InArguments, 0);
|
||||||
@ -192,7 +190,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
|||||||
SamplerType.Texture3D => Dim.Dim3D,
|
SamplerType.Texture3D => Dim.Dim3D,
|
||||||
SamplerType.TextureCube => Dim.Cube,
|
SamplerType.TextureCube => Dim.Cube,
|
||||||
SamplerType.TextureBuffer => Dim.Buffer,
|
SamplerType.TextureBuffer => Dim.Buffer,
|
||||||
_ => throw new InvalidOperationException($"Invalid sampler type \"{sampler.Type & SamplerType.Mask}\".")
|
_ => throw new InvalidOperationException($"Invalid sampler type \"{sampler.Type & SamplerType.Mask}\"."),
|
||||||
};
|
};
|
||||||
|
|
||||||
var imageType = context.TypeImage(
|
var imageType = context.TypeImage(
|
||||||
@ -519,10 +517,5 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
|||||||
: (isOutput ? context.Outputs : context.Inputs);
|
: (isOutput ? context.Outputs : context.Inputs);
|
||||||
dict.Add(ioDefinition, spvVar);
|
dict.Add(ioDefinition, spvVar);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetStagePrefix(ShaderStage stage)
|
|
||||||
{
|
|
||||||
return _stagePrefixes[(int)stage];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.Graphics.Shader
|
namespace Ryujinx.Graphics.Shader
|
||||||
{
|
{
|
||||||
public struct TextureDescriptor
|
public readonly struct TextureDescriptor
|
||||||
{
|
{
|
||||||
// New fields should be added to the end of the struct to keep disk shader cache compatibility.
|
// New fields should be added to the end of the struct to keep disk shader cache compatibility.
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ namespace Ryujinx.Graphics.Shader.Translation
|
|||||||
{
|
{
|
||||||
AccurateType = accurateType,
|
AccurateType = accurateType,
|
||||||
Type = type,
|
Type = type,
|
||||||
UsageFlags = usageFlags
|
UsageFlags = usageFlags,
|
||||||
};
|
};
|
||||||
|
|
||||||
int binding;
|
int binding;
|
||||||
|
@ -889,7 +889,7 @@ namespace Ryujinx.Graphics.Texture.Astc
|
|||||||
0 => 0,
|
0 => 0,
|
||||||
1 => 32,
|
1 => 32,
|
||||||
2 => 63,
|
2 => 63,
|
||||||
_ => 0
|
_ => 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -942,7 +942,7 @@ namespace Ryujinx.Graphics.Texture.Astc
|
|||||||
2 => 32,
|
2 => 32,
|
||||||
3 => 47,
|
3 => 47,
|
||||||
4 => 63,
|
4 => 63,
|
||||||
_ => 0
|
_ => 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.Texture.Astc
|
|||||||
{
|
{
|
||||||
JustBits,
|
JustBits,
|
||||||
Quint,
|
Quint,
|
||||||
Trit
|
Trit,
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly EIntegerEncoding _encoding;
|
readonly EIntegerEncoding _encoding;
|
||||||
@ -162,7 +162,7 @@ namespace Ryujinx.Graphics.Texture.Astc
|
|||||||
IntegerEncoded intEncoded = new(EIntegerEncoding.Quint, numberBitsPerValue)
|
IntegerEncoded intEncoded = new(EIntegerEncoding.Quint, numberBitsPerValue)
|
||||||
{
|
{
|
||||||
BitValue = m[i],
|
BitValue = m[i],
|
||||||
QuintValue = encodings[i]
|
QuintValue = encodings[i],
|
||||||
};
|
};
|
||||||
|
|
||||||
listIntegerEncoded.Add(ref intEncoded);
|
listIntegerEncoded.Add(ref intEncoded);
|
||||||
@ -309,7 +309,7 @@ namespace Ryujinx.Graphics.Texture.Astc
|
|||||||
2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 0, 2, 1, 1, 2,
|
2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 0, 2, 1, 1, 2,
|
||||||
1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2,
|
1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2,
|
||||||
0, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
0, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 1, 2, 2, 2
|
2, 1, 2, 2, 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
private static ReadOnlySpan<byte> QuintEncodings => new byte[]
|
private static ReadOnlySpan<byte> QuintEncodings => new byte[]
|
||||||
@ -339,7 +339,7 @@ namespace Ryujinx.Graphics.Texture.Astc
|
|||||||
0, 1, 4, 1, 1, 4, 0, 2, 3, 1, 2, 3, 2, 2, 3,
|
0, 1, 4, 1, 1, 4, 0, 2, 3, 1, 2, 3, 2, 2, 3,
|
||||||
3, 2, 3, 4, 2, 3, 2, 4, 3, 0, 2, 4, 1, 2, 4,
|
3, 2, 3, 4, 2, 3, 2, 4, 3, 0, 2, 4, 1, 2, 4,
|
||||||
0, 3, 3, 1, 3, 3, 2, 3, 3, 3, 3, 3, 4, 3, 3,
|
0, 3, 3, 1, 3, 3, 2, 3, 3, 3, 3, 3, 4, 3, 3,
|
||||||
3, 4, 3, 0, 3, 4, 1, 3, 4
|
3, 4, 3, 0, 3, 4, 1, 3, 4,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,12 +21,12 @@ namespace Ryujinx.Graphics.Texture
|
|||||||
new int[] { 18, 60, -18, -60 },
|
new int[] { 18, 60, -18, -60 },
|
||||||
new int[] { 24, 80, -24, -80 },
|
new int[] { 24, 80, -24, -80 },
|
||||||
new int[] { 33, 106, -33, -106 },
|
new int[] { 33, 106, -33, -106 },
|
||||||
new int[] { 47, 183, -47, -183 }
|
new int[] { 47, 183, -47, -183 },
|
||||||
};
|
};
|
||||||
|
|
||||||
private static readonly int[] _etc2Lut =
|
private static readonly int[] _etc2Lut =
|
||||||
{
|
{
|
||||||
3, 6, 11, 16, 23, 32, 41, 64
|
3, 6, 11, 16, 23, 32, 41, 64,
|
||||||
};
|
};
|
||||||
|
|
||||||
private static readonly int[][] _etc2AlphaLut =
|
private static readonly int[][] _etc2AlphaLut =
|
||||||
@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Texture
|
|||||||
new int[] { -3, -4, -7, -10, 2, 3, 6, 9 },
|
new int[] { -3, -4, -7, -10, 2, 3, 6, 9 },
|
||||||
new int[] { -1, -2, -3, -10, 0, 1, 2, 9 },
|
new int[] { -1, -2, -3, -10, 0, 1, 2, 9 },
|
||||||
new int[] { -4, -6, -8, -9, 3, 5, 7, 8 },
|
new int[] { -4, -6, -8, -9, 3, 5, 7, 8 },
|
||||||
new int[] { -3, -5, -7, -9, 2, 4, 6, 8 }
|
new int[] { -3, -5, -7, -9, 2, 4, 6, 8 },
|
||||||
};
|
};
|
||||||
|
|
||||||
public static byte[] DecodeRgb(ReadOnlySpan<byte> data, int width, int height, int depth, int levels, int layers)
|
public static byte[] DecodeRgb(ReadOnlySpan<byte> data, int width, int height, int depth, int levels, int layers)
|
||||||
|
@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.Texture.Encoders
|
|||||||
|
|
||||||
private static readonly int[] _mostFrequentPartitions = new int[]
|
private static readonly int[] _mostFrequentPartitions = new int[]
|
||||||
{
|
{
|
||||||
0, 13, 2, 1, 15, 14, 10, 23
|
0, 13, 2, 1, 15, 14, 10, 23,
|
||||||
};
|
};
|
||||||
|
|
||||||
private static Block CompressBlock(ReadOnlySpan<byte> data, int x, int y, int width, int height, bool fastMode)
|
private static Block CompressBlock(ReadOnlySpan<byte> data, int x, int y, int width, int height, bool fastMode)
|
||||||
@ -233,7 +233,7 @@ namespace Ryujinx.Graphics.Texture.Encoders
|
|||||||
1 => new RgbaColor8(255, 0, 0, 0).ToUInt32(),
|
1 => new RgbaColor8(255, 0, 0, 0).ToUInt32(),
|
||||||
2 => new RgbaColor8(0, 255, 0, 0).ToUInt32(),
|
2 => new RgbaColor8(0, 255, 0, 0).ToUInt32(),
|
||||||
3 => new RgbaColor8(0, 0, 255, 0).ToUInt32(),
|
3 => new RgbaColor8(0, 0, 255, 0).ToUInt32(),
|
||||||
_ => new RgbaColor8(0, 0, 0, 255).ToUInt32()
|
_ => new RgbaColor8(0, 0, 0, 255).ToUInt32(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -5,6 +5,6 @@
|
|||||||
Fast,
|
Fast,
|
||||||
Exhaustive,
|
Exhaustive,
|
||||||
ModeMask = 0xff,
|
ModeMask = 0xff,
|
||||||
Multithreaded = 1 << 8
|
Multithreaded = 1 << 8,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ namespace Ryujinx.Graphics.Texture
|
|||||||
8 => Convert<ulong>(dst, data),
|
8 => Convert<ulong>(dst, data),
|
||||||
12 => Convert<Bpp12Pixel>(dst, data),
|
12 => Convert<Bpp12Pixel>(dst, data),
|
||||||
16 => Convert<Vector128<byte>>(dst, data),
|
16 => Convert<Vector128<byte>>(dst, data),
|
||||||
_ => throw new NotSupportedException($"Unable to convert ${bytesPerPixel} bpp pixel format.")
|
_ => throw new NotSupportedException($"Unable to convert ${bytesPerPixel} bpp pixel format."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ namespace Ryujinx.Graphics.Texture
|
|||||||
8 => Convert<ulong>(output, data),
|
8 => Convert<ulong>(output, data),
|
||||||
12 => Convert<Bpp12Pixel>(output, data),
|
12 => Convert<Bpp12Pixel>(output, data),
|
||||||
16 => Convert<Vector128<byte>>(output, data),
|
16 => Convert<Vector128<byte>>(output, data),
|
||||||
_ => throw new NotSupportedException($"Unable to convert ${bytesPerPixel} bpp pixel format.")
|
_ => throw new NotSupportedException($"Unable to convert ${bytesPerPixel} bpp pixel format."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return output;
|
return output;
|
||||||
@ -359,7 +359,7 @@ namespace Ryujinx.Graphics.Texture
|
|||||||
8 => Convert<ulong>(dst, data),
|
8 => Convert<ulong>(dst, data),
|
||||||
12 => Convert<Bpp12Pixel>(dst, data),
|
12 => Convert<Bpp12Pixel>(dst, data),
|
||||||
16 => Convert<Vector128<byte>>(dst, data),
|
16 => Convert<Vector128<byte>>(dst, data),
|
||||||
_ => throw new NotSupportedException($"Unable to convert ${bytesPerPixel} bpp pixel format.")
|
_ => throw new NotSupportedException($"Unable to convert ${bytesPerPixel} bpp pixel format."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -504,7 +504,7 @@ namespace Ryujinx.Graphics.Texture
|
|||||||
8 => Convert<ulong>(output, data),
|
8 => Convert<ulong>(output, data),
|
||||||
12 => Convert<Bpp12Pixel>(output, data),
|
12 => Convert<Bpp12Pixel>(output, data),
|
||||||
16 => Convert<Vector128<byte>>(output, data),
|
16 => Convert<Vector128<byte>>(output, data),
|
||||||
_ => throw new NotSupportedException($"Unable to convert ${bytesPerPixel} bpp pixel format.")
|
_ => throw new NotSupportedException($"Unable to convert ${bytesPerPixel} bpp pixel format."),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,21 +11,21 @@
|
|||||||
new BC7ModeInfo(1, 0, 0, 2, 1, 2, 3, 5, 6),
|
new BC7ModeInfo(1, 0, 0, 2, 1, 2, 3, 5, 6),
|
||||||
new BC7ModeInfo(1, 0, 0, 2, 0, 2, 2, 7, 8),
|
new BC7ModeInfo(1, 0, 0, 2, 0, 2, 2, 7, 8),
|
||||||
new BC7ModeInfo(1, 0, 2, 0, 0, 4, 0, 7, 7),
|
new BC7ModeInfo(1, 0, 2, 0, 0, 4, 0, 7, 7),
|
||||||
new BC7ModeInfo(2, 6, 4, 0, 0, 2, 0, 5, 5)
|
new BC7ModeInfo(2, 6, 4, 0, 0, 2, 0, 5, 5),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly byte[][] Weights =
|
public static readonly byte[][] Weights =
|
||||||
{
|
{
|
||||||
new byte[] { 0, 21, 43, 64 },
|
new byte[] { 0, 21, 43, 64 },
|
||||||
new byte[] { 0, 9, 18, 27, 37, 46, 55, 64 },
|
new byte[] { 0, 9, 18, 27, 37, 46, 55, 64 },
|
||||||
new byte[] { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }
|
new byte[] { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 },
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly byte[][] InverseWeights =
|
public static readonly byte[][] InverseWeights =
|
||||||
{
|
{
|
||||||
new byte[] { 64, 43, 21, 0 },
|
new byte[] { 64, 43, 21, 0 },
|
||||||
new byte[] { 64, 55, 46, 37, 27, 18, 9, 0 },
|
new byte[] { 64, 55, 46, 37, 27, 18, 9, 0 },
|
||||||
new byte[] { 64, 60, 55, 51, 47, 43, 38, 34, 30, 26, 21, 17, 13, 9, 4, 0 }
|
new byte[] { 64, 60, 55, 51, 47, 43, 38, 34, 30, 26, 21, 17, 13, 9, 4, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly byte[][][] FixUpIndices = new byte[3][][]
|
public static readonly byte[][][] FixUpIndices = new byte[3][][]
|
||||||
@ -47,7 +47,7 @@
|
|||||||
new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 },
|
new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 },
|
||||||
new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 },
|
new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 },
|
||||||
new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 },
|
new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 },
|
||||||
new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }
|
new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 },
|
||||||
},
|
},
|
||||||
new byte[64][]
|
new byte[64][]
|
||||||
{
|
{
|
||||||
@ -66,7 +66,7 @@
|
|||||||
new byte[] { 0, 6, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 6, 0 }, new byte[] { 0, 8, 0 },
|
new byte[] { 0, 6, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 6, 0 }, new byte[] { 0, 8, 0 },
|
||||||
new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 },
|
new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 },
|
||||||
new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 },
|
new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 },
|
||||||
new byte[] { 0, 15, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 15, 0 }
|
new byte[] { 0, 15, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 15, 0 },
|
||||||
},
|
},
|
||||||
new byte[64][]
|
new byte[64][]
|
||||||
{
|
{
|
||||||
@ -85,8 +85,8 @@
|
|||||||
new byte[] { 0, 3, 15 }, new byte[] { 0, 15, 3 }, new byte[] { 0, 5, 15 }, new byte[] { 0, 5, 15 },
|
new byte[] { 0, 3, 15 }, new byte[] { 0, 15, 3 }, new byte[] { 0, 5, 15 }, new byte[] { 0, 5, 15 },
|
||||||
new byte[] { 0, 5, 15 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 5, 15 }, new byte[] { 0, 10, 15 },
|
new byte[] { 0, 5, 15 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 5, 15 }, new byte[] { 0, 10, 15 },
|
||||||
new byte[] { 0, 5, 15 }, new byte[] { 0, 10, 15 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 13, 15 },
|
new byte[] { 0, 5, 15 }, new byte[] { 0, 10, 15 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 13, 15 },
|
||||||
new byte[] { 0, 15, 3 }, new byte[] { 0, 12, 15 }, new byte[] { 0, 3, 15 }, new byte[] { 0, 3, 8 }
|
new byte[] { 0, 15, 3 }, new byte[] { 0, 12, 15 }, new byte[] { 0, 3, 15 }, new byte[] { 0, 3, 8 },
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly byte[][][] PartitionTable = new byte[3][][]
|
public static readonly byte[][][] PartitionTable = new byte[3][][]
|
||||||
@ -156,7 +156,7 @@
|
|||||||
new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 60
|
new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 60
|
||||||
new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 61
|
new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 61
|
||||||
new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 62
|
new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 62
|
||||||
new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // 63
|
new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 63
|
||||||
},
|
},
|
||||||
new byte[64][]
|
new byte[64][]
|
||||||
{
|
{
|
||||||
@ -223,7 +223,7 @@
|
|||||||
new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, // 60
|
new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, // 60
|
||||||
new byte[16] { 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, // 61
|
new byte[16] { 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, // 61
|
||||||
new byte[16] { 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 }, // 62
|
new byte[16] { 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 }, // 62
|
||||||
new byte[16] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1 } // 63
|
new byte[16] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1 }, // 63
|
||||||
},
|
},
|
||||||
new byte[64][]
|
new byte[64][]
|
||||||
{
|
{
|
||||||
@ -290,8 +290,8 @@
|
|||||||
new byte[16] { 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1 }, // 60
|
new byte[16] { 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1 }, // 60
|
||||||
new byte[16] { 0, 2, 2, 2, 1, 2, 2, 2, 0, 2, 2, 2, 1, 2, 2, 2 }, // 61
|
new byte[16] { 0, 2, 2, 2, 1, 2, 2, 2, 0, 2, 2, 2, 1, 2, 2, 2 }, // 61
|
||||||
new byte[16] { 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // 62
|
new byte[16] { 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // 62
|
||||||
new byte[16] { 0, 1, 1, 1, 2, 0, 1, 1, 2, 2, 0, 1, 2, 2, 2, 0 } // 63
|
new byte[16] { 0, 1, 1, 1, 2, 0, 1, 1, 2, 2, 0, 1, 2, 2, 2, 0 }, // 63
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1199,7 +1199,7 @@ namespace Ryujinx.Graphics.Texture.Utils
|
|||||||
|
|
||||||
RgbaColor32 weightV = new(colorWeight)
|
RgbaColor32 weightV = new(colorWeight)
|
||||||
{
|
{
|
||||||
A = alphaWeight
|
A = alphaWeight,
|
||||||
};
|
};
|
||||||
RgbaColor32 invWeightV = new RgbaColor32(64) - weightV;
|
RgbaColor32 invWeightV = new RgbaColor32(64) - weightV;
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ namespace Ryujinx.Graphics.Texture.Utils
|
|||||||
1 => G,
|
1 => G,
|
||||||
2 => B,
|
2 => B,
|
||||||
3 => A,
|
3 => A,
|
||||||
_ => throw new ArgumentOutOfRangeException(nameof(index))
|
_ => throw new ArgumentOutOfRangeException(nameof(index)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -417,7 +417,7 @@ namespace Ryujinx.Graphics.Vic.Image
|
|||||||
0 => offsets.LumaOffset,
|
0 => offsets.LumaOffset,
|
||||||
1 => offsets.ChromaUOffset,
|
1 => offsets.ChromaUOffset,
|
||||||
2 => offsets.ChromaVOffset,
|
2 => offsets.ChromaVOffset,
|
||||||
_ => throw new ArgumentOutOfRangeException(nameof(plane))
|
_ => throw new ArgumentOutOfRangeException(nameof(plane)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,6 @@ namespace Ryujinx.Graphics.Vic.Types
|
|||||||
Bob,
|
Bob,
|
||||||
NewBob,
|
NewBob,
|
||||||
Disi1,
|
Disi1,
|
||||||
WeaveLumaBobFieldChroma
|
WeaveLumaBobFieldChroma,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ namespace Ryujinx.Graphics.Vic.Types
|
|||||||
TopFieldChromaBottom,
|
TopFieldChromaBottom,
|
||||||
BottomFieldChromaTop,
|
BottomFieldChromaTop,
|
||||||
SubPicTopFieldChromaBottom,
|
SubPicTopFieldChromaBottom,
|
||||||
SubPicBottomFieldChromaTop
|
SubPicBottomFieldChromaTop,
|
||||||
}
|
}
|
||||||
|
|
||||||
static class FrameFormatExtensions
|
static class FrameFormatExtensions
|
||||||
|
@ -76,6 +76,6 @@
|
|||||||
Y8___U8___V8_N422R,
|
Y8___U8___V8_N422R,
|
||||||
Y8___U8___V8_N420,
|
Y8___U8___V8_N420,
|
||||||
U8,
|
U8,
|
||||||
V8
|
V8,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ namespace Ryujinx.Graphics.Vic
|
|||||||
_rm = new ResourceManager(gmm, new BufferPool<Pixel>(), new BufferPool<byte>());
|
_rm = new ResourceManager(gmm, new BufferPool<Pixel>(), new BufferPool<byte>());
|
||||||
_state = new DeviceState<VicRegisters>(new Dictionary<string, RwCallback>
|
_state = new DeviceState<VicRegisters>(new Dictionary<string, RwCallback>
|
||||||
{
|
{
|
||||||
{ nameof(VicRegisters.Execute), new RwCallback(Execute, null) }
|
{ nameof(VicRegisters.Execute), new RwCallback(Execute, null) },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,6 @@ namespace Ryujinx.Graphics.Video
|
|||||||
public enum FrameField
|
public enum FrameField
|
||||||
{
|
{
|
||||||
Progressive,
|
Progressive,
|
||||||
Interlaced
|
Interlaced,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -709,12 +709,14 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
return CommandBuffer.Handle == cb.Handle;
|
return CommandBuffer.Handle == cb.Handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CA1822 // Mark member as static
|
||||||
public void SetAlphaTest(bool enable, float reference, CompareOp op)
|
public void SetAlphaTest(bool enable, float reference, CompareOp op)
|
||||||
{
|
{
|
||||||
// This is currently handled using shader specialization, as Vulkan does not support alpha test.
|
// This is currently handled using shader specialization, as Vulkan does not support alpha test.
|
||||||
// In the future, we may want to use this to write the reference value into the support buffer,
|
// In the future, we may want to use this to write the reference value into the support buffer,
|
||||||
// to avoid creating one version of the shader per reference value used.
|
// to avoid creating one version of the shader per reference value used.
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CA1822
|
||||||
|
|
||||||
public void SetBlendState(AdvancedBlendDescriptor blend)
|
public void SetBlendState(AdvancedBlendDescriptor blend)
|
||||||
{
|
{
|
||||||
|
@ -321,7 +321,7 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types
|
|||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
, };
|
};
|
||||||
|
|
||||||
private static ReadOnlySpan<byte> RandomMiiFacelineColorRawArray => new byte[]
|
private static ReadOnlySpan<byte> RandomMiiFacelineColorRawArray => new byte[]
|
||||||
{
|
{
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
{
|
{
|
||||||
enum DeviceType : uint
|
enum DeviceType : uint
|
||||||
{
|
{
|
||||||
Amiibo
|
Amiibo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,13 +155,18 @@ namespace Ryujinx.Headless.SDL2.OpenGL
|
|||||||
{
|
{
|
||||||
// NOTE: grabbing the main display's dimensions directly as OpenGL doesn't scale along like the VulkanWindow.
|
// NOTE: grabbing the main display's dimensions directly as OpenGL doesn't scale along like the VulkanWindow.
|
||||||
// we might have to amend this if people run this on a non-primary display set to a different resolution.
|
// we might have to amend this if people run this on a non-primary display set to a different resolution.
|
||||||
SDL_Rect displayBounds;
|
if (SDL_GetDisplayBounds(0, out SDL_Rect displayBounds) < 0)
|
||||||
SDL_GetDisplayBounds(0, out displayBounds);
|
{
|
||||||
|
Logger.Warning?.Print(LogClass.Application, $"Could not retrieve display bounds: {SDL_GetError()}");
|
||||||
|
|
||||||
|
// Fallback to defaults
|
||||||
|
displayBounds.w = DefaultWidth;
|
||||||
|
displayBounds.h = DefaultHeight;
|
||||||
|
}
|
||||||
|
|
||||||
Renderer?.Window.SetSize(displayBounds.w, displayBounds.h);
|
Renderer?.Window.SetSize(displayBounds.w, displayBounds.h);
|
||||||
MouseDriver.SetClientSize(displayBounds.w, displayBounds.h);
|
MouseDriver.SetClientSize(displayBounds.w, displayBounds.h);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Renderer?.Window.SetSize(DefaultWidth, DefaultHeight);
|
Renderer?.Window.SetSize(DefaultWidth, DefaultHeight);
|
||||||
|
@ -1690,7 +1690,7 @@ namespace Ryujinx.Horizon.Common
|
|||||||
{ 0x821AC, "InvalidPackage1" },
|
{ 0x821AC, "InvalidPackage1" },
|
||||||
{ 0x823AC, "InvalidPackage1SectionSize" },
|
{ 0x823AC, "InvalidPackage1SectionSize" },
|
||||||
{ 0x825AC, "InvalidPackage1MarikoBodySize" },
|
{ 0x825AC, "InvalidPackage1MarikoBodySize" },
|
||||||
{ 0x827AC, "InvalidPackage1Pk11Size" }
|
{ 0x827AC, "InvalidPackage1Pk11Size" },
|
||||||
};
|
};
|
||||||
|
|
||||||
public static bool TryGet(int errorCode, out string name)
|
public static bool TryGet(int errorCode, out string name)
|
||||||
|
@ -13,6 +13,6 @@
|
|||||||
OutCopyHandle,
|
OutCopyHandle,
|
||||||
OutMoveHandle,
|
OutMoveHandle,
|
||||||
OutObject,
|
OutObject,
|
||||||
ProcessId
|
ProcessId,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ namespace Ryujinx.Horizon.Generators.Hipc
|
|||||||
None,
|
None,
|
||||||
Ref,
|
Ref,
|
||||||
Out,
|
Out,
|
||||||
In
|
In,
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly struct OutParameter
|
private readonly struct OutParameter
|
||||||
|
@ -40,7 +40,7 @@ namespace Ryujinx.Horizon.Kernel.Generators
|
|||||||
$"{TypeKernelResultName}.TimedOut",
|
$"{TypeKernelResultName}.TimedOut",
|
||||||
$"{TypeKernelResultName}.Cancelled",
|
$"{TypeKernelResultName}.Cancelled",
|
||||||
$"{TypeKernelResultName}.PortRemoteClosed",
|
$"{TypeKernelResultName}.PortRemoteClosed",
|
||||||
$"{TypeKernelResultName}.InvalidState"
|
$"{TypeKernelResultName}.InvalidState",
|
||||||
};
|
};
|
||||||
|
|
||||||
private readonly struct OutParameter
|
private readonly struct OutParameter
|
||||||
|
@ -168,7 +168,7 @@ namespace Ryujinx.Horizon.Sdk.OsTypes.Impl
|
|||||||
|
|
||||||
long minTime = endTime;
|
long minTime = endTime;
|
||||||
|
|
||||||
foreach (MultiWaitHolder holder in _multiWaits)
|
foreach (MultiWaitHolderBase holder in _multiWaits)
|
||||||
{
|
{
|
||||||
long currentTime = holder.GetAbsoluteTimeToWakeup();
|
long currentTime = holder.GetAbsoluteTimeToWakeup();
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ namespace Ryujinx.Tests.Memory
|
|||||||
{
|
{
|
||||||
granular.GetHandles(),
|
granular.GetHandles(),
|
||||||
singlePages,
|
singlePages,
|
||||||
doublePages
|
doublePages,
|
||||||
};
|
};
|
||||||
|
|
||||||
MultiRegionHandle combined = _tracking.BeginGranularTracking(0, PageSize * 18, handleGroups.SelectMany((handles) => handles), PageSize, 0);
|
MultiRegionHandle combined = _tracking.BeginGranularTracking(0, PageSize * 18, handleGroups.SelectMany((handles) => handles), PageSize, 0);
|
||||||
@ -349,7 +349,7 @@ namespace Ryujinx.Tests.Memory
|
|||||||
true, true, // Gap.
|
true, true, // Gap.
|
||||||
false, true, false, // Individual handles.
|
false, true, false, // Individual handles.
|
||||||
false, false, true, true, false, false, // Double size handles.
|
false, false, true, true, false, false, // Double size handles.
|
||||||
true // Gap.
|
true, // Gap.
|
||||||
};
|
};
|
||||||
|
|
||||||
for (int i = 0; i < 18; i++)
|
for (int i = 0; i < 18; i++)
|
||||||
|
@ -159,7 +159,7 @@ namespace Ryujinx.Tests.Unicorn
|
|||||||
Arm.UC_ARM_REG_Q12,
|
Arm.UC_ARM_REG_Q12,
|
||||||
Arm.UC_ARM_REG_Q13,
|
Arm.UC_ARM_REG_Q13,
|
||||||
Arm.UC_ARM_REG_Q14,
|
Arm.UC_ARM_REG_Q14,
|
||||||
Arm.UC_ARM_REG_Q15
|
Arm.UC_ARM_REG_Q15,
|
||||||
};
|
};
|
||||||
#pragma warning restore IDE0051, IDE0052
|
#pragma warning restore IDE0051, IDE0052
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ namespace Spv.Generator
|
|||||||
{
|
{
|
||||||
{ Specification.Op.OpConstant, new [] { "Value" } },
|
{ Specification.Op.OpConstant, new [] { "Value" } },
|
||||||
{ Specification.Op.OpTypeInt, new [] { "Width", "Signed" } },
|
{ Specification.Op.OpTypeInt, new [] { "Width", "Signed" } },
|
||||||
{ Specification.Op.OpTypeFloat, new [] { "Width" } }
|
{ Specification.Op.OpTypeFloat, new [] { "Width" } },
|
||||||
};
|
};
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
Loading…
Reference in New Issue
Block a user