Browse Source

Added setting to turn off streaming of sparse texture unswizzling

pull/3737/head
Forrest Keller 3 months ago
committed by crueter
parent
commit
960ece216b
  1. 4
      src/android/app/src/main/res/values/arrays.xml
  2. 2
      src/android/app/src/main/res/values/strings.xml
  3. 4
      src/common/settings_enums.h
  4. 2
      src/qt_common/config/shared_translation.cpp
  5. 19
      src/video_core/texture_cache/texture_cache.h

4
src/android/app/src/main/res/values/arrays.xml

@ -567,6 +567,7 @@
<item>@string/gpu_swizzle_normal</item> <item>@string/gpu_swizzle_normal</item>
<item>@string/gpu_swizzle_medium</item> <item>@string/gpu_swizzle_medium</item>
<item>@string/gpu_swizzle_high</item> <item>@string/gpu_swizzle_high</item>
<item>@string/gpu_swizzle_off</item>
</string-array> </string-array>
<integer-array name="gpuSwizzleValues"> <integer-array name="gpuSwizzleValues">
@ -575,6 +576,7 @@
<item>2</item> <item>2</item>
<item>3</item> <item>3</item>
<item>4</item> <item>4</item>
<item>5</item>
</integer-array> </integer-array>
<string-array name="gpuSwizzleChunkEntries"> <string-array name="gpuSwizzleChunkEntries">
@ -583,6 +585,7 @@
<item>@string/gpu_swizzlechunk_normal</item> <item>@string/gpu_swizzlechunk_normal</item>
<item>@string/gpu_swizzlechunk_medium</item> <item>@string/gpu_swizzlechunk_medium</item>
<item>@string/gpu_swizzlechunk_high</item> <item>@string/gpu_swizzlechunk_high</item>
<item>@string/gpu_swizzlechunk_off</item>
</string-array> </string-array>
<integer-array name="gpuSwizzleChunkValues"> <integer-array name="gpuSwizzleChunkValues">
@ -591,6 +594,7 @@
<item>2</item> <item>2</item>
<item>3</item> <item>3</item>
<item>4</item> <item>4</item>
<item>5</item>
</integer-array> </integer-array>
<string-array name="temperatureUnitEntries"> <string-array name="temperatureUnitEntries">

2
src/android/app/src/main/res/values/strings.xml

@ -986,6 +986,7 @@
<string name="gpu_swizzle_normal">Normal (16 MB)</string> <string name="gpu_swizzle_normal">Normal (16 MB)</string>
<string name="gpu_swizzle_medium">Medium (32 MB)</string> <string name="gpu_swizzle_medium">Medium (32 MB)</string>
<string name="gpu_swizzle_high">High (64 MB)</string> <string name="gpu_swizzle_high">High (64 MB)</string>
<string name="gpu_swizzle_off">Off</string>
<!-- GPU swizzle chunks --> <!-- GPU swizzle chunks -->
<string name="gpu_swizzlechunk_verylow">Very Low (32)</string> <string name="gpu_swizzlechunk_verylow">Very Low (32)</string>
@ -993,6 +994,7 @@
<string name="gpu_swizzlechunk_normal">Normal (128)</string> <string name="gpu_swizzlechunk_normal">Normal (128)</string>
<string name="gpu_swizzlechunk_medium">Medium (256)</string> <string name="gpu_swizzlechunk_medium">Medium (256)</string>
<string name="gpu_swizzlechunk_high">High (512)</string> <string name="gpu_swizzlechunk_high">High (512)</string>
<string name="gpu_swizzlechunk_off">Off</string>
<!-- Temperature Units --> <!-- Temperature Units -->
<string name="temperature_celsius">Celsius</string> <string name="temperature_celsius">Celsius</string>

4
src/common/settings_enums.h

@ -153,8 +153,8 @@ ENUM(AppletMode, HLE, LLE);
ENUM(SpirvOptimizeMode, Never, OnLoad, Always); ENUM(SpirvOptimizeMode, Never, OnLoad, Always);
ENUM(GpuOverclock, Normal, Medium, High) ENUM(GpuOverclock, Normal, Medium, High)
ENUM(GpuUnswizzleSize, VerySmall, Small, Normal, Large, VeryLarge) ENUM(GpuUnswizzleSize, VerySmall, Small, Normal, Large, VeryLarge)
ENUM(GpuUnswizzle, VeryLow, Low, Normal, Medium, High)
ENUM(GpuUnswizzleChunk, VeryLow, Low, Normal, Medium, High)
ENUM(GpuUnswizzle, VeryLow, Low, Normal, Medium, High, Off)
ENUM(GpuUnswizzleChunk, VeryLow, Low, Normal, Medium, High, Off)
ENUM(TemperatureUnits, Celsius, Fahrenheit) ENUM(TemperatureUnits, Celsius, Fahrenheit)
ENUM(ExtendedDynamicState, Disabled, EDS1, EDS2, EDS3); ENUM(ExtendedDynamicState, Disabled, EDS1, EDS2, EDS3);
ENUM(GpuLogLevel, Off, Errors, Standard, Verbose, All) ENUM(GpuLogLevel, Off, Errors, Standard, Verbose, All)

2
src/qt_common/config/shared_translation.cpp

@ -665,6 +665,7 @@ std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent) {
PAIR(GpuUnswizzle, Normal, tr("Normal (16 MB)")), PAIR(GpuUnswizzle, Normal, tr("Normal (16 MB)")),
PAIR(GpuUnswizzle, Medium, tr("Medium (32 MB)")), PAIR(GpuUnswizzle, Medium, tr("Medium (32 MB)")),
PAIR(GpuUnswizzle, High, tr("High (64 MB)")), PAIR(GpuUnswizzle, High, tr("High (64 MB)")),
PAIR(GpuUnswizzle, Off, tr("Off")),
}}); }});
translations->insert({Settings::EnumMetadata<Settings::GpuUnswizzleChunk>::Index(), translations->insert({Settings::EnumMetadata<Settings::GpuUnswizzleChunk>::Index(),
{ {
@ -673,6 +674,7 @@ std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent) {
PAIR(GpuUnswizzleChunk, Normal, tr("Normal (128)")), PAIR(GpuUnswizzleChunk, Normal, tr("Normal (128)")),
PAIR(GpuUnswizzleChunk, Medium, tr("Medium (256)")), PAIR(GpuUnswizzleChunk, Medium, tr("Medium (256)")),
PAIR(GpuUnswizzleChunk, High, tr("High (512)")), PAIR(GpuUnswizzleChunk, High, tr("High (512)")),
PAIR(GpuUnswizzleChunk, Off, tr("Off")),
}}); }});
translations->insert({Settings::EnumMetadata<Settings::ExtendedDynamicState>::Index(), translations->insert({Settings::EnumMetadata<Settings::ExtendedDynamicState>::Index(),

19
src/video_core/texture_cache/texture_cache.h

@ -95,6 +95,7 @@ TextureCache<P>::TextureCache(Runtime& runtime_, Tegra::MaxwellDeviceMemoryManag
case Settings::GpuUnswizzle::Normal: swizzle_chunk_size = 16_MiB; break; case Settings::GpuUnswizzle::Normal: swizzle_chunk_size = 16_MiB; break;
case Settings::GpuUnswizzle::Medium: swizzle_chunk_size = 32_MiB; break; case Settings::GpuUnswizzle::Medium: swizzle_chunk_size = 32_MiB; break;
case Settings::GpuUnswizzle::High: swizzle_chunk_size = 64_MiB; break; case Settings::GpuUnswizzle::High: swizzle_chunk_size = 64_MiB; break;
case Settings::GpuUnswizzle::Off: swizzle_chunk_size = 0; break;
default: swizzle_chunk_size = 16_MiB; default: swizzle_chunk_size = 16_MiB;
} }
@ -104,6 +105,7 @@ TextureCache<P>::TextureCache(Runtime& runtime_, Tegra::MaxwellDeviceMemoryManag
case Settings::GpuUnswizzleChunk::Normal: swizzle_slices_per_batch = 128; break; case Settings::GpuUnswizzleChunk::Normal: swizzle_slices_per_batch = 128; break;
case Settings::GpuUnswizzleChunk::Medium: swizzle_slices_per_batch = 256; break; case Settings::GpuUnswizzleChunk::Medium: swizzle_slices_per_batch = 256; break;
case Settings::GpuUnswizzleChunk::High: swizzle_slices_per_batch = 512; break; case Settings::GpuUnswizzleChunk::High: swizzle_slices_per_batch = 512; break;
case Settings::GpuUnswizzleChunk::Off: swizzle_slices_per_batch = 0; break;
default: swizzle_slices_per_batch = 128; default: swizzle_slices_per_batch = 128;
} }
} else { } else {
@ -1401,10 +1403,10 @@ void TextureCache<P>::TickAsyncUnswizzle() {
return; return;
} }
if(current_unswizzle_frame > 0) {
/*if(current_unswizzle_frame > 0) {
current_unswizzle_frame--; current_unswizzle_frame--;
return; return;
}
}*/
PendingUnswizzle& task = unswizzle_queue.front(); PendingUnswizzle& task = unswizzle_queue.front();
Image& image = slot_images[task.image_id]; Image& image = slot_images[task.image_id];
@ -1429,7 +1431,10 @@ void TextureCache<P>::TickAsyncUnswizzle() {
if (task.current_offset < task.total_size) { if (task.current_offset < task.total_size) {
const size_t remaining = task.total_size - task.current_offset; const size_t remaining = task.total_size - task.current_offset;
size_t copy_amount = (std::min)(swizzle_chunk_size, remaining);
size_t copy_amount = 0;
if( swizzle_chunk_size == 0 )
copy_amount = remaining;
else copy_amount = (std::min)(swizzle_chunk_size, remaining);
if (remaining > swizzle_chunk_size) { if (remaining > swizzle_chunk_size) {
copy_amount = (copy_amount / task.bytes_per_slice) * task.bytes_per_slice; copy_amount = (copy_amount / task.bytes_per_slice) * task.bytes_per_slice;
@ -1446,7 +1451,11 @@ void TextureCache<P>::TickAsyncUnswizzle() {
const size_t bytes_ready = task.current_offset - task.last_submitted_offset; const size_t bytes_ready = task.current_offset - task.last_submitted_offset;
const u32 complete_slices = static_cast<u32>(bytes_ready / task.bytes_per_slice); const u32 complete_slices = static_cast<u32>(bytes_ready / task.bytes_per_slice);
if (complete_slices >= swizzle_slices_per_batch || (is_final_batch && complete_slices > 0)) {
if( swizzle_slices_per_batch <= 0 ) {
runtime.AccelerateImageUpload(image, task.staging_buffer, FixSmallVectorADL(FullUploadSwizzles(task.info)), 0, image.info.size.depth);
task.last_submitted_offset += (static_cast<size_t>(image.info.size.depth) * task.bytes_per_slice);
}
else if (complete_slices >= swizzle_slices_per_batch || (is_final_batch && complete_slices > 0)) {
const u32 z_start = static_cast<u32>(task.last_submitted_offset / task.bytes_per_slice); const u32 z_start = static_cast<u32>(task.last_submitted_offset / task.bytes_per_slice);
const u32 slices_to_process = (std::min)(complete_slices, swizzle_slices_per_batch); const u32 slices_to_process = (std::min)(complete_slices, swizzle_slices_per_batch);
const u32 z_count = (std::min)(slices_to_process, image.info.size.depth - z_start); const u32 z_count = (std::min)(slices_to_process, image.info.size.depth - z_start);
@ -1468,7 +1477,7 @@ void TextureCache<P>::TickAsyncUnswizzle() {
unswizzle_queue.pop_front(); unswizzle_queue.pop_front();
// Wait 4 frames to process the next entry // Wait 4 frames to process the next entry
current_unswizzle_frame = 4u;
// current_unswizzle_frame = 4u;
} }
} }

Loading…
Cancel
Save