wildcard
4 months ago
committed by
crueter
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
8 changed files with
38 additions and
5 deletions
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
src/android/app/src/main/res/values/strings.xml
src/common/settings.h
src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
src/yuzu/configuration/configure_graphics_extensions.cpp
src/yuzu/configuration/shared_translation.cpp
@ -39,6 +39,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
SOC_OVERLAY_POSITION ( " soc_overlay_position " ) ,
MEMORY_LAYOUT ( " memory_layout_mode " ) ,
FSR_SHARPENING_SLIDER ( " fsr_sharpening_slider " ) ,
RENDERER_SAMPLE_SHADING_FRACTION ( " sample_shading_fraction " ) ,
FAST_CPU_TIME ( " fast_cpu_time " ) ,
CPU_TICKS ( " cpu_ticks " ) ,
FAST_GPU_TIME ( " fast_gpu_time " ) ,
@ -57,7 +58,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
OFFLINE_WEB_APPLET ( " offline_web_applet_mode " ) ,
LOGIN_SHARE_APPLET ( " login_share_applet_mode " ) ,
WIFI_WEB_AUTH_APPLET ( " wifi_web_auth_applet_mode " ) ,
MY_PAGE_APPLET ( " my_page_applet_mode " )
MY_PAGE_APPLET ( " my_page_applet_mode " ) ,
;
override fun getInt ( needsGlobal : Boolean ) : Int = NativeConfig . getInt ( key , needsGlobal )
@ -159,6 +159,14 @@ abstract class SettingsItem(
descriptionId = R . string . sample_shading_description
)
)
put (
SliderSetting (
IntSetting . RENDERER_SAMPLE_SHADING_FRACTION ,
titleId = R . string . sample_shading_fraction ,
descriptionId = R . string . sample_shading_fraction_description ,
units = " % "
)
)
put (
SliderSetting (
ShortSetting . RENDERER_SPEED_LIMIT ,
@ -443,6 +443,7 @@ class SettingsFragmentPresenter(
add ( BooleanSetting . RENDERER_PROVOKING_VERTEX . key )
add ( BooleanSetting . RENDERER_DESCRIPTOR_INDEXING . key )
add ( BooleanSetting . RENDERER_SAMPLE_SHADING . key )
add ( IntSetting . RENDERER_SAMPLE_SHADING_FRACTION . key )
add ( HeaderSetting ( R . string . veil_renderer ) )
add ( BooleanSetting . ENABLE_RAII . key )
@ -82,6 +82,8 @@
<string name= "descriptor_indexing_description" > Improves texture and buffer handling, as well as the Maxwell translation layer. Supported by some Vulkan 1.1 GPUs and all Vulkan 1.2+ GPUs.</string>
<string name= "sample_shading" > Sample Shading</string>
<string name= "sample_shading_description" > Allows the fragment shader to execute per sample in a multi-sampled fragment instead once per fragment. Improves graphics quality at the cost of some performance. Only Vulkan 1.1+ devices support this extension.</string>
<string name= "sample_shading_fraction" > Sample Shading Fraction</string>
<string name= "sample_shading_fraction_description" > The intensity of the sample shading pass. Higher values improve quality more but also reduce performance to a greater extent.</string>
<string name= "veil_renderer" > Renderer</string>
<string name= "enable_raii" > RAII</string>
@ -527,7 +527,17 @@ struct Values {
SwitchableSetting < bool > provoking_vertex { linkage , false , " provoking_vertex " , Category : : RendererExtensions } ;
SwitchableSetting < bool > descriptor_indexing { linkage , false , " descriptor_indexing " , Category : : RendererExtensions } ;
SwitchableSetting < bool > sample_shading { linkage , false , " sample_shading " , Category : : RendererExtensions } ;
SwitchableSetting < bool > sample_shading { linkage , false , " sample_shading " , Category : : RendererExtensions , Specialization : : Paired } ;
SwitchableSetting < u32 , true > sample_shading_fraction { linkage ,
50 ,
0 ,
100 ,
" sample_shading_fraction " ,
Category : : RendererExtensions ,
Specialization : : Scalar ,
true ,
false ,
& sample_shading } ;
Setting < bool > renderer_debug { linkage , false , " debug " , Category : : RendererDebug } ;
Setting < bool > renderer_shader_feedback { linkage , false , " shader_feedback " ,
@ -743,7 +743,7 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
. flags = 0 ,
. rasterizationSamples = MaxwellToVK : : MsaaMode ( key . state . msaa_mode ) ,
. sampleShadingEnable = Settings : : values . sample_shading . GetValue ( ) ? VK_TRUE : VK_FALSE ,
. minSampleShading = 0.0f ,
. minSampleShading = static_cast < float > ( Settings : : values . sample_shading_fraction . GetValue ( ) ) / 10 0.0f,
. pSampleMask = nullptr ,
. alphaToCoverageEnable = key . state . alpha_to_coverage_enabled ! = 0 ? VK_TRUE : VK_FALSE ,
. alphaToOneEnable = key . state . alpha_to_one_enabled ! = 0 ? VK_TRUE : VK_FALSE ,
@ -36,7 +36,16 @@ void ConfigureGraphicsExtensions::Setup(const ConfigurationShared::Builder& buil
for ( auto setting :
Settings : : values . linkage . by_category [ Settings : : Category : : RendererExtensions ] ) {
ConfigurationShared : : Widget * widget = builder . BuildWidget ( setting , apply_funcs ) ;
ConfigurationShared : : Widget * widget = [ & ] ( ) {
if ( setting - > Id ( ) = = Settings : : values . sample_shading_fraction . Id ( ) ) {
// TODO(crueter): should support this natively perhaps?
return builder . BuildWidget (
setting , apply_funcs , ConfigurationShared : : RequestType : : Slider , true ,
1.0f , nullptr , tr ( " % " , " Sample Shading percentage (e.g. 50%) " ) ) ;
} else {
return builder . BuildWidget ( setting , apply_funcs ) ;
}
} ( ) ;
if ( widget = = nullptr ) {
continue ;
@ -360,8 +360,10 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent)
tr ( " Improves texture & buffer handling and the Maxwell translation layer. \n "
" Some Vulkan 1.1+ and all 1.2+ devices support this extension. " ) ) ;
INSERT ( Settings , sample_shading , QString ( ) , QString ( ) ) ;
INSERT ( Settings ,
sample_shading ,
sample_shading_fraction ,
tr ( " Sample Shading " ) ,
tr ( " Allows the fragment shader to execute per sample in a multi-sampled fragment "
" instead once per fragment. Improves graphics quality at the cost of some performance. \n "