From: Nanley Chery Date: Wed, 11 Jan 2017 16:12:48 +0000 (-0800) Subject: anv: Enable sampling from HiZ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=71334f494acea9ef0372fd4b3cd6557765669421;p=mesa.git anv: Enable sampling from HiZ v2: Restrict ISL_AUX_USAGE_HIZ to depth aspects Signed-off-by: Nanley Chery Reviewed-by: Jason Ekstrand --- diff --git a/src/intel/vulkan/TODO b/src/intel/vulkan/TODO index 37fd16b4372..38acc0dd5b6 100644 --- a/src/intel/vulkan/TODO +++ b/src/intel/vulkan/TODO @@ -8,7 +8,6 @@ Missing Features: - Sparse memory Performance: - - Sampling from HiZ (Nanley) - Multi-{sampled/gen8,LOD} HiZ - Compressed multisample support - Pushing pieces of UBOs? diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index e21374b1abc..9e5cebe1889 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -538,10 +538,23 @@ anv_CreateImageView(VkDevice _device, iview->isl.usage = 0; } - /* Sampling from HiZ is not yet enabled */ + /* If the HiZ buffer can be sampled from, set the constant clear color. + * If it cannot, disable the isl aux usage flag. + */ + float red_clear_color = 0.0f; enum isl_aux_usage surf_usage = image->aux_usage; - if (surf_usage == ISL_AUX_USAGE_HIZ) - surf_usage = ISL_AUX_USAGE_NONE; + if (image->aux_usage == ISL_AUX_USAGE_HIZ) { + if (iview->aspect_mask & VK_IMAGE_ASPECT_DEPTH_BIT && + anv_can_sample_with_hiz(device->info.gen, image->samples)) { + /* When a HiZ buffer is sampled on gen9+, ensure that + * the constant fast clear value is set in the surface state. + */ + if (device->info.gen >= 9) + red_clear_color = ANV_HZ_FC_VAL; + } else { + surf_usage = ISL_AUX_USAGE_NONE; + } + } /* Input attachment surfaces for color are allocated and filled * out at BeginRenderPass time because they need compression information. @@ -560,6 +573,7 @@ anv_CreateImageView(VkDevice _device, iview->sampler_surface_state.map, .surf = &surface->isl, .view = &view, + .clear_color.f32 = { red_clear_color,}, .aux_surf = &image->aux_surface.isl, .aux_usage = surf_usage, .mocs = device->default_mocs);