radv: allow unused VkSpecializationMapEntries

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

Cc: 21.2 mesa-stable
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/12062>
(cherry picked from commit 0497588eac)
This commit is contained in:
Samuel Pitoiset 2021-07-26 13:47:13 +02:00 committed by Dylan Baker
parent 55761919e4
commit f9bae7e537
2 changed files with 19 additions and 1 deletions

View file

@ -22,7 +22,7 @@
"description": "radv: allow unused VkSpecializationMapEntries",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null
},

View file

@ -485,6 +485,24 @@ radv_shader_compile_to_nir(struct radv_device *device, struct vk_shader_module *
case 1:
memcpy(&spec_entries[i].value.u8, data, sizeof(uint8_t));
break;
case 0:
/* 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;
default:
assert(!"Invalid spec constant size");
break;