summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanley Chery <nanley.g.chery@intel.com>2017-01-11 08:12:48 -0800
committerNanley Chery <nanley.g.chery@intel.com>2017-01-12 20:52:21 -0800
commit71334f494acea9ef0372fd4b3cd6557765669421 (patch)
tree284e23f64fb219445559e5d82d9429740b06912b
parent5e0902cd2abf21df955be359e0903fc5b66905f5 (diff)
anv: Enable sampling from HiZ
v2: Restrict ISL_AUX_USAGE_HIZ to depth aspects Signed-off-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
-rw-r--r--src/intel/vulkan/TODO1
-rw-r--r--src/intel/vulkan/anv_image.c20
2 files changed, 17 insertions, 4 deletions
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);