i965: Handle IVB DF differences in the validator.
On IVB/BYT, region parameters and execution size for DF are in terms of 32-bit elements, so they are doubled. For evaluating the validity of an instruction, we halve them. v2 (Sam): - Add comments. Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
This commit is contained in:

committed by
Francisco Jerez

parent
fbac8b1f94
commit
fd349d29e4
@@ -467,6 +467,14 @@ general_restrictions_based_on_operand_types(const struct gen_device_info *devinf
|
||||
brw_hw_reg_type_to_size(devinfo, exec_type, BRW_GENERAL_REGISTER_FILE);
|
||||
unsigned dst_type_size = brw_element_size(devinfo, inst, dst);
|
||||
|
||||
/* On IVB/BYT, region parameters and execution size for DF are in terms of
|
||||
* 32-bit elements, so they are doubled. For evaluating the validity of an
|
||||
* instruction, we halve them.
|
||||
*/
|
||||
if (devinfo->gen == 7 && !devinfo->is_haswell &&
|
||||
exec_type_size == 8 && dst_type_size == 4)
|
||||
dst_type_size = 8;
|
||||
|
||||
if (exec_type_size > dst_type_size) {
|
||||
ERROR_IF(dst_stride * dst_type_size != exec_type_size,
|
||||
"Destination stride must be equal to the ratio of the sizes of "
|
||||
@@ -576,6 +584,14 @@ general_restrictions_on_region_parameters(const struct gen_device_info *devinfo,
|
||||
}
|
||||
#undef DO_SRC
|
||||
|
||||
/* On IVB/BYT, region parameters and execution size for DF are in terms of
|
||||
* 32-bit elements, so they are doubled. For evaluating the validity of an
|
||||
* instruction, we halve them.
|
||||
*/
|
||||
if (devinfo->gen == 7 && !devinfo->is_haswell &&
|
||||
element_size == 8)
|
||||
element_size = 4;
|
||||
|
||||
/* ExecSize must be greater than or equal to Width. */
|
||||
ERROR_IF(exec_size < width, "ExecSize must be greater than or equal "
|
||||
"to Width");
|
||||
@@ -792,6 +808,14 @@ region_alignment_rules(const struct gen_device_info *devinfo,
|
||||
if (error_msg.str)
|
||||
return error_msg;
|
||||
|
||||
/* On IVB/BYT, region parameters and execution size for DF are in terms of
|
||||
* 32-bit elements, so they are doubled. For evaluating the validity of an
|
||||
* instruction, we halve them.
|
||||
*/
|
||||
if (devinfo->gen == 7 && !devinfo->is_haswell &&
|
||||
element_size == 8)
|
||||
element_size = 4;
|
||||
|
||||
align1_access_mask(dst_access_mask, exec_size, element_size, subreg,
|
||||
exec_size == 1 ? 0 : exec_size * stride,
|
||||
exec_size == 1 ? 1 : exec_size,
|
||||
|
Reference in New Issue
Block a user