Compare commits

...
Sign in to create a new pull request.
Author SHA1 Message Date
CamilleLaVey
9c18bd44e7 Fix licenses 2026-10-05 18:44:01 -04:00
CamilleLaVey
013deb4f3f Revert "Address turnip bug with depths" 2026-10-02 03:59:24 -04:00
CamilleLaVey
0b7d216a09 Address some regressions with unswizzle changes + barriers reductions 2026-10-02 01:41:19 -04:00
CamilleLaVey
b8478a570b Experiments with TS on turnip 2026-10-02 00:47:24 -04:00
CamilleLaVey
9d620bba88 Address son sync issues 2026-10-01 23:56:07 -04:00
CamilleLaVey
165a1d1da1 Experiments with gpu stalls per fence wait 2026-10-01 22:52:42 -04:00
CamilleLaVey
5c7520f572 Address some regressions with UMA 2026-10-01 20:56:23 -04:00
CamilleLaVey
7db354a25a Framerate display corrections 2026-10-01 20:27:22 -04:00
CamilleLaVey
f759409cc2 Address turnip bug with depths 2026-10-01 19:30:50 -04:00
CamilleLaVey
e11ea7f008 Port UMA part 5.3 (NCE EXT) 2026-10-01 16:52:15 -04:00
CamilleLaVey
73cac64037 Port UMA part 5.2 2026-10-01 16:26:33 -04:00
CamilleLaVey
fb174abf04 Port UMA part 5.1 2026-10-01 14:07:31 -04:00
CamilleLaVey
1b764efad9 Port UMA part 4.1 2026-10-01 12:23:20 -04:00
CamilleLaVey
488dcefec5 Port UMA part 4 2026-10-01 02:49:53 -04:00
CamilleLaVey
df36685c9b Port UMA part 3 2026-10-01 02:01:24 -04:00
CamilleLaVey
9cc9a1fc35 Port UMA part 2 2026-10-01 01:09:01 -04:00
CamilleLaVey
0a88e761eb Port UMA part 1 2026-10-01 00:19:46 -04:00
CamilleLaVey
451b8eb80c Some adjustments to EDS 2026-09-30 23:09:44 -04:00
CamilleLaVey
e4f74863d2 Overlap barriers on window adapt filter + lsfg dedup 2026-09-30 20:58:40 -04:00
CamilleLaVey
51584f5a63 1st phase of framepacer rework 2026-09-30 17:54:48 -04:00
CamilleLaVey
148a7b24cd Another intent to fix build 2026-09-30 17:27:43 -04:00
CamilleLaVey
940568bb33 fix lsfg build desktop + adjustments 2026-09-30 15:06:43 -04:00
CamilleLaVey
5714c3e477 Experiments with polishing LSFG impl 2026-09-30 14:14:57 -04:00
CamilleLaVey
bad10039ae Address some corrections towards MSAA discard/enable removal 2026-09-30 13:03:09 -04:00
CamilleLaVey
dd1c024efc Some corrections towards HCR + Discard MSAA 2026-09-30 12:05:15 -04:00
CamilleLaVey
4f5fc58b6e Use copy commands 2 2026-09-30 03:00:07 -04:00
CamilleLaVey
efba499fd3 Remove some dependencies to framebuffer and renderpass 2026-09-30 02:47:44 -04:00
CamilleLaVey
41d8da1612 Remove deferred clears 2026-09-30 00:47:14 -04:00
CamilleLaVey
63fc150635 Addresing some problems with TFB and DR 2026-09-30 00:22:27 -04:00
CamilleLaVey
92cbcb8fe5 Revert "God has forsaken me to BDA" 2026-09-29 23:54:39 -04:00
CamilleLaVey
8040f06c87 Revert "quick test to add pointer range management on buffer binding from indirect draws" 2026-09-29 23:54:21 -04:00
CamilleLaVey
bdc890f647 quick test to add pointer range management on buffer binding from indirect draws 2026-09-29 23:17:06 -04:00
CamilleLaVey
08917afe0e God has forsaken me to BDA 2026-09-29 21:57:46 -04:00
CamilleLaVey
213d9fb4a7 Just force reads on 8/16bits 2026-09-29 17:46:53 -04:00
CamilleLaVey
2d6f28c50e Some work around CAS 2026-09-29 16:13:50 -04:00
CamilleLaVey
ef7cde0c2b Barrier feedback loops toggle android 2026-09-27 02:48:26 -04:00
CamilleLaVey
2d5c79c9f3 Address some bugs with load none vs lrz 2026-09-27 02:44:37 -04:00
CamilleLaVey
14b6160fcd first try on dynamic rendering unused attachments 2026-09-27 01:15:26 -04:00
CamilleLaVey
dfe0b7e7c7 A quick test on global memory cbuf tracker 2026-09-26 23:23:38 -04:00
CamilleLaVey
b8d9f44421 Another change on GS 2026-09-26 21:38:39 -04:00
CamilleLaVey
7d61946b7c Tfb fix x62132321 2026-09-26 21:33:17 -04:00
CamilleLaVey
d8fc94093d More work on GS 2026-09-26 21:14:21 -04:00
CamilleLaVey
4ce91d18b8 Avoid constant calls to fixed pipelines 2026-09-26 18:50:48 -04:00
CamilleLaVey
f6cd6128ff Experiment on tfb draws again 2026-09-26 18:28:32 -04:00
CamilleLaVey
f3ce6acf53 Another intent on load store op none impl 2026-09-26 17:21:32 -04:00
CamilleLaVey
656370e70a Upload only images needed 2026-09-26 16:43:23 -04:00
CamilleLaVey
16483a27ed Remove PostCopyBarrier on buffers 2026-09-26 15:43:34 -04:00
CamilleLaVey
d6f69e14dc experiment with depth ranges 2026-09-26 14:59:01 -04:00
CamilleLaVey
1a65725a35 Fix licenses 2026-09-26 13:37:49 -04:00
CamilleLaVey
381d97639f Rework dynamic rendering impl 2026-09-26 13:30:28 -04:00
CamilleLaVey
be4bcbee85
Merge pull request '[arm, vulkan] 5th Vulkan Global Maintenance + NCE maintenance' (#1) from cleanup-vk into master
Reviewed-on: https://git.eden-emu.dev/CamilleLaVey/Eden/pulls/1
2026-09-26 18:57:15 +02:00
CamilleLaVey
49c3a79fa8 Keep adjusting memory barriers to be more explicit 2026-09-26 12:45:27 -04:00
CamilleLaVey
9d4355064b Another try to make barriers more explicit 2026-09-26 12:45:27 -04:00
CamilleLaVey
d832f5e156 Re-do geometry compaction pass 2026-09-26 12:45:27 -04:00
CamilleLaVey
5dc91d7e25 Another take on the qcom/turnip missing handling for geometry stages 2026-09-26 12:45:27 -04:00
CamilleLaVey
ccbaa75e5e Adjust cuts on depth draws 2026-09-26 12:45:27 -04:00
CamilleLaVey
63ce0a0527 Fix build 2026-09-26 12:45:26 -04:00
CamilleLaVey
d2d2220b24 Address some regressions with TFB + SSBO's due to WFI removal 2026-09-26 12:45:26 -04:00
CamilleLaVey
bc121efc19 Corrections on the barriers for compute dispatch 2026-09-26 12:45:26 -04:00
CamilleLaVey
bcb3fbcf12 Remove the binding/rt image cache 2026-09-26 12:45:26 -04:00
CamilleLaVey
ab11282def Keep adjusting the barriers until qcom is finally fixed 2026-09-26 12:45:26 -04:00
CamilleLaVey
a5c5966cd8 Keep adjusting barriers 2026-09-26 12:45:26 -04:00
CamilleLaVey
7a007fbf48 Another intent to fix qcom driver bugs with render 2026-09-26 12:45:26 -04:00
CamilleLaVey
3f3240caed Fix android build 2026-09-26 12:45:26 -04:00
CamilleLaVey
19298b713b Removal of WFI + address device creation crash on A6xx 2026-09-26 12:45:26 -04:00
CamilleLaVey
10a21bf246 Another try on sparse binding 2026-09-26 12:45:26 -04:00
CamilleLaVey
108c991431 Experiment on descriptors payloads 2026-09-26 12:45:26 -04:00
CamilleLaVey
98ad2d5e4c Quick tests on payloads 2026-09-26 12:45:26 -04:00
CamilleLaVey
3ff00afd59 Some other dead code removal 2026-09-26 12:45:26 -04:00
CamilleLaVey
fd8da678df Re-adjust dispatch draw + masks 2026-09-26 12:45:26 -04:00
CamilleLaVey
f71a80671c Remove final references to sync1 2026-09-26 12:45:26 -04:00
CamilleLaVey
6ffd65adaf another intent to remove sync1 and replace it with sync2 completely 2026-09-26 12:45:26 -04:00
CamilleLaVey
e6fe763afa Correction on the descriptor pool 2026-09-26 12:45:26 -04:00
CamilleLaVey
fa9e069907 Adjust buffer stream size + reduce descriptor loads 2026-09-26 12:45:26 -04:00
CamilleLaVey
3ab215fd30 experiment to address some TPIDR_EL0 stalls 2026-09-26 12:45:26 -04:00
CamilleLaVey
8d8e67cd7f Just an small experiment to simply interpreter 2026-09-26 12:45:26 -04:00
CamilleLaVey
36b06254b4 Fix licenses 2026-09-26 12:45:26 -04:00
CamilleLaVey
ffb75c2b68 Revert "[common/core/dynarmic] Optimize page table allocations (#4219)" 2026-09-26 12:43:32 -04:00
CamilleLaVey
d82a9c3ba5 Adjust stagging buffer ring 2026-09-26 12:43:32 -04:00
CamilleLaVey
b7b90c183f Add checks on texel buffer alignments 2026-09-26 12:43:32 -04:00
CamilleLaVey
1fbb1a0499 Revert QCOM spoof 2026-09-26 12:43:32 -04:00
CamilleLaVey
09371eab60 Remove dead code om VMA 2026-09-26 12:43:32 -04:00
CamilleLaVey
8a8c7f4c06 addresing MHR regression 2026-09-26 12:43:31 -04:00
CamilleLaVey
3a22f908a3 Re-add pitch 2D pass 2026-09-26 12:43:31 -04:00
CamilleLaVey
0dd78bbd07 Re-add unswizzle 3D pass 2026-09-26 12:43:31 -04:00
CamilleLaVey
20d3a4370a Remove the dependency test + remove color texture filter per shasder storage view 2026-09-26 12:43:31 -04:00
CamilleLaVey
1529e30435 quick tests with dependency flags per attachment stage 2026-09-26 12:43:31 -04:00
CamilleLaVey
51d64c298d Some reviews on storage views 2026-09-26 12:43:31 -04:00
CamilleLaVey
3cabafc06a Re-add unswizzle linear 2D to the pass 2026-09-26 12:43:31 -04:00
CamilleLaVey
e9436f8094 A test to remove uneeded Finish() 2026-09-26 12:43:31 -04:00
CamilleLaVey
228a400752 Quick change to previous GC adjustment 2026-09-26 12:43:31 -04:00
CamilleLaVey
08741c919a Some changes to GC 2026-09-26 12:43:31 -04:00
CamilleLaVey
17adc28b2c Remove some dead accesors 2026-09-26 12:43:31 -04:00
CamilleLaVey
10528f1ceb Revert some previous changes partially + maintenance5 changes 2026-09-26 12:43:31 -04:00
CamilleLaVey
377478cd46 A quick topology test 2026-09-26 12:43:31 -04:00
CamilleLaVey
f92e326e17 Adjustments from the previous change for pipelines 2026-09-26 12:43:30 -04:00
CamilleLaVey
b10212fe94 Let's try to change a bit the redundancy 2026-09-26 12:43:30 -04:00
CamilleLaVey
521d3922f5 Fix build 2026-09-26 12:43:30 -04:00
CamilleLaVey
8cdf552c28 Some adjustments to vertex attributes 2026-09-26 12:43:30 -04:00
CamilleLaVey
d633c43aae Remove static pipelines 2026-09-26 12:43:30 -04:00
CamilleLaVey
27bcaba75c first intent to pinpoint performance decrease on virtual buffer table + multi-range 2026-09-26 12:43:30 -04:00
CamilleLaVey
64a307c6dc Port some changes from Lizzie's optimization with some exceptions 2026-09-26 12:43:30 -04:00
CamilleLaVey
691b63e79b Quick adjustments on overlapped buffers 2026-09-26 12:43:30 -04:00
CamilleLaVey
f955dfedcb remove async vulkan presentation toggle android 2026-09-26 12:43:30 -04:00
CamilleLaVey
86f826c313 Remove astc recompression method 2026-09-26 12:43:30 -04:00
CamilleLaVey
052a04e610 Correcting some bugs on the vulkan async presentation thread 2026-09-26 12:43:30 -04:00
CamilleLaVey
bd82351d73 First try to align GOB's 2026-09-26 12:43:30 -04:00
CamilleLaVey
a152596f29 Chinga su madre que perramente molesto es este puto juego 2026-09-26 12:43:30 -04:00
CamilleLaVey
40036eb0f8 Remove the thread opt for unswizzle images 2026-09-26 12:43:30 -04:00
CamilleLaVey
0cc76f1f22 First intent to relax the pressure on the gpu thread for unswizzling images 2026-09-26 12:43:30 -04:00
CamilleLaVey
b016c88768 Remove the unswizzle path on the extra shaders 2026-09-26 12:43:30 -04:00
CamilleLaVey
6221bd2c43 Reduce accelerated unswizzle path 2026-09-26 12:43:30 -04:00
CamilleLaVey
facee08b5e More tests to find out the texture corruption on previous unswizzle changes 2026-09-26 12:43:30 -04:00
CamilleLaVey
43622f463d A test for a corrupted unswizzled textures 2026-09-26 12:43:30 -04:00
CamilleLaVey
9bedcf6202 Keep working on ASTC 2026-09-26 12:43:29 -04:00
CamilleLaVey
66a25a3d79 Some unvalid checks on astc decoder 2026-09-26 12:43:29 -04:00
CamilleLaVey
b24c3d7226 Keep refining astc decoding math 2026-09-26 12:43:29 -04:00
CamilleLaVey
26031c0940 Fixes on the astc decoder 2026-09-26 12:43:29 -04:00
CamilleLaVey
930b64858e Fix build 2026-09-26 12:43:29 -04:00
CamilleLaVey
b1e512c152 Some cleanups 2026-09-15 21:10:36 -04:00
238 changed files with 7952 additions and 12384 deletions

View file

@ -82,8 +82,8 @@ cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSV
option(ENABLE_DEBUG_TOOLS "Enable debugging tools (maxwell disassembler, SPIRV translator, etc)" OFF)
option(ENABLE_WERROR "Enable -Werror diagnostics" ON)
# Lossless Scaling frame generation. Only Android.
cmake_dependent_option(ENABLE_LSFG "Enable Lossless Scaling frame generation" ON "ANDROID" OFF)
# Lossless Scaling frame generation.
option(ENABLE_LSFG "Enable Lossless Scaling frame generation" ON)
option(ENABLE_RESHADE "Enable ReShade FX post-processing effects" ON)

View file

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
package org.yuzu.yuzu_emu.adapters

View file

@ -20,18 +20,21 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
EMULATE_BGR565("emulate_bgr565"),
RESCALE_HACK("rescale_hack"),
CPUOPT_UNSAFE_HOST_MMU("cpuopt_unsafe_host_mmu"),
RELOCATE_36BIT_ADDRESS_SPACE("relocate_36bit_address_space"),
USE_DOCKED_MODE("use_docked_mode"),
USE_AUTO_STUB("use_auto_stub"),
RENDERER_USE_DISK_SHADER_CACHE("use_disk_shader_cache"),
RENDERER_FORCE_MAX_CLOCK("force_max_clock"),
RENDERER_ASYNCHRONOUS_GPU_EMULATION("use_asynchronous_gpu_emulation"),
RENDERER_ASYNC_PRESENTATION("async_presentation"),
RENDERER_ASYNCHRONOUS_SHADERS("use_asynchronous_shaders"),
RENDERER_REACTIVE_FLUSHING("use_reactive_flushing"),
RENDERER_BARRIER_FEEDBACK_LOOPS("barrier_feedback_loops"),
ENABLE_BUFFER_HISTORY("enable_buffer_history"),
USE_OPTIMIZED_VERTEX_BUFFERS("use_optimized_vertex_buffers"),
ENABLE_GPU_BUFFER_READBACK("enable_gpu_buffer_readback"),
USE_UNIFIED_MEMORY("use_unified_memory"),
SYNC_MEMORY_OPERATIONS("sync_memory_operations"),
STALL_ON_GPU_FENCE_WAIT("stall_on_gpu_fence_wait"),
BUFFER_REORDER_DISABLE("disable_buffer_reorder"),
RENDERER_DEBUG("debug"),
RENDERER_PATCH_OLD_QCOM_DRIVERS("patch_old_qcom_drivers"),
@ -39,7 +42,6 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
RENDERER_SAMPLE_SHADING("sample_shading"),
RENDERER_FRAME_GEN("frame_gen"),
RENDERER_FRAME_GEN_FLOW_SCALE_AUTO("frame_gen_flow_scale_auto"),
GPU_UNSWIZZLE_ENABLED("gpu_unswizzle_enabled"),
PICTURE_IN_PICTURE("picture_in_picture"),
USE_CUSTOM_RTC("custom_rtc_enabled"),
BLACK_BACKGROUNDS("black_backgrounds"),

View file

@ -32,7 +32,6 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
RENDERER_DYNA_STATE("dyna_state"),
DMA_ACCURACY("dma_accuracy"),
GPU_FENCE_BEHAVIOR("gpu_fence_behavior"),
FRAME_PACING_MODE("frame_pacing_mode"),
AUDIO_OUTPUT_ENGINE("output_engine"),
MAX_ANISOTROPY("max_anisotropy"),
THEME("theme"),
@ -51,9 +50,6 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
FAST_CPU_TIME("fast_cpu_time"),
CPU_TICKS("cpu_ticks"),
FAST_GPU_TIME("fast_gpu_time"),
GPU_UNSWIZZLE_TEXTURE_SIZE("gpu_unswizzle_texture_size"),
GPU_UNSWIZZLE_STREAM_SIZE("gpu_unswizzle_stream_size"),
GPU_UNSWIZZLE_CHUNK_SIZE("gpu_unswizzle_chunk_size"),
BAT_TEMPERATURE_UNIT("bat_temperature_unit"),
CABINET_APPLET("cabinet_applet_mode"),
CONTROLLER_APPLET("controller_applet_mode"),

View file

@ -1,89 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
package org.yuzu.yuzu_emu.features.settings.model.view
import androidx.annotation.ArrayRes
import androidx.annotation.StringRes
import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
import org.yuzu.yuzu_emu.features.settings.model.IntSetting
class GpuUnswizzleSetting(
@StringRes titleId: Int = 0,
titleString: String = "",
@StringRes descriptionId: Int = 0,
descriptionString: String = "",
@ArrayRes val textureSizeChoicesId: Int,
@ArrayRes val textureSizeValuesId: Int,
@ArrayRes val streamSizeChoicesId: Int,
@ArrayRes val streamSizeValuesId: Int,
@ArrayRes val chunkSizeChoicesId: Int,
@ArrayRes val chunkSizeValuesId: Int
) : SettingsItem(
object : AbstractSetting {
override val key: String = SettingsItem.GPU_UNSWIZZLE_COMBINED
override val defaultValue: Any = false
override val isSaveable = true
override val isRuntimeModifiable = true
override val isSwitchable = true
override val pairedSettingKey: String = ""
override var global: Boolean
get() {
return BooleanSetting.GPU_UNSWIZZLE_ENABLED.global &&
IntSetting.GPU_UNSWIZZLE_TEXTURE_SIZE.global &&
IntSetting.GPU_UNSWIZZLE_STREAM_SIZE.global &&
IntSetting.GPU_UNSWIZZLE_CHUNK_SIZE.global
}
set(value) {
BooleanSetting.GPU_UNSWIZZLE_ENABLED.global = value
IntSetting.GPU_UNSWIZZLE_TEXTURE_SIZE.global = value
IntSetting.GPU_UNSWIZZLE_STREAM_SIZE.global = value
IntSetting.GPU_UNSWIZZLE_CHUNK_SIZE.global = value
}
override fun getValueAsString(needsGlobal: Boolean): String = "combined"
override fun reset() {
BooleanSetting.GPU_UNSWIZZLE_ENABLED.reset()
IntSetting.GPU_UNSWIZZLE_TEXTURE_SIZE.reset()
IntSetting.GPU_UNSWIZZLE_STREAM_SIZE.reset()
IntSetting.GPU_UNSWIZZLE_CHUNK_SIZE.reset()
}
},
titleId,
titleString,
descriptionId,
descriptionString
) {
override val type = SettingsItem.TYPE_GPU_UNSWIZZLE
// Check if GPU unswizzle is enabled via the dedicated boolean setting
fun isEnabled(needsGlobal: Boolean = false): Boolean =
BooleanSetting.GPU_UNSWIZZLE_ENABLED.getBoolean(needsGlobal)
fun setEnabled(value: Boolean) =
BooleanSetting.GPU_UNSWIZZLE_ENABLED.setBoolean(value)
fun enable() = setEnabled(true)
fun disable() = setEnabled(false)
fun getTextureSize(needsGlobal: Boolean = false): Int =
IntSetting.GPU_UNSWIZZLE_TEXTURE_SIZE.getInt(needsGlobal)
fun setTextureSize(value: Int) =
IntSetting.GPU_UNSWIZZLE_TEXTURE_SIZE.setInt(value)
fun getStreamSize(needsGlobal: Boolean = false): Int =
IntSetting.GPU_UNSWIZZLE_STREAM_SIZE.getInt(needsGlobal)
fun setStreamSize(value: Int) =
IntSetting.GPU_UNSWIZZLE_STREAM_SIZE.setInt(value)
fun getChunkSize(needsGlobal: Boolean = false): Int =
IntSetting.GPU_UNSWIZZLE_CHUNK_SIZE.getInt(needsGlobal)
fun setChunkSize(value: Int) =
IntSetting.GPU_UNSWIZZLE_CHUNK_SIZE.setInt(value)
fun reset() = setting.reset()
}

View file

@ -141,14 +141,12 @@ abstract class SettingsItem(
const val TYPE_SPINBOX = 12
const val TYPE_LAUNCHABLE = 13
const val TYPE_PATH = 14
const val TYPE_GPU_UNSWIZZLE = 15
const val TYPE_FX_TOOLBAR = 16
const val TYPE_FX_PRESET = 17
const val TYPE_FX_SHADER = 18
const val TYPE_FX_BUTTON = 19
const val FASTMEM_COMBINED = "fastmem_combined"
const val GPU_UNSWIZZLE_COMBINED = "gpu_unswizzle_combined"
val emptySetting = object : AbstractSetting {
override val key: String = ""
@ -753,13 +751,6 @@ abstract class SettingsItem(
descriptionId = R.string.renderer_asynchronous_gpu_emulation_description
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_ASYNC_PRESENTATION,
titleId = R.string.renderer_async_presentation,
descriptionId = R.string.renderer_async_presentation_description
)
)
put(
SingleChoiceSetting(
IntSetting.DMA_ACCURACY,
@ -794,45 +785,6 @@ abstract class SettingsItem(
valuesId = R.array.gpuValues
)
)
put(
SingleChoiceSetting(
IntSetting.GPU_UNSWIZZLE_TEXTURE_SIZE,
titleId = R.string.gpu_unswizzle_texture_size,
descriptionId = R.string.gpu_unswizzle_texture_size_description,
choicesId = R.array.gpuTextureSizeSwizzleEntries,
valuesId = R.array.gpuTextureSizeSwizzleValues
)
)
put(
SingleChoiceSetting(
IntSetting.GPU_UNSWIZZLE_STREAM_SIZE,
titleId = R.string.gpu_unswizzle_stream_size,
descriptionId = R.string.gpu_unswizzle_stream_size_description,
choicesId = R.array.gpuSwizzleEntries,
valuesId = R.array.gpuSwizzleValues
)
)
put(
SingleChoiceSetting(
IntSetting.GPU_UNSWIZZLE_CHUNK_SIZE,
titleId = R.string.gpu_unswizzle_chunk_size,
descriptionId = R.string.gpu_unswizzle_chunk_size_description,
choicesId = R.array.gpuSwizzleChunkEntries,
valuesId = R.array.gpuSwizzleChunkValues
)
)
put(
GpuUnswizzleSetting(
titleId = R.string.gpu_unswizzle_settings,
descriptionId = R.string.gpu_unswizzle_settings_description,
textureSizeChoicesId = R.array.gpuTextureSizeSwizzleEntries,
textureSizeValuesId = R.array.gpuTextureSizeSwizzleValues,
streamSizeChoicesId = R.array.gpuSwizzleEntries,
streamSizeValuesId = R.array.gpuSwizzleValues,
chunkSizeChoicesId = R.array.gpuSwizzleChunkEntries,
chunkSizeValuesId = R.array.gpuSwizzleChunkValues
)
)
put(
SingleChoiceSetting(
IntSetting.FAST_CPU_TIME,
@ -894,6 +846,13 @@ abstract class SettingsItem(
descriptionId = R.string.cpuopt_unsafe_host_mmu_description
)
)
put(
SwitchSetting(
BooleanSetting.RELOCATE_36BIT_ADDRESS_SPACE,
titleId = R.string.relocate_36bit_address_space,
descriptionId = R.string.relocate_36bit_address_space_description
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_REACTIVE_FLUSHING,
@ -901,6 +860,13 @@ abstract class SettingsItem(
descriptionId = R.string.renderer_reactive_flushing_description
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_BARRIER_FEEDBACK_LOOPS,
titleId = R.string.renderer_barrier_feedback_loops,
descriptionId = R.string.renderer_barrier_feedback_loops_description
)
)
put(
SwitchSetting(
BooleanSetting.ENABLE_BUFFER_HISTORY,
@ -915,6 +881,13 @@ abstract class SettingsItem(
descriptionId = R.string.enable_gpu_buffer_readback_description
)
)
put(
SwitchSetting(
BooleanSetting.USE_UNIFIED_MEMORY,
titleId = R.string.use_unified_memory,
descriptionId = R.string.use_unified_memory_description
)
)
put(
SwitchSetting(
BooleanSetting.USE_OPTIMIZED_VERTEX_BUFFERS,
@ -929,6 +902,13 @@ abstract class SettingsItem(
descriptionId = R.string.sync_memory_operations_description
)
)
put(
SwitchSetting(
BooleanSetting.STALL_ON_GPU_FENCE_WAIT,
titleId = R.string.stall_on_gpu_fence_wait,
descriptionId = R.string.stall_on_gpu_fence_wait_description
)
)
put(
SwitchSetting(
BooleanSetting.BUFFER_REORDER_DISABLE,

View file

@ -1,206 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
package org.yuzu.yuzu_emu.features.settings.ui
import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import android.view.LayoutInflater
import android.widget.ArrayAdapter
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.activityViewModels
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.databinding.DialogGpuUnswizzleBinding
import org.yuzu.yuzu_emu.features.settings.model.view.GpuUnswizzleSetting
class GpuUnswizzleDialogFragment : DialogFragment() {
private var position = 0
private val settingsViewModel: SettingsViewModel by activityViewModels()
private lateinit var binding: DialogGpuUnswizzleBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
position = requireArguments().getInt(POSITION)
if (settingsViewModel.clickedItem == null) dismiss()
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
binding = DialogGpuUnswizzleBinding.inflate(LayoutInflater.from(requireContext()))
val item = settingsViewModel.clickedItem as GpuUnswizzleSetting
// Setup texture size dropdown
val textureSizeEntries = resources.getStringArray(item.textureSizeChoicesId)
val textureSizeValues = resources.getIntArray(item.textureSizeValuesId)
val textureSizeAdapter = ArrayAdapter(
requireContext(),
android.R.layout.simple_dropdown_item_1line,
textureSizeEntries.toMutableList()
)
binding.dropdownTextureSize.setAdapter(textureSizeAdapter)
// Setup stream size dropdown
val streamSizeEntries = resources.getStringArray(item.streamSizeChoicesId)
val streamSizeValues = resources.getIntArray(item.streamSizeValuesId)
val streamSizeAdapter = ArrayAdapter(
requireContext(),
android.R.layout.simple_dropdown_item_1line,
streamSizeEntries.toMutableList()
)
binding.dropdownStreamSize.setAdapter(streamSizeAdapter)
// Setup chunk size dropdown
val chunkSizeEntries = resources.getStringArray(item.chunkSizeChoicesId)
val chunkSizeValues = resources.getIntArray(item.chunkSizeValuesId)
val chunkSizeAdapter = ArrayAdapter(
requireContext(),
android.R.layout.simple_dropdown_item_1line,
chunkSizeEntries.toMutableList()
)
binding.dropdownChunkSize.setAdapter(chunkSizeAdapter)
// Load current values
val isEnabled = item.isEnabled()
binding.switchEnable.isChecked = isEnabled
if (isEnabled) {
val textureSizeIndex = textureSizeValues.indexOf(item.getTextureSize())
if (textureSizeIndex >= 0) {
binding.dropdownTextureSize.setText(textureSizeEntries[textureSizeIndex], false)
}
val streamSizeIndex = streamSizeValues.indexOf(item.getStreamSize())
if (streamSizeIndex >= 0) {
binding.dropdownStreamSize.setText(streamSizeEntries[streamSizeIndex], false)
}
val chunkSizeIndex = chunkSizeValues.indexOf(item.getChunkSize())
if (chunkSizeIndex >= 0) {
binding.dropdownChunkSize.setText(chunkSizeEntries[chunkSizeIndex], false)
}
} else {
// Set default/recommended values when disabling
binding.dropdownTextureSize.setText(textureSizeEntries[3], false)
binding.dropdownStreamSize.setText(streamSizeEntries[3], false)
binding.dropdownChunkSize.setText(chunkSizeEntries[3], false)
}
// Clear adapter filters after setText to fix rotation bug
textureSizeAdapter.filter.filter(null)
streamSizeAdapter.filter.filter(null)
chunkSizeAdapter.filter.filter(null)
// Enable/disable dropdowns based on switch state
updateDropdownsState(isEnabled)
binding.switchEnable.setOnCheckedChangeListener { _, checked ->
updateDropdownsState(checked)
}
val dialog = MaterialAlertDialogBuilder(requireContext())
.setTitle(item.title)
.setView(binding.root)
.create()
// Setup button listeners
binding.btnDefault.setOnClickListener {
// Reset to defaults
item.reset()
// Refresh values with adapters reset
val textureSizeIndex = textureSizeValues.indexOf(item.getTextureSize())
if (textureSizeIndex >= 0) {
binding.dropdownTextureSize.setText(textureSizeEntries[textureSizeIndex], false)
}
val streamSizeIndex = streamSizeValues.indexOf(item.getStreamSize())
if (streamSizeIndex >= 0) {
binding.dropdownStreamSize.setText(streamSizeEntries[streamSizeIndex], false)
}
val chunkSizeIndex = chunkSizeValues.indexOf(item.getChunkSize())
if (chunkSizeIndex >= 0) {
binding.dropdownChunkSize.setText(chunkSizeEntries[chunkSizeIndex], false)
}
// Clear filters
textureSizeAdapter.filter.filter(null)
streamSizeAdapter.filter.filter(null)
chunkSizeAdapter.filter.filter(null)
settingsViewModel.setAdapterItemChanged(position)
settingsViewModel.setShouldReloadSettingsList(true)
}
binding.btnCancel.setOnClickListener {
dialog.dismiss()
}
binding.btnOk.setOnClickListener {
if (binding.switchEnable.isChecked) {
item.enable()
// Save the selected values
val selectedTextureIndex = textureSizeEntries.indexOf(
binding.dropdownTextureSize.text.toString()
)
if (selectedTextureIndex >= 0) {
item.setTextureSize(textureSizeValues[selectedTextureIndex])
}
val selectedStreamIndex = streamSizeEntries.indexOf(
binding.dropdownStreamSize.text.toString()
)
if (selectedStreamIndex >= 0) {
item.setStreamSize(streamSizeValues[selectedStreamIndex])
}
val selectedChunkIndex = chunkSizeEntries.indexOf(
binding.dropdownChunkSize.text.toString()
)
if (selectedChunkIndex >= 0) {
item.setChunkSize(chunkSizeValues[selectedChunkIndex])
}
} else {
// Disable GPU unswizzle
item.disable()
}
settingsViewModel.setAdapterItemChanged(position)
settingsViewModel.setShouldReloadSettingsList(true)
dialog.dismiss()
}
// Ensure filters are cleared after dialog is shown
binding.root.post {
textureSizeAdapter.filter.filter(null)
streamSizeAdapter.filter.filter(null)
chunkSizeAdapter.filter.filter(null)
}
return dialog
}
private fun updateDropdownsState(enabled: Boolean) {
binding.layoutTextureSize.isEnabled = enabled
binding.dropdownTextureSize.isEnabled = enabled
binding.layoutStreamSize.isEnabled = enabled
binding.dropdownStreamSize.isEnabled = enabled
binding.layoutChunkSize.isEnabled = enabled
binding.dropdownChunkSize.isEnabled = enabled
}
companion object {
const val TAG = "GpuUnswizzleDialogFragment"
const val POSITION = "Position"
fun newInstance(
settingsViewModel: SettingsViewModel,
item: GpuUnswizzleSetting,
position: Int
): GpuUnswizzleDialogFragment {
val dialog = GpuUnswizzleDialogFragment()
val args = Bundle()
args.putInt(POSITION, position)
dialog.arguments = args
settingsViewModel.clickedItem = item
return dialog
}
}
}

View file

@ -106,10 +106,6 @@ class SettingsAdapter(
PathViewHolder(ListItemSettingBinding.inflate(inflater), this)
}
SettingsItem.TYPE_GPU_UNSWIZZLE -> {
GpuUnswizzleViewHolder(ListItemSettingBinding.inflate(inflater), this)
}
SettingsItem.TYPE_FX_TOOLBAR -> {
FxToolbarViewHolder(
ListItemSettingFxToolbarBinding.inflate(inflater, parent, false),
@ -511,14 +507,6 @@ class SettingsAdapter(
settingsViewModel.setShouldShowPathResetDialog(true)
}
fun onGpuUnswizzleClick(item: GpuUnswizzleSetting, position: Int) {
GpuUnswizzleDialogFragment.newInstance(
settingsViewModel,
item,
position
).show(fragment.childFragmentManager, GpuUnswizzleDialogFragment.TAG)
}
private class DiffCallback : DiffUtil.ItemCallback<SettingsItem>() {
override fun areItemsTheSame(oldItem: SettingsItem, newItem: SettingsItem): Boolean {
return oldItem.setting.key == newItem.setting.key

View file

@ -545,11 +545,14 @@ class SettingsFragmentPresenter(
add(IntSetting.RENDERER_NVDEC_EMULATION.key)
add(BooleanSetting.SYNC_MEMORY_OPERATIONS.key)
add(BooleanSetting.STALL_ON_GPU_FENCE_WAIT.key)
add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
add(BooleanSetting.RENDERER_REACTIVE_FLUSHING.key)
add(BooleanSetting.RENDERER_BARRIER_FEEDBACK_LOOPS.key)
add(BooleanSetting.ENABLE_BUFFER_HISTORY.key)
add(BooleanSetting.ENABLE_GPU_BUFFER_READBACK.key)
add(BooleanSetting.USE_UNIFIED_MEMORY.key)
add(BooleanSetting.USE_OPTIMIZED_VERTEX_BUFFERS.key)
add(HeaderSetting(R.string.hacks))
@ -560,8 +563,6 @@ class SettingsFragmentPresenter(
add(BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.key)
add(IntSetting.ANDROID_PIPELINE_WORKERS.key)
add(BooleanSetting.RENDERER_ASYNCHRONOUS_GPU_EMULATION.key)
add(BooleanSetting.RENDERER_ASYNC_PRESENTATION.key)
add(SettingsItem.GPU_UNSWIZZLE_COMBINED)
add(HeaderSetting(R.string.extensions))
@ -1527,6 +1528,7 @@ class SettingsFragmentPresenter(
add(HeaderSetting(R.string.cpu))
add(IntSetting.CPU_BACKEND.key)
add(BooleanSetting.RELOCATE_36BIT_ADDRESS_SPACE.key)
add(IntSetting.CPU_ACCURACY.key)
add(BooleanSetting.USE_AUTO_STUB.key)
add(SettingsItem.FASTMEM_COMBINED)

View file

@ -1,71 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
package org.yuzu.yuzu_emu.features.settings.ui.viewholder
import android.view.View
import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding
import org.yuzu.yuzu_emu.features.settings.model.view.GpuUnswizzleSetting
import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem
import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter
import org.yuzu.yuzu_emu.utils.ViewUtils.setVisible
class GpuUnswizzleViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) :
SettingViewHolder(binding.root, adapter) {
private lateinit var setting: GpuUnswizzleSetting
override fun bind(item: SettingsItem) {
setting = item as GpuUnswizzleSetting
binding.textSettingName.text = setting.title
binding.textSettingDescription.setVisible(item.description.isNotEmpty())
binding.textSettingDescription.text = item.description
binding.textSettingValue.setVisible(true)
val resMgr = binding.root.context.resources
if (setting.isEnabled()) {
// Show a summary of current settings
val textureSizeEntries = resMgr.getStringArray(setting.textureSizeChoicesId)
val textureSizeValues = resMgr.getIntArray(setting.textureSizeValuesId)
val textureSizeIndex = textureSizeValues.indexOf(setting.getTextureSize())
val textureSizeLabel = if (textureSizeIndex >= 0) textureSizeEntries[textureSizeIndex] else "?"
val streamSizeEntries = resMgr.getStringArray(setting.streamSizeChoicesId)
val streamSizeValues = resMgr.getIntArray(setting.streamSizeValuesId)
val streamSizeIndex = streamSizeValues.indexOf(setting.getStreamSize())
val streamSizeLabel = if (streamSizeIndex >= 0) streamSizeEntries[streamSizeIndex] else "?"
val chunkSizeEntries = resMgr.getStringArray(setting.chunkSizeChoicesId)
val chunkSizeValues = resMgr.getIntArray(setting.chunkSizeValuesId)
val chunkSizeIndex = chunkSizeValues.indexOf(setting.getChunkSize())
val chunkSizeLabel = if (chunkSizeIndex >= 0) chunkSizeEntries[chunkSizeIndex] else "?"
binding.textSettingValue.text = "$textureSizeLabel ⋅ $streamSizeLabel ⋅ $chunkSizeLabel"
} else {
binding.textSettingValue.text = resMgr.getString(R.string.gpu_unswizzle_disabled)
}
binding.buttonClear.setVisible(setting.clearable)
binding.buttonClear.setOnClickListener {
adapter.onClearClick(setting, bindingAdapterPosition)
}
setStyle(setting.isEditable, binding)
}
override fun onClick(clicked: View) {
if (!setting.isEditable) {
return
}
adapter.onGpuUnswizzleClick(setting, bindingAdapterPosition)
}
override fun onLongClick(clicked: View): Boolean {
if (setting.isEditable) {
return adapter.onLongClick(setting, bindingAdapterPosition)
}
return false
}
}

View file

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project

View file

@ -64,8 +64,8 @@ void EmuWindow_Android::OnTouchReleased(int id) {
EmulationSession::GetInstance().GetInputSubsystem().GetTouchScreen()->TouchReleased(id);
}
void EmuWindow_Android::OnFrameDisplayed() {
UpdateObservedFrameRate();
void EmuWindow_Android::OnFrameDisplayed(u32 presented_frames) {
UpdateObservedFrameRate(presented_frames);
UpdateFrameRateHint();
if (!m_first_frame) {
@ -75,15 +75,16 @@ void EmuWindow_Android::OnFrameDisplayed() {
}
}
void EmuWindow_Android::UpdateObservedFrameRate() {
void EmuWindow_Android::UpdateObservedFrameRate(u32 presented_frames) {
m_presented_frames = static_cast<float>((std::max)(presented_frames, 1u));
const auto now = Clock::now();
if (m_last_frame_display_time.time_since_epoch().count() != 0) {
const auto frame_time = std::chrono::duration<float>(now - m_last_frame_display_time);
const float seconds = frame_time.count();
if (seconds > 0.0f) {
const float instantaneous_rate = 1.0f / seconds;
const float instantaneous_rate = m_presented_frames / seconds;
if (std::isfinite(instantaneous_rate) && instantaneous_rate >= 1.0f &&
instantaneous_rate <= 240.0f) {
instantaneous_rate <= 240.0f * m_presented_frames) {
constexpr float SmoothingFactor = 0.15f;
if (m_smoothed_present_rate <= 0.0f) {
m_smoothed_present_rate = instantaneous_rate;
@ -124,18 +125,9 @@ float EmuWindow_Android::GetFrameTimeVerifiedHint() const {
return QuantizeFrameRateHint(verified_rate);
}
float EmuWindow_Android::GetPresentedFrameMultiplier() {
if (!Settings::values.frame_gen.GetValue()) {
return 1.0f;
}
return static_cast<float>(std::clamp<u32>(Settings::values.frame_gen_multiplier.GetValue(), 2, 4));
}
float EmuWindow_Android::GetFrameRateHint() const {
const float presented_multiplier = GetPresentedFrameMultiplier();
const float observed_rate =
std::clamp(m_smoothed_present_rate * presented_multiplier, 0.0f, 240.0f);
const float frame_time_verified_hint = GetFrameTimeVerifiedHint() * presented_multiplier;
const float observed_rate = std::clamp(m_smoothed_present_rate, 0.0f, 240.0f);
const float frame_time_verified_hint = GetFrameTimeVerifiedHint() * m_presented_frames;
if (m_last_frame_rate_hint > 0.0f && observed_rate > 0.0f) {
const float tolerance = std::max(m_last_frame_rate_hint * 0.12f, 4.0f);
@ -159,7 +151,7 @@ float EmuWindow_Android::GetFrameRateHint() const {
return frame_time_verified_hint;
}
const float nominal_rate = 60.0f * presented_multiplier;
const float nominal_rate = 60.0f * m_presented_frames;
if (!Settings::values.use_speed_limit.GetValue()) {
return QuantizeFrameRateHint(nominal_rate);
}

View file

@ -41,7 +41,7 @@ public:
~EmuWindow_Android() = default;
void OnSurfaceChanged(ANativeWindow* surface);
void OnFrameDisplayed() override;
void OnFrameDisplayed(u32 presented_frames) override;
void OnTouchPressed(int id, float x, float y);
void OnTouchMoved(int id, float x, float y);
@ -58,10 +58,9 @@ private:
using Clock = std::chrono::steady_clock;
void UpdateFrameRateHint();
void UpdateObservedFrameRate();
void UpdateObservedFrameRate(u32 presented_frames);
[[nodiscard]] float GetFrameRateHint() const;
[[nodiscard]] float GetFrameTimeVerifiedHint() const;
[[nodiscard]] static float GetPresentedFrameMultiplier();
[[nodiscard]] static float QuantizeFrameRateHint(float frame_rate);
float m_window_width{};
@ -73,6 +72,7 @@ private:
float m_last_frame_rate_hint = -1.0f;
float m_pending_frame_rate_hint = -1.0f;
float m_smoothed_present_rate = 0.0f;
float m_presented_frames = 1.0f;
Clock::time_point m_last_frame_display_time{};
Clock::time_point m_pending_frame_rate_since{};
std::uint32_t m_pending_frame_rate_hint_votes = 0;

View file

@ -738,6 +738,35 @@ const char* fallback_cpu_detection() {
return s_result.c_str();
}
#ifdef ARCHITECTURE_arm64
struct SystemDriverInfo {
VkPhysicalDeviceProperties properties{};
VkPhysicalDeviceDriverProperties driver{};
};
SystemDriverInfo QuerySystemDriverInfo(JNIEnv* env, jstring j_hook_lib_dir) {
const std::string hook_lib_dir = Common::Android::GetJString(env, j_hook_lib_dir);
const Common::DynamicLibrary library{adrenotools_open_libvulkan(
RTLD_NOW, 0, nullptr, hook_lib_dir.c_str(), nullptr, nullptr, nullptr, nullptr)};
Vulkan::vk::InstanceDispatch dld;
const Vulkan::vk::Instance instance = Vulkan::CreateInstance(library, dld, VK_API_VERSION_1_1);
const std::vector<VkPhysicalDevice> devices = instance.EnumeratePhysicalDevices();
if (devices.empty()) {
throw Vulkan::vk::Exception(VK_ERROR_INITIALIZATION_FAILED);
}
SystemDriverInfo info{};
info.driver.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES;
VkPhysicalDeviceProperties2 properties2{
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
.pNext = &info.driver,
.properties = {},
};
Vulkan::vk::PhysicalDevice(devices[0], dld).GetProperties2(properties2);
info.properties = properties2.properties;
return info;
}
#endif
} // namespace
extern "C" {
@ -857,34 +886,18 @@ jboolean JNICALL Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_supportsCustomDri
jobjectArray Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_getSystemDriverInfo(
JNIEnv* env, jobject j_obj, jobject j_surf, jstring j_hook_lib_dir) {
std::string version_string{"1.1.0"};
std::string driver_name{"generic"};
#ifdef ARCHITECTURE_arm64
const char* file_redirect_dir_{};
int featureFlags{};
std::string hook_lib_dir = Common::Android::GetJString(env, j_hook_lib_dir);
auto handle = adrenotools_open_libvulkan(RTLD_NOW, featureFlags, nullptr, hook_lib_dir.c_str(),
nullptr, nullptr, file_redirect_dir_, nullptr);
auto driver_library = std::make_shared<Common::DynamicLibrary>(handle);
InputCommon::InputSubsystem input_subsystem;
auto window =
std::make_unique<EmuWindow_Android>(ANativeWindow_fromSurface(env, j_surf), driver_library);
Vulkan::vk::InstanceDispatch dld;
Vulkan::vk::Instance vk_instance = Vulkan::CreateInstance(
*driver_library, dld, VK_API_VERSION_1_1, Core::Frontend::WindowSystemType::Android);
auto surface = Vulkan::CreateSurface(vk_instance, window->GetWindowInfo());
auto device = Vulkan::CreateDevice(vk_instance, dld, *surface);
auto driver_version = device.GetDriverVersion();
auto version_string =
fmt::format("{}.{}.{}", VK_API_VERSION_MAJOR(driver_version),
VK_API_VERSION_MINOR(driver_version), VK_API_VERSION_PATCH(driver_version));
auto driver_name = device.GetDriverName();
#else
auto driver_version = "1.0.0";
auto version_string = "1.1.0"; //Assume lowest Vulkan level
auto driver_name = "generic";
try {
const SystemDriverInfo info = QuerySystemDriverInfo(env, j_hook_lib_dir);
const u32 driver_version = info.properties.driverVersion;
version_string =
fmt::format("{}.{}.{}", VK_API_VERSION_MAJOR(driver_version),
VK_API_VERSION_MINOR(driver_version), VK_API_VERSION_PATCH(driver_version));
driver_name = Vulkan::vk::GetDriverName(info.driver);
} catch (...) {
}
#endif
jobjectArray j_driver_info = env->NewObjectArray(2, Common::Android::GetStringClass(), Common::Android::ToJString(env, version_string));
env->SetObjectArrayElement(j_driver_info, 1, Common::Android::ToJString(env, driver_name));
@ -893,32 +906,12 @@ jobjectArray Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_getSystemDriverInfo(
jstring Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_getGpuModel(JNIEnv *env, jobject j_obj, jobject j_surf, jstring j_hook_lib_dir) {
#ifdef ARCHITECTURE_arm64
const char* file_redirect_dir_{};
int featureFlags{};
std::string hook_lib_dir = Common::Android::GetJString(env, j_hook_lib_dir);
auto handle = adrenotools_open_libvulkan(RTLD_NOW, featureFlags, nullptr, hook_lib_dir.c_str(),
nullptr, nullptr, file_redirect_dir_, nullptr);
auto driver_library = std::make_shared<Common::DynamicLibrary>(handle);
InputCommon::InputSubsystem input_subsystem;
auto window =
std::make_unique<EmuWindow_Android>(ANativeWindow_fromSurface(env, j_surf), driver_library);
Vulkan::vk::InstanceDispatch dld;
Vulkan::vk::Instance vk_instance = Vulkan::CreateInstance(
*driver_library, dld, VK_API_VERSION_1_1, Core::Frontend::WindowSystemType::Android);
auto surface = Vulkan::CreateSurface(vk_instance, window->GetWindowInfo());
auto device = Vulkan::CreateDevice(vk_instance, dld, *surface);
const std::string model_name{device.GetModelName()};
window.release();
return Common::Android::ToJString(env, model_name);
#else
return Common::Android::ToJString(env, "no-info");
try {
return Common::Android::ToJString(env, QuerySystemDriverInfo(env, j_hook_lib_dir).properties.deviceName);
} catch (...) {
}
#endif
return Common::Android::ToJString(env, "no-info");
}
jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_reloadKeys(JNIEnv* env, jclass clazz) {

View file

@ -1,96 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/switch_enable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="@string/gpu_unswizzle_enable" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_texture_size"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:hint="@string/gpu_unswizzle_texture_size">
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/dropdown_texture_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_stream_size"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:hint="@string/gpu_unswizzle_stream_size">
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/dropdown_stream_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_chunk_size"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/gpu_unswizzle_chunk_size">
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/dropdown_chunk_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:orientation="horizontal"
android:gravity="end"
android:spacing="8dp">
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_default"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/gpu_unswizzle_default_button" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_cancel"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/cancel" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_ok"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/ok" />
</LinearLayout>
</LinearLayout>
</ScrollView>

View file

@ -574,8 +574,6 @@
<string name="renderer_force_max_clock_description">يجبر وحدة معالجة الرسومات على العمل بأقصى سرعة ممكنة (سيظل يتم تطبيق القيود الحرارية).</string>
<string name="renderer_asynchronous_gpu_emulation">محاكاة غير متزامنة لوحدة معالجة الرسومات</string>
<string name="renderer_asynchronous_gpu_emulation_description">يمكن لهذه الحيلة أن تزيد الأداء عن طريق تشغيل محاكاة وحدة معالجة الرسومات بشكل غير متزامن على حساب مشاكل الرسومات وزيادة معدلات الأعطال بسبب العمليات المتعلقة بالتوقيت.</string>
<string name="renderer_async_presentation">عرض غير متزامن</string>
<string name="renderer_async_presentation_description">يمكن لهذه الحيلة أن تزيد من الأداء عن طريق نقل عملية العرض إلى خيط معالجة منفصل على حساب مشاكل الرسوميات.</string>
<string name="renderer_reactive_flushing">استخدم التنظيف التفاعلي</string>
<string name="renderer_reactive_flushing_description">يحسن دقة العرض في بعض الألعاب على حساب الأداء.</string>
<string name="enable_buffer_history">تمكين سجل التخزين المؤقت</string>
@ -599,17 +597,6 @@
<string name="rescale_hack_description">يُمكّن هذا الخيار من التعامل مع عملية إعادة تحجيم الألعاب بطريقة تقليدية باستخدام مسار إعادة التحجيم السريع</string>
<string name="renderer_asynchronous_shaders">استخدم تظليل غير متزامن</string>
<string name="renderer_asynchronous_shaders_description">يقوم بتجميع التظليل بشكل غير متزامن. قد يقلل ذلك من التقطعات ولكنه قد يؤدي أيضًا إلى حدوث أخطاء.</string>
<string name="gpu_unswizzle_settings">إعدادات إلغاء ترتيب بيانات وحدة معالجة الرسومات</string>
<string name="gpu_unswizzle_settings_description">قم بضبط معلمات فكّ تشابك النسيج المستندة إلى وحدة معالجة الرسومات أو تعطيلها تمامًا. اضبط هذه الإعدادات لتحقيق التوازن بين الأداء وجودة تحميل النسيج.</string>
<string name="gpu_unswizzle_enable">تفعيل إلغاء ترتيب بيانات وحدة معالجة الرسومات</string>
<string name="gpu_unswizzle_disabled">تعطيل</string>
<string name="gpu_unswizzle_texture_size">الحد الأقصى لحجم النسيج في وحدة معالجة الرسومات بعد إعادة ترتيب البيانات</string>
<string name="gpu_unswizzle_texture_size_description">يُحدد هذا الخيار الحد الأقصى لحجم (ميغابايت) معالجة الصور باستخدام وحدة معالجة الرسومات. مع أن وحدة معالجة الرسومات أسرع في معالجة الصور المتوسطة والكبيرة، إلا أن وحدة المعالجة المركزية قد تكون أكثر كفاءة في معالجة الصور الصغيرة جدًا. اضبط هذا الخيار لتحقيق التوازن الأمثل بين سرعة معالجة الرسومات واستهلاك وحدة المعالجة المركزية.</string>
<string name="gpu_unswizzle_stream_size">حجم تدفق إلغاء ترتيب بيانات وحدة معالجة الرسومات</string>
<string name="gpu_unswizzle_stream_size_description">يحدد هذا الخيار حد البيانات لكل إطار لمعالجة الصور الكبيرة. القيم الأعلى تُسرّع تحميل الصور على حساب زيادة زمن استجابة الإطارات؛ أما القيم الأقل فتُقلل من الحمل الزائد على وحدة معالجة الرسومات، ولكنها قد تتسبب في ظهور الصور بشكل مفاجئ.</string>
<string name="gpu_unswizzle_chunk_size">حجم كتلة إلغاء ترتيب بيانات وحدة معالجة الرسومات</string>
<string name="gpu_unswizzle_chunk_size_description">يُحدد هذا الخيار عدد شرائح العمق التي تتم معالجتها لكل دفعة من الصور ثلاثية الأبعاد (3D). زيادة هذا العدد تُحسّن كفاءة الإنتاجية على وحدات معالجة الرسومات القوية، ولكنها قد تُسبب تقطعًا أو انقطاعًا في عمل برنامج التشغيل على الأجهزة ذات المواصفات الأقل قوة.</string>
<string name="gpu_unswizzle_default_button">افتراضي</string>
<string name="extensions">إضافات</string>
@ -1050,25 +1037,10 @@
<string name="fast_gpu_high">كسر السرعة</string>
<!-- GPU swizzle texture size -->
<string name="gpu_texturesizeswizzle_verysmall">صغير جدًا (16 ميغابايت)</string>
<string name="gpu_texturesizeswizzle_small">صغير (32 ميغابايت)</string>
<string name="gpu_texturesizeswizzle_normal">قياسي (128 ميغابايت)</string>
<string name="gpu_texturesizeswizzle_large">كبير (256 ميغابايت)</string>
<string name="gpu_texturesizeswizzle_verylarge">كبير جدًا (512 ميغابايت)</string>
<!-- GPU swizzle streams -->
<string name="gpu_swizzle_verylow">منخفض جدًا (4 ميغابايت)</string>
<string name="gpu_swizzle_low">منخفض (8 ميغابايت)</string>
<string name="gpu_swizzle_normal">قياسي (16 ميغابايت)</string>
<string name="gpu_swizzle_medium">متوسط (32 ميغابايت)</string>
<string name="gpu_swizzle_high">عالي (64 ميغابايت)</string>
<!-- GPU swizzle chunks -->
<string name="gpu_swizzlechunk_verylow">منخفض جدًا (32)</string>
<string name="gpu_swizzlechunk_low">منخفض (64)</string>
<string name="gpu_swizzlechunk_normal">قياسي (128)</string>
<string name="gpu_swizzlechunk_medium">متوسط (256)</string>
<string name="gpu_swizzlechunk_high">عالي (512)</string>
<!-- Temperature Units -->
<string name="temperature_celsius">مئوية</string>

View file

@ -508,7 +508,6 @@ Wird der Handheld-Modus verwendet, verringert es die Auflösung und erhöht die
<string name="skip_cpu_inner_invalidation_description">Überspringt bestimmte Cache-Invalidierungen auf CPU-Seite während Speicherupdates, reduziert die CPU-Auslastung und verbessert die Leistung. Kann in einigen Spielen zu Fehlern oder Abstürzen führen.</string>
<string name="renderer_asynchronous_shaders">Asynchrone Shader</string>
<string name="renderer_asynchronous_shaders_description">Kompiliert Shader asynchron. Dies kann Ruckler reduzieren, aber auch Grafikfehler verursachen.</string>
<string name="gpu_unswizzle_default_button">Standard</string>
<string name="extensions">Erweiterungen</string>
@ -918,25 +917,10 @@ Wirklich fortfahren?</string>
<string name="fast_gpu_high">Übertaktung</string>
<!-- GPU swizzle texture size -->
<string name="gpu_texturesizeswizzle_verysmall">Sehr klein (16 MB)</string>
<string name="gpu_texturesizeswizzle_small">Klein (32 MB)</string>
<string name="gpu_texturesizeswizzle_normal">Normal (128 MB)</string>
<string name="gpu_texturesizeswizzle_large">Groß (256 MB)</string>
<string name="gpu_texturesizeswizzle_verylarge">Sehr groß (512 MB)</string>
<!-- GPU swizzle streams -->
<string name="gpu_swizzle_verylow">Sehr niedrig (4 MB)</string>
<string name="gpu_swizzle_low">Niedrig (8 MB)</string>
<string name="gpu_swizzle_normal">Normal (16 MB)</string>
<string name="gpu_swizzle_medium">Mittel (32 MB)</string>
<string name="gpu_swizzle_high">Hoch (64 MB)</string>
<!-- GPU swizzle chunks -->
<string name="gpu_swizzlechunk_verylow">Sehr niedrig (32)</string>
<string name="gpu_swizzlechunk_low">Niedrig (64)</string>
<string name="gpu_swizzlechunk_normal">Normal (128)</string>
<string name="gpu_swizzlechunk_medium">Mittel (256)</string>
<string name="gpu_swizzlechunk_high">Hoch (512)</string>
<!-- Temperature Units -->
<string name="temperature_celsius">Celsius</string>

View file

@ -517,8 +517,6 @@
<string name="renderer_force_max_clock_description">Fuerza a la GPU a ejecutarse a la velocidad máxima de reloj posible (se seguirán aplicando restricciones térmicas).</string>
<string name="renderer_asynchronous_gpu_emulation">Emulación de GPU asíncrona</string>
<string name="renderer_asynchronous_gpu_emulation_description">Este hack puede aumentar el rendimiento ejecutando la emulación de la GPU de forma asíncrona, a costa de problemas gráficos y un aumento en la tasa de fallos debido a operaciones relacionadas con la sincronización.</string>
<string name="renderer_async_presentation">Presentación asíncrona</string>
<string name="renderer_async_presentation_description">Este hack puede aumentar el rendimiento al mover la presentación a un hilo independiente de la CPU a costa de problemas gráficos.</string>
<string name="renderer_reactive_flushing">Usar limpieza reactiva</string>
<string name="renderer_reactive_flushing_description">Mejora la precisión de renderizado en algunos juegos, pero reduce el rendimiento.</string>
<string name="enable_buffer_history">Activar el historial del búfer</string>
@ -541,17 +539,6 @@
<string name="rescale_hack_description">Permite el manejo de versiones anteriores para el paso de configuración de reescalado para juegos mediante el uso de una ruta de reescalado rápida.</string>
<string name="renderer_asynchronous_shaders">Usar sombreadores asíncronos</string>
<string name="renderer_asynchronous_shaders_description">Compila los sombreadores de forma asíncrona. Esto puede reducir los tirones, pero también puede introducir errores gráficos.</string>
<string name="gpu_unswizzle_settings">Ajustes de desentrelazado de la GPU</string>
<string name="gpu_unswizzle_settings_description">Configura los parámetros de desentrelazado de texturas basadas ​​en la GPU o desactívelos por completo. Modifique estos ajustes para equilibrar el rendimiento y la calidad de las texturas cargadas.</string>
<string name="gpu_unswizzle_enable">Activar desentrelazado de la GPU</string>
<string name="gpu_unswizzle_disabled">Desactivado</string>
<string name="gpu_unswizzle_texture_size">Tamaño máximo de textura de desentrelazado de la GPU</string>
<string name="gpu_unswizzle_texture_size_description">Establece el tamaño máximo (en MB) para el desentrelazado de texturas basada en GPU. Aunque la GPU es más rápida para texturas medianas y grandes, la CPU puede ser más eficiente para texturas muy pequeñas. Ajuste este valor para encontrar el equilibrio entre la aceleración de la GPU y la sobrecarga de la CPU.</string>
<string name="gpu_unswizzle_stream_size">Tamaño del flujo de desentrelazado de la GPU</string>
<string name="gpu_unswizzle_stream_size_description">Establece el límite de datos por fotograma para desentrelazar texturas grandes. Los valores altos aceleran la carga de texturas, a coste de una mayor latencia por fotograma; los valores bajos reducen la carga de la GPU, pero pueden causar parpadeos visibles en las texturas.</string>
<string name="gpu_unswizzle_chunk_size">Tamaño del trozo de desentrelazado de la GPU</string>
<string name="gpu_unswizzle_chunk_size_description">Determina la cantidad de cortes de profundidad procesados ​​en un solo envío de texturas 3D. Aumentar este valor puede mejorar el rendimiento en una GPU de gama alta, pero puede causar tirones y problemas en los tiempos de respuesta en hardware más modesto.</string>
<string name="gpu_unswizzle_default_button">Por defecto</string>
<string name="extensions">Extensiones</string>
@ -988,25 +975,10 @@
<string name="fast_gpu_high">Overclock</string>
<!-- GPU swizzle texture size -->
<string name="gpu_texturesizeswizzle_verysmall">Muy pequeño (16 MB)</string>
<string name="gpu_texturesizeswizzle_small">Pequeño (32 MB)</string>
<string name="gpu_texturesizeswizzle_normal">Normal (128 MB)</string>
<string name="gpu_texturesizeswizzle_large">Grande (256 MB)</string>
<string name="gpu_texturesizeswizzle_verylarge">Muy grande (512 MB)</string>
<!-- GPU swizzle streams -->
<string name="gpu_swizzle_verylow">Muy bajo (4 MB)</string>
<string name="gpu_swizzle_low">Bajo (8 MB)</string>
<string name="gpu_swizzle_normal">Normal (16 MB)</string>
<string name="gpu_swizzle_medium">Medio (32 MB)</string>
<string name="gpu_swizzle_high">Alto (64 MB)</string>
<!-- GPU swizzle chunks -->
<string name="gpu_swizzlechunk_verylow">Muy bajo (32)</string>
<string name="gpu_swizzlechunk_low">Bajo (64)</string>
<string name="gpu_swizzlechunk_normal">Normal (128)</string>
<string name="gpu_swizzlechunk_medium">Medio (256)</string>
<string name="gpu_swizzlechunk_high">Alto (512)</string>
<!-- Temperature Units -->
<string name="temperature_celsius">Celsius</string>

View file

@ -482,8 +482,6 @@
<string name="emulate_bgr565">Emuler BGR565</string>
<string name="renderer_asynchronous_shaders">Utiliser les shaders asynchrones</string>
<string name="renderer_asynchronous_shaders_description">Compile les shaders de manière asynchrone. Cela peut réduire les saccades mais peut aussi provoquer des problèmes graphiques.</string>
<string name="gpu_unswizzle_disabled">Désactivé</string>
<string name="gpu_unswizzle_default_button">Par défaut</string>
<string name="extensions">Extensions</string>
@ -884,25 +882,10 @@
<string name="memory_8gb">8 Go (Dangereux)</string>
<!-- GPU swizzle texture size -->
<string name="gpu_texturesizeswizzle_verysmall">Très petit (16 Mo)</string>
<string name="gpu_texturesizeswizzle_small">Petit (32 Mo)</string>
<string name="gpu_texturesizeswizzle_normal">Normal (128 Mo)</string>
<string name="gpu_texturesizeswizzle_large">Large (256 Mo)</string>
<string name="gpu_texturesizeswizzle_verylarge">Très large (512 Mo)</string>
<!-- GPU swizzle streams -->
<string name="gpu_swizzle_verylow">Très faible (4 Mo)</string>
<string name="gpu_swizzle_low">Faible (8 Mo)</string>
<string name="gpu_swizzle_normal">Normal (16 Mo)</string>
<string name="gpu_swizzle_medium">Moyen (32 Mo)</string>
<string name="gpu_swizzle_high">Élevé (64 Mo)</string>
<!-- GPU swizzle chunks -->
<string name="gpu_swizzlechunk_verylow">Très faible (32)</string>
<string name="gpu_swizzlechunk_low">Faible (64)</string>
<string name="gpu_swizzlechunk_normal">Normal (128)</string>
<string name="gpu_swizzlechunk_medium">Moyen (256)</string>
<string name="gpu_swizzlechunk_high">Élevé (512)</string>
<!-- Temperature Units -->
<string name="temperature_celsius">Celsius</string>

View file

@ -554,8 +554,6 @@
<string name="renderer_force_max_clock_description">Заставляет ГПУ работать на максимально возможных тактовых частотах (тепловые ограничения все равно будут применяться).</string>
<string name="renderer_asynchronous_gpu_emulation">Асинхронная эмуляция ГПУ</string>
<string name="renderer_asynchronous_gpu_emulation_description">Может повысить производительность за счёт асинхронного запуска эмуляции ГПУ, но ценой появления графических ошибок и увеличения частоты вылетов из-за операций, зависящих от синхронизации.</string>
<string name="renderer_async_presentation">Асинхронная презентация</string>
<string name="renderer_async_presentation_description">Может повысить производительность за счёт перемещения вывода кадров в отдельный поток ЦП, но ценой возникновения графических проблем.</string>
<string name="renderer_reactive_flushing">Реактивная очистка</string>
<string name="renderer_reactive_flushing_description">Повышение точности рендеринга в некоторых играх за счет снижения производительности.</string>
<string name="enable_buffer_history">Включить историю буфера</string>
@ -579,17 +577,6 @@
<string name="rescale_hack_description">Включает старый метод обработки этапа перенастройки масштабирования для игр за счёт использования быстрого алгоритма перемасштабирования.</string>
<string name="renderer_asynchronous_shaders">Использовать асинхронные шейдеры</string>
<string name="renderer_asynchronous_shaders_description">Компилирует шейдеры асинхронно. Это может уменьшить подтормаживания, но также может вызвать графические артефакты.</string>
<string name="gpu_unswizzle_settings">Настройки распаковки текстур (Unswizzle)</string>
<string name="gpu_unswizzle_settings_description">Настройте параметры распаковки текстур на стороне ГПУ либо полностью отключите эту функцию. Изменение этих параметров позволяет найти баланс между производительностью и качеством загрузки текстур.</string>
<string name="gpu_unswizzle_enable">Включить распаковку текстур (Unswizzle)</string>
<string name="gpu_unswizzle_disabled">Отключено</string>
<string name="gpu_unswizzle_texture_size">Макс. размер текстуры Unswizzle</string>
<string name="gpu_unswizzle_texture_size_description">Задает максимальный размер (в МБ) текстур для преобразования формата (unswizzle) на ГПУ. Хотя ГПУ быстрее работает со средними и большими текстурами, ЦП может быть эффективнее для очень маленьких. Настройте это значение, чтобы найти баланс между ускорением на ГПУ и нагрузкой на ЦП.</string>
<string name="gpu_unswizzle_stream_size">Размер потока Unswizzle</string>
<string name="gpu_unswizzle_stream_size_description">Задает лимит данных на кадр для преобразования крупных текстур (unswizzle). Высокие значения ускоряют загрузку текстур ценой увеличения задержки кадра; низкие значения снижают нагрузку на ГПУ, но могут вызывать заметную постепенную подгрузку текстур.</string>
<string name="gpu_unswizzle_chunk_size">Размер блока Unswizzle</string>
<string name="gpu_unswizzle_chunk_size_description">Задает количество слоёв глубины, обрабатываемых за одну пачку для 3D-текстур. Увеличение этого значения улучшает пропускную способность на мощных ГПУ, но может вызывать подтормаживания или таймауты драйвера на слабом железе.</string>
<string name="gpu_unswizzle_default_button">По умолчанию</string>
<string name="extensions">Расширения</string>
@ -1030,25 +1017,10 @@
<string name="fast_gpu_high">Разгон</string>
<!-- GPU swizzle texture size -->
<string name="gpu_texturesizeswizzle_verysmall">Очень малый (16 МБ)</string>
<string name="gpu_texturesizeswizzle_small">Малый (32 МБ)</string>
<string name="gpu_texturesizeswizzle_normal">Обычный (128 МБ)</string>
<string name="gpu_texturesizeswizzle_large">Большой (256 МБ)</string>
<string name="gpu_texturesizeswizzle_verylarge">Очень большой (512 МБ)</string>
<!-- GPU swizzle streams -->
<string name="gpu_swizzle_verylow">Очень низкий (4 МБ)</string>
<string name="gpu_swizzle_low">Низкий (8 МБ)</string>
<string name="gpu_swizzle_normal">Обычный (16 МБ)</string>
<string name="gpu_swizzle_medium">Средний (32 МБ)</string>
<string name="gpu_swizzle_high">Высокий (64 МБ)</string>
<!-- GPU swizzle chunks -->
<string name="gpu_swizzlechunk_verylow">Очень малый (32)</string>
<string name="gpu_swizzlechunk_low">Малый (64)</string>
<string name="gpu_swizzlechunk_normal">Обычный (128)</string>
<string name="gpu_swizzlechunk_medium">Средний (256)</string>
<string name="gpu_swizzlechunk_high">Большой (512)</string>
<!-- Temperature Units -->
<string name="temperature_celsius">Цельсий</string>

Some files were not shown because too many files have changed in this diff Show more