radv: do not abort with unknown/unimplemented descriptor types
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 15 Apr 2020 16:08:10 +0000 (18:08 +0200)
committerMarge Bot <eric+marge@anholt.net>
Thu, 16 Apr 2020 08:14:56 +0000 (08:14 +0000)
To workaround a crash with Wolfeinstein Younglood because the
games creates one descriptor with
VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV...

I reported the problem to Machine Games, but still no answer, so
let's remove the unreachable calls (which are technically not
unreachable for buggy apps) to help gamers.

Note that AMDVLK and AMDGPU-PRO don't crash because they ignore
unsupported descriptor types.

Cc: <mesa-stable@lists.freedesktop.org>
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4571>

src/amd/vulkan/radv_descriptor_set.c

index 33947ea3726e864b6d0f27bb3f4675a0aa6a2844..ea3d733ba6139b6f6d995038d8bf82e14be3bf96 100644 (file)
@@ -150,7 +150,7 @@ VkResult radv_CreateDescriptorSetLayout(
        for (uint32_t j = 0; j < pCreateInfo->bindingCount; j++) {
                const VkDescriptorSetLayoutBinding *binding = bindings + j;
                uint32_t b = binding->binding;
-               uint32_t alignment;
+               uint32_t alignment = 0;
                unsigned binding_buffer_count = 0;
                uint32_t descriptor_count = binding->descriptorCount;
                bool has_ycbcr_sampler = false;
@@ -214,7 +214,6 @@ VkResult radv_CreateDescriptorSetLayout(
                        descriptor_count = 1;
                        break;
                default:
-                       unreachable("unknown descriptor type\n");
                        break;
                }
 
@@ -363,7 +362,6 @@ void radv_GetDescriptorSetLayoutSupport(VkDevice device,
                        descriptor_count = 1;
                        break;
                default:
-                       unreachable("unknown descriptor type\n");
                        break;
                }
 
@@ -673,7 +671,6 @@ VkResult radv_CreateDescriptorPool(
                        bo_size += pCreateInfo->pPoolSizes[i].descriptorCount;
                        break;
                default:
-                       unreachable("unknown descriptor type\n");
                        break;
                }
        }
@@ -1050,7 +1047,6 @@ void radv_update_descriptor_sets(
                                }
                                break;
                        default:
-                               unreachable("unimplemented descriptor type");
                                break;
                        }
                        ptr += binding_layout->size / 4;
@@ -1303,7 +1299,6 @@ void radv_update_descriptor_set_with_template(struct radv_device *device,
                                        memcpy(pDst, templ->entry[i].immutable_samplers + 4 * j, 16);
                                break;
                        default:
-                               unreachable("unimplemented descriptor type");
                                break;
                        }
                        pSrc += templ->entry[i].src_stride;