diff options
author | Nanley Chery <[email protected]> | 2017-01-11 15:12:35 -0800 |
---|---|---|
committer | Nanley Chery <[email protected]> | 2017-01-12 20:52:20 -0800 |
commit | 2852efcda40274acf3272611c6a3b7731523a72d (patch) | |
tree | 2d1d5e95c9746e9b09b4caf6302ed6a1d54edec7 | |
parent | b62d8ad2aee2f67fb290332b285a0a5aa93e7724 (diff) |
anv: Disable HiZ for input attachments
v2 (Jason Ekstrand):
- Add spec citation
- Drop conditional
Signed-off-by: Nanley Chery <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r-- | src/intel/vulkan/anv_image.c | 23 | ||||
-rw-r--r-- | src/intel/vulkan/genX_cmd_buffer.c | 17 |
2 files changed, 24 insertions, 16 deletions
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index d8216291914..e21374b1abc 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -182,6 +182,20 @@ make_surface(const struct anv_device *dev, */ if (!(image->usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) { /* It will never be used as an attachment, HiZ is pointless. */ + } else if (image->usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) { + /* From the 1.0.37 spec: + * + * "An attachment used as an input attachment and depth/stencil + * attachment must be in either VK_IMAGE_LAYOUT_GENERAL or + * VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL." + * + * It will never have a layout of + * VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, so HiZ is + * currently pointless. If transfer operations learn to use the HiZ + * buffer, we can enable HiZ for VK_IMAGE_LAYOUT_GENERAL and support + * input attachments. + */ + anv_finishme("Implement HiZ for input attachments"); } else if (!env_var_as_boolean("INTEL_VK_HIZ", dev->info.gen >= 8)) { anv_finishme("Implement gen7 HiZ"); } else if (vk_info->mipLevels > 1) { @@ -529,14 +543,15 @@ anv_CreateImageView(VkDevice _device, if (surf_usage == ISL_AUX_USAGE_HIZ) surf_usage = ISL_AUX_USAGE_NONE; - /* Input attachment surfaces for color or depth are allocated and filled + /* Input attachment surfaces for color are allocated and filled * out at BeginRenderPass time because they need compression information. - * Stencil image do not support compression so we just use the texture - * surface from the image view. + * Compression is not yet enabled for depth textures and stencil doesn't + * allow compression so we can just use the texture surface state from the + * view. */ if (image->usage & VK_IMAGE_USAGE_SAMPLED_BIT || (image->usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT && - (iview->aspect_mask & VK_IMAGE_ASPECT_STENCIL_BIT))) { + !(iview->aspect_mask & VK_IMAGE_ASPECT_COLOR_BIT))) { iview->sampler_surface_state = alloc_surface_state(device); struct isl_view view = iview->isl; diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index baa932e5171..05f29ee57cc 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -303,11 +303,11 @@ need_input_attachment_state(const struct anv_render_pass_attachment *att) if (!(att->usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) return false; - /* We only allocate input attachment states for color and depth surfaces. - * Stencil doesn't allow compression so we can just use the texture surface - * state from the view + /* We only allocate input attachment states for color surfaces. Compression + * is not yet enabled for depth textures and stencil doesn't allow + * compression so we can just use the texture surface state from the view. */ - return vk_format_is_color(att->format) || vk_format_has_depth(att->format); + return vk_format_is_color(att->format); } static enum isl_aux_usage @@ -515,18 +515,11 @@ genX(cmd_buffer_setup_attachments)(struct anv_cmd_buffer *cmd_buffer, } if (need_input_attachment_state(&pass->attachments[i])) { - const struct isl_surf *surf; - if (att_aspects == VK_IMAGE_ASPECT_COLOR_BIT) { - surf = &iview->image->color_surface.isl; - } else { - surf = &iview->image->depth_surface.isl; - } - struct isl_view view = iview->isl; view.usage |= ISL_SURF_USAGE_TEXTURE_BIT; isl_surf_fill_state(isl_dev, state->attachments[i].input_att_state.map, - .surf = surf, + .surf = &iview->image->color_surface.isl, .view = &view, .aux_surf = &iview->image->aux_surface.isl, .aux_usage = state->attachments[i].input_aux_usage, |