mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-29 18:22:47 +01:00
android: video_core: Disable problematic compute shaders.
- Fixes #104.
This commit is contained in:
parent
1c9dae7cac
commit
8dc7fe0c96
5 changed files with 17 additions and 5 deletions
|
@ -214,7 +214,6 @@ void Config::ReadValues() {
|
||||||
ReadSetting("Renderer", Settings::values.shader_backend);
|
ReadSetting("Renderer", Settings::values.shader_backend);
|
||||||
ReadSetting("Renderer", Settings::values.use_asynchronous_shaders);
|
ReadSetting("Renderer", Settings::values.use_asynchronous_shaders);
|
||||||
ReadSetting("Renderer", Settings::values.nvdec_emulation);
|
ReadSetting("Renderer", Settings::values.nvdec_emulation);
|
||||||
ReadSetting("Renderer", Settings::values.accelerate_astc);
|
|
||||||
ReadSetting("Renderer", Settings::values.use_fast_gpu_time);
|
ReadSetting("Renderer", Settings::values.use_fast_gpu_time);
|
||||||
ReadSetting("Renderer", Settings::values.use_vulkan_driver_pipeline_cache);
|
ReadSetting("Renderer", Settings::values.use_vulkan_driver_pipeline_cache);
|
||||||
ReadSetting("Renderer", Settings::values.async_presentation);
|
ReadSetting("Renderer", Settings::values.async_presentation);
|
||||||
|
@ -227,6 +226,9 @@ void Config::ReadValues() {
|
||||||
ReadSetting("Renderer", Settings::values.bg_green);
|
ReadSetting("Renderer", Settings::values.bg_green);
|
||||||
ReadSetting("Renderer", Settings::values.bg_blue);
|
ReadSetting("Renderer", Settings::values.bg_blue);
|
||||||
|
|
||||||
|
// Disable ASTC compute by default on Android
|
||||||
|
Settings::values.accelerate_astc = config->GetBoolean("Renderer", "accelerate_astc", false);
|
||||||
|
|
||||||
// Enable force_max_clock by default on Android
|
// Enable force_max_clock by default on Android
|
||||||
Settings::values.renderer_force_max_clock =
|
Settings::values.renderer_force_max_clock =
|
||||||
config->GetBoolean("Renderer", "force_max_clock", true);
|
config->GetBoolean("Renderer", "force_max_clock", true);
|
||||||
|
|
|
@ -333,7 +333,7 @@ use_asynchronous_shaders =
|
||||||
nvdec_emulation =
|
nvdec_emulation =
|
||||||
|
|
||||||
# Accelerate ASTC texture decoding.
|
# Accelerate ASTC texture decoding.
|
||||||
# 0: Off, 1 (default): On
|
# 0 (default): Off, 1: On
|
||||||
accelerate_astc =
|
accelerate_astc =
|
||||||
|
|
||||||
# Turns on the speed limiter, which will limit the emulation speed to the desired speed limit value
|
# Turns on the speed limiter, which will limit the emulation speed to the desired speed limit value
|
||||||
|
|
|
@ -303,9 +303,13 @@ BufferCacheRuntime::BufferCacheRuntime(const Device& device_, MemoryAllocator& m
|
||||||
DescriptorPool& descriptor_pool)
|
DescriptorPool& descriptor_pool)
|
||||||
: device{device_}, memory_allocator{memory_allocator_}, scheduler{scheduler_},
|
: device{device_}, memory_allocator{memory_allocator_}, scheduler{scheduler_},
|
||||||
staging_pool{staging_pool_}, guest_descriptor_queue{guest_descriptor_queue_},
|
staging_pool{staging_pool_}, guest_descriptor_queue{guest_descriptor_queue_},
|
||||||
uint8_pass(device, scheduler, descriptor_pool, staging_pool, compute_pass_descriptor_queue),
|
|
||||||
quad_index_pass(device, scheduler, descriptor_pool, staging_pool,
|
quad_index_pass(device, scheduler, descriptor_pool, staging_pool,
|
||||||
compute_pass_descriptor_queue) {
|
compute_pass_descriptor_queue) {
|
||||||
|
if (device.GetDriverID() != VK_DRIVER_ID_QUALCOMM_PROPRIETARY) {
|
||||||
|
// TODO: FixMe: Uint8Pass compute shader does not build on some Qualcomm drivers.
|
||||||
|
uint8_pass = std::make_unique<Uint8Pass>(device, scheduler, descriptor_pool, staging_pool,
|
||||||
|
compute_pass_descriptor_queue);
|
||||||
|
}
|
||||||
quad_array_index_buffer = std::make_shared<QuadArrayIndexBuffer>(device_, memory_allocator_,
|
quad_array_index_buffer = std::make_shared<QuadArrayIndexBuffer>(device_, memory_allocator_,
|
||||||
scheduler_, staging_pool_);
|
scheduler_, staging_pool_);
|
||||||
quad_strip_index_buffer = std::make_shared<QuadStripIndexBuffer>(device_, memory_allocator_,
|
quad_strip_index_buffer = std::make_shared<QuadStripIndexBuffer>(device_, memory_allocator_,
|
||||||
|
@ -442,7 +446,9 @@ void BufferCacheRuntime::BindIndexBuffer(PrimitiveTopology topology, IndexFormat
|
||||||
topology == PrimitiveTopology::QuadStrip);
|
topology == PrimitiveTopology::QuadStrip);
|
||||||
} else if (vk_index_type == VK_INDEX_TYPE_UINT8_EXT && !device.IsExtIndexTypeUint8Supported()) {
|
} else if (vk_index_type == VK_INDEX_TYPE_UINT8_EXT && !device.IsExtIndexTypeUint8Supported()) {
|
||||||
vk_index_type = VK_INDEX_TYPE_UINT16;
|
vk_index_type = VK_INDEX_TYPE_UINT16;
|
||||||
std::tie(vk_buffer, vk_offset) = uint8_pass.Assemble(num_indices, buffer, offset);
|
if (uint8_pass) {
|
||||||
|
std::tie(vk_buffer, vk_offset) = uint8_pass->Assemble(num_indices, buffer, offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (vk_buffer == VK_NULL_HANDLE) {
|
if (vk_buffer == VK_NULL_HANDLE) {
|
||||||
// Vulkan doesn't support null index buffers. Replace it with our own null buffer.
|
// Vulkan doesn't support null index buffers. Replace it with our own null buffer.
|
||||||
|
|
|
@ -139,7 +139,7 @@ private:
|
||||||
vk::Buffer null_buffer;
|
vk::Buffer null_buffer;
|
||||||
MemoryCommit null_buffer_commit;
|
MemoryCommit null_buffer_commit;
|
||||||
|
|
||||||
Uint8Pass uint8_pass;
|
std::unique_ptr<Uint8Pass> uint8_pass;
|
||||||
QuadIndexedPass quad_index_pass;
|
QuadIndexedPass quad_index_pass;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -500,6 +500,10 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HasTimelineSemaphore() const {
|
bool HasTimelineSemaphore() const {
|
||||||
|
if (GetDriverID() == VK_DRIVER_ID_QUALCOMM_PROPRIETARY) {
|
||||||
|
// Timeline semaphores do not work properly on all Qualcomm drivers.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return features.timeline_semaphore.timelineSemaphore;
|
return features.timeline_semaphore.timelineSemaphore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue