summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2023-05-06 00:40:10 -0700
committerGravatar bunnei2023-06-03 00:06:00 -0700
commit8dc7fe0c968ef110d987dea75bad30817035372c (patch)
treed4ddb7bd8f4b29bb92169512ed1a2e072edf8dbf /src
parentandroid: Update progard to fix settings crash (diff)
downloadyuzu-8dc7fe0c968ef110d987dea75bad30817035372c.tar.gz
yuzu-8dc7fe0c968ef110d987dea75bad30817035372c.tar.xz
yuzu-8dc7fe0c968ef110d987dea75bad30817035372c.zip
android: video_core: Disable problematic compute shaders.
- Fixes #104.
Diffstat (limited to 'src')
-rw-r--r--src/android/app/src/main/jni/config.cpp4
-rw-r--r--src/android/app/src/main/jni/default_ini.h2
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.cpp10
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.h2
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h4
5 files changed, 17 insertions, 5 deletions
diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp
index 7a83fea42..34aa1ee4c 100644
--- a/src/android/app/src/main/jni/config.cpp
+++ b/src/android/app/src/main/jni/config.cpp
@@ -214,7 +214,6 @@ void Config::ReadValues() {
214 ReadSetting("Renderer", Settings::values.shader_backend); 214 ReadSetting("Renderer", Settings::values.shader_backend);
215 ReadSetting("Renderer", Settings::values.use_asynchronous_shaders); 215 ReadSetting("Renderer", Settings::values.use_asynchronous_shaders);
216 ReadSetting("Renderer", Settings::values.nvdec_emulation); 216 ReadSetting("Renderer", Settings::values.nvdec_emulation);
217 ReadSetting("Renderer", Settings::values.accelerate_astc);
218 ReadSetting("Renderer", Settings::values.use_fast_gpu_time); 217 ReadSetting("Renderer", Settings::values.use_fast_gpu_time);
219 ReadSetting("Renderer", Settings::values.use_vulkan_driver_pipeline_cache); 218 ReadSetting("Renderer", Settings::values.use_vulkan_driver_pipeline_cache);
220 ReadSetting("Renderer", Settings::values.async_presentation); 219 ReadSetting("Renderer", Settings::values.async_presentation);
@@ -227,6 +226,9 @@ void Config::ReadValues() {
227 ReadSetting("Renderer", Settings::values.bg_green); 226 ReadSetting("Renderer", Settings::values.bg_green);
228 ReadSetting("Renderer", Settings::values.bg_blue); 227 ReadSetting("Renderer", Settings::values.bg_blue);
229 228
229 // Disable ASTC compute by default on Android
230 Settings::values.accelerate_astc = config->GetBoolean("Renderer", "accelerate_astc", false);
231
230 // Enable force_max_clock by default on Android 232 // Enable force_max_clock by default on Android
231 Settings::values.renderer_force_max_clock = 233 Settings::values.renderer_force_max_clock =
232 config->GetBoolean("Renderer", "force_max_clock", true); 234 config->GetBoolean("Renderer", "force_max_clock", true);
diff --git a/src/android/app/src/main/jni/default_ini.h b/src/android/app/src/main/jni/default_ini.h
index d6bf458a6..da541851e 100644
--- a/src/android/app/src/main/jni/default_ini.h
+++ b/src/android/app/src/main/jni/default_ini.h
@@ -333,7 +333,7 @@ use_asynchronous_shaders =
333nvdec_emulation = 333nvdec_emulation =
334 334
335# Accelerate ASTC texture decoding. 335# Accelerate ASTC texture decoding.
336# 0: Off, 1 (default): On 336# 0 (default): Off, 1: On
337accelerate_astc = 337accelerate_astc =
338 338
339# Turns on the speed limiter, which will limit the emulation speed to the desired speed limit value 339# Turns on the speed limiter, which will limit the emulation speed to the desired speed limit value
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
index 9627eb129..daa128399 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
@@ -303,9 +303,13 @@ BufferCacheRuntime::BufferCacheRuntime(const Device& device_, MemoryAllocator& m
303 DescriptorPool& descriptor_pool) 303 DescriptorPool& descriptor_pool)
304 : device{device_}, memory_allocator{memory_allocator_}, scheduler{scheduler_}, 304 : device{device_}, memory_allocator{memory_allocator_}, scheduler{scheduler_},
305 staging_pool{staging_pool_}, guest_descriptor_queue{guest_descriptor_queue_}, 305 staging_pool{staging_pool_}, guest_descriptor_queue{guest_descriptor_queue_},
306 uint8_pass(device, scheduler, descriptor_pool, staging_pool, compute_pass_descriptor_queue),
307 quad_index_pass(device, scheduler, descriptor_pool, staging_pool, 306 quad_index_pass(device, scheduler, descriptor_pool, staging_pool,
308 compute_pass_descriptor_queue) { 307 compute_pass_descriptor_queue) {
308 if (device.GetDriverID() != VK_DRIVER_ID_QUALCOMM_PROPRIETARY) {
309 // TODO: FixMe: Uint8Pass compute shader does not build on some Qualcomm drivers.
310 uint8_pass = std::make_unique<Uint8Pass>(device, scheduler, descriptor_pool, staging_pool,
311 compute_pass_descriptor_queue);
312 }
309 quad_array_index_buffer = std::make_shared<QuadArrayIndexBuffer>(device_, memory_allocator_, 313 quad_array_index_buffer = std::make_shared<QuadArrayIndexBuffer>(device_, memory_allocator_,
310 scheduler_, staging_pool_); 314 scheduler_, staging_pool_);
311 quad_strip_index_buffer = std::make_shared<QuadStripIndexBuffer>(device_, memory_allocator_, 315 quad_strip_index_buffer = std::make_shared<QuadStripIndexBuffer>(device_, memory_allocator_,
@@ -442,7 +446,9 @@ void BufferCacheRuntime::BindIndexBuffer(PrimitiveTopology topology, IndexFormat
442 topology == PrimitiveTopology::QuadStrip); 446 topology == PrimitiveTopology::QuadStrip);
443 } else if (vk_index_type == VK_INDEX_TYPE_UINT8_EXT && !device.IsExtIndexTypeUint8Supported()) { 447 } else if (vk_index_type == VK_INDEX_TYPE_UINT8_EXT && !device.IsExtIndexTypeUint8Supported()) {
444 vk_index_type = VK_INDEX_TYPE_UINT16; 448 vk_index_type = VK_INDEX_TYPE_UINT16;
445 std::tie(vk_buffer, vk_offset) = uint8_pass.Assemble(num_indices, buffer, offset); 449 if (uint8_pass) {
450 std::tie(vk_buffer, vk_offset) = uint8_pass->Assemble(num_indices, buffer, offset);
451 }
446 } 452 }
447 if (vk_buffer == VK_NULL_HANDLE) { 453 if (vk_buffer == VK_NULL_HANDLE) {
448 // Vulkan doesn't support null index buffers. Replace it with our own null buffer. 454 // Vulkan doesn't support null index buffers. Replace it with our own null buffer.
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h
index 5e9602905..794dd0758 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.h
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h
@@ -139,7 +139,7 @@ private:
139 vk::Buffer null_buffer; 139 vk::Buffer null_buffer;
140 MemoryCommit null_buffer_commit; 140 MemoryCommit null_buffer_commit;
141 141
142 Uint8Pass uint8_pass; 142 std::unique_ptr<Uint8Pass> uint8_pass;
143 QuadIndexedPass quad_index_pass; 143 QuadIndexedPass quad_index_pass;
144}; 144};
145 145
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h
index 3c9d11617..b692b4be4 100644
--- a/src/video_core/vulkan_common/vulkan_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -500,6 +500,10 @@ public:
500 } 500 }
501 501
502 bool HasTimelineSemaphore() const { 502 bool HasTimelineSemaphore() const {
503 if (GetDriverID() == VK_DRIVER_ID_QUALCOMM_PROPRIETARY) {
504 // Timeline semaphores do not work properly on all Qualcomm drivers.
505 return false;
506 }
503 return features.timeline_semaphore.timelineSemaphore; 507 return features.timeline_semaphore.timelineSemaphore;
504 } 508 }
505 509