vkd3d-shader/ir: Properly check the register bounds in shader_signature_find_element_for_reg().

Perhaps the existing code is safe in practice, but doing the check
properly avoids having to make that determination.
This commit is contained in:
Henri Verbeet 2024-09-19 15:32:28 +02:00
parent 8e39783770
commit f37be27bdc
Notes: Henri Verbeet 2024-09-24 14:10:54 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1107

View File

@ -1211,12 +1211,13 @@ static bool io_normaliser_is_in_control_point_phase(const struct io_normaliser *
static bool shader_signature_find_element_for_reg(const struct shader_signature *signature,
unsigned int reg_idx, unsigned int write_mask, unsigned int *element_idx)
{
const struct signature_element *e;
unsigned int i, base_write_mask;
for (i = 0; i < signature->element_count; ++i)
{
struct signature_element *e = &signature->elements[i];
if (e->register_index <= reg_idx && e->register_index + e->register_count > reg_idx
e = &signature->elements[i];
if (e->register_index <= reg_idx && e->register_count > reg_idx - e->register_index
&& (e->mask & write_mask) == write_mask)
{
*element_idx = i;