diff --git a/src/intel/compiler/brw_eu_validate.c b/src/intel/compiler/brw_eu_validate.c index 9fd3bb579ed..45e0698b025 100644 --- a/src/intel/compiler/brw_eu_validate.c +++ b/src/intel/compiler/brw_eu_validate.c @@ -1075,21 +1075,25 @@ general_restrictions_on_region_parameters(const struct brw_isa_info *isa, /* VertStride must be used to cross GRF register boundaries. This rule * implies that elements within a 'Width' cannot cross GRF boundaries. */ - const uint64_t mask = (1ULL << element_size) - 1; unsigned rowbase = subreg; for (int y = 0; y < exec_size / width; y++) { - uint64_t access_mask = 0; + bool spans_grfs = false; unsigned offset = rowbase; + unsigned first_grf = offset / REG_SIZE; for (int x = 0; x < width; x++) { - access_mask |= mask << (offset % 64); + const unsigned end_byte = offset + (element_size - 1); + const unsigned end_grf = end_byte / REG_SIZE; + spans_grfs = end_grf != first_grf; + if (spans_grfs) + break; offset += hstride * element_size; } rowbase += vstride * element_size; - if ((uint32_t)access_mask != 0 && (access_mask >> 32) != 0) { + if (spans_grfs) { ERROR("VertStride must be used to cross GRF register boundaries"); break; }