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:
parent
b5e782f5f4
commit
0b9562a94a
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue