iris: Enable HIZ_CCS sampling
Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -355,7 +355,7 @@ iris_blit(struct pipe_context *ctx, const struct pipe_blit_info *info)
|
|||||||
enum isl_aux_usage src_aux_usage =
|
enum isl_aux_usage src_aux_usage =
|
||||||
iris_resource_texture_aux_usage(ice, src_res, src_fmt.fmt, 0);
|
iris_resource_texture_aux_usage(ice, src_res, src_fmt.fmt, 0);
|
||||||
|
|
||||||
if (src_aux_usage == ISL_AUX_USAGE_HIZ)
|
if (iris_resource_level_has_hiz(src_res, info->src.level))
|
||||||
src_aux_usage = ISL_AUX_USAGE_NONE;
|
src_aux_usage = ISL_AUX_USAGE_NONE;
|
||||||
|
|
||||||
bool src_clear_supported = src_aux_usage != ISL_AUX_USAGE_NONE &&
|
bool src_clear_supported = src_aux_usage != ISL_AUX_USAGE_NONE &&
|
||||||
|
@@ -558,14 +558,22 @@ format_ccs_e_compat_with_resource(const struct gen_device_info *devinfo,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
sample_with_hiz(const struct gen_device_info *devinfo,
|
sample_with_depth_aux(const struct gen_device_info *devinfo,
|
||||||
const struct iris_resource *res)
|
const struct iris_resource *res)
|
||||||
{
|
{
|
||||||
if (!devinfo->has_sample_with_hiz)
|
switch (res->aux.usage) {
|
||||||
|
case ISL_AUX_USAGE_HIZ:
|
||||||
|
if (devinfo->has_sample_with_hiz)
|
||||||
|
break;
|
||||||
return false;
|
return false;
|
||||||
|
case ISL_AUX_USAGE_HIZ_CCS:
|
||||||
if (res->aux.usage != ISL_AUX_USAGE_HIZ)
|
/* Write through mode must have been enabled for prior writes. */
|
||||||
|
if (isl_surf_supports_hiz_ccs_wt(devinfo, &res->surf, res->aux.usage))
|
||||||
|
break;
|
||||||
return false;
|
return false;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* It seems the hardware won't fallback to the depth buffer if some of the
|
/* It seems the hardware won't fallback to the depth buffer if some of the
|
||||||
* mipmap levels aren't available in the HiZ buffer. So we need all levels
|
* mipmap levels aren't available in the HiZ buffer. So we need all levels
|
||||||
@@ -1342,10 +1350,15 @@ iris_resource_texture_aux_usage(struct iris_context *ice,
|
|||||||
|
|
||||||
switch (res->aux.usage) {
|
switch (res->aux.usage) {
|
||||||
case ISL_AUX_USAGE_HIZ:
|
case ISL_AUX_USAGE_HIZ:
|
||||||
if (sample_with_hiz(devinfo, res))
|
if (sample_with_depth_aux(devinfo, res))
|
||||||
return ISL_AUX_USAGE_HIZ;
|
return ISL_AUX_USAGE_HIZ;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ISL_AUX_USAGE_HIZ_CCS:
|
||||||
|
if (sample_with_depth_aux(devinfo, res))
|
||||||
|
return ISL_AUX_USAGE_CCS_E;
|
||||||
|
break;
|
||||||
|
|
||||||
case ISL_AUX_USAGE_MCS:
|
case ISL_AUX_USAGE_MCS:
|
||||||
return ISL_AUX_USAGE_MCS;
|
return ISL_AUX_USAGE_MCS;
|
||||||
|
|
||||||
|
@@ -498,8 +498,11 @@ iris_resource_configure_aux(struct iris_screen *screen,
|
|||||||
if (!devinfo->has_sample_with_hiz || res->surf.samples > 1)
|
if (!devinfo->has_sample_with_hiz || res->surf.samples > 1)
|
||||||
res->aux.sampler_usages &= ~(1 << ISL_AUX_USAGE_HIZ);
|
res->aux.sampler_usages &= ~(1 << ISL_AUX_USAGE_HIZ);
|
||||||
|
|
||||||
/* We don't yet support sampling with HIZ_CCS. */
|
/* We don't always support sampling with HIZ_CCS. But when we do, treat it
|
||||||
|
* as CCS_E.*/
|
||||||
res->aux.sampler_usages &= ~(1 << ISL_AUX_USAGE_HIZ_CCS);
|
res->aux.sampler_usages &= ~(1 << ISL_AUX_USAGE_HIZ_CCS);
|
||||||
|
if (isl_surf_supports_hiz_ccs_wt(devinfo, &res->surf, res->aux.usage))
|
||||||
|
res->aux.sampler_usages |= 1 << ISL_AUX_USAGE_CCS_E;
|
||||||
|
|
||||||
enum isl_aux_state initial_state;
|
enum isl_aux_state initial_state;
|
||||||
*aux_size_B = 0;
|
*aux_size_B = 0;
|
||||||
|
Reference in New Issue
Block a user