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:
|
case 1:
|
||||||
spec_entries[i].value.u8 = *(const uint8_t *)data;
|
spec_entries[i].value.u8 = *(const uint8_t *)data;
|
||||||
break;
|
break;
|
||||||
|
case 0:
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue