anv: Allow unused VkSpecializationMapEntries

Fixes future CTS: dEQP-VK.pipeline.spec_constant.*.basic.*unused_*

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11987>
This commit is contained in:
Iván Briano 2021-07-20 11:55:58 -07:00 committed by Marge Bot
parent b5e782f5f4
commit 0b9562a94a
1 changed files with 20 additions and 1 deletions

View File

@ -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;
}
}