Browse Source

anv/image: Simplify setup of HiZ sampler surface state

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
tags/17.1-branchpoint
Nanley Chery 9 years ago
parent
commit
f3621f4e71
1 changed files with 12 additions and 18 deletions
  1. 12
    18
      src/intel/vulkan/anv_image.c

+ 12
- 18
src/intel/vulkan/anv_image.c View File

@@ -682,24 +682,6 @@ anv_CreateImageView(VkDevice _device,
iview->isl.usage = 0;
}

/* 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 (image->aux_usage == ISL_AUX_USAGE_HIZ) {
if (anv_can_sample_with_hiz(&device->info, iview->aspect_mask,
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.
* Compression is not yet enabled for depth textures and stencil doesn't
@@ -711,6 +693,18 @@ anv_CreateImageView(VkDevice _device,
!(iview->aspect_mask & VK_IMAGE_ASPECT_COLOR_BIT))) {
iview->sampler_surface_state = alloc_surface_state(device);

/* Select the optimal aux_usage for sampling. */
const enum isl_aux_usage surf_usage =
anv_layout_to_aux_usage(&device->info, image, iview->aspect_mask,
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);

/* If this is a HiZ buffer we can sample from with a programmable clear
* value (SKL+), define the clear value to the optimal constant.
*/
const float red_clear_color = surf_usage == ISL_AUX_USAGE_HIZ &&
device->info.gen >= 9 ?
ANV_HZ_FC_VAL : 0.0f;

struct isl_view view = iview->isl;
view.usage |= ISL_SURF_USAGE_TEXTURE_BIT;
isl_surf_fill_state(&device->isl_dev,

Loading…
Cancel
Save