diff options
-rw-r--r-- | src/intel/isl/isl.h | 7 | ||||
-rw-r--r-- | src/intel/isl/isl_storage_image.c | 13 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index 6c417b29f4c..47d3a68ae4a 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -903,6 +903,13 @@ enum isl_format isl_lower_storage_image_format(const struct brw_device_info *devinfo, enum isl_format fmt); +/* Returns true if this hardware supports typed load/store on a format with + * the same size as the given format. + */ +bool +isl_has_matching_typed_storage_image_format(const struct brw_device_info *devinfo, + enum isl_format fmt); + static inline bool isl_tiling_is_any_y(enum isl_tiling tiling) { diff --git a/src/intel/isl/isl_storage_image.c b/src/intel/isl/isl_storage_image.c index 8d9bea3f954..590d2e48b05 100644 --- a/src/intel/isl/isl_storage_image.c +++ b/src/intel/isl/isl_storage_image.c @@ -187,6 +187,19 @@ isl_lower_storage_image_format(const struct brw_device_info *devinfo, } } +bool +isl_has_matching_typed_storage_image_format(const struct brw_device_info *devinfo, + enum isl_format fmt) +{ + if (devinfo->gen >= 9) { + return true; + } else if (devinfo->gen >= 8 || devinfo->is_haswell) { + return isl_format_get_layout(fmt)->bs <= 8; + } else { + return isl_format_get_layout(fmt)->bs <= 4; + } +} + static const struct brw_image_param image_param_defaults = { /* Set the swizzling shifts to all-ones to effectively disable * swizzling -- See emit_address_calculation() in |