diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 5ffb575d75f..599da83c40d 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -117,8 +117,27 @@ anv_shader_compile_to_nir(struct anv_device *device, case 1: spec_entries[i].value.u8 = *(const uint8_t *)data; break; + case 0: default: - assert(!"Invalid spec constant size"); + /* The Vulkan spec says: + * + * "For a constantID specialization constant declared in a + * shader, size must match the byte size of the constantID. If + * the specialization constant is of type boolean, size must be + * the byte size of VkBool32." + * + * Therefore, since only scalars can be decorated as + * specialization constants, we can assume that if it doesn't have + * a size of 1, 2, 4, or 8, any use in a shader would be invalid + * usage. The spec further says: + * + * "If a constantID value is not a specialization constant ID + * used in the shader, that map entry does not affect the + * behavior of the pipeline." + * + * so we should ignore any invalid specialization constants rather + * than crash or error out when we see one. + */ break; } }