mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 22:30:11 +01:00
anv: Allocate hiz surface
Nanley Chery: (rebase) - Use isl_surf_get_hiz_surf() (amend) - Only add a HiZ surface onto a depth/stencil attachment - Add comment above HiZ surface addition - Hide HiZ behind INTEL_VK_HIZ prior to BDW - Disable HiZ for untested cases - Remove DISABLE_AUX_BIT instead of preventing it from being added Signed-off-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Chad Versace <chadversary@chromium.org>
This commit is contained in:
parent
3aec432ed3
commit
917814dccd
1 changed files with 34 additions and 3 deletions
|
|
@ -28,6 +28,7 @@
|
|||
#include <fcntl.h>
|
||||
|
||||
#include "anv_private.h"
|
||||
#include "util/debug.h"
|
||||
|
||||
#include "vk_format_info.h"
|
||||
|
||||
|
|
@ -60,6 +61,7 @@ choose_isl_surf_usage(VkImageUsageFlags vk_usage,
|
|||
default:
|
||||
unreachable("bad VkImageAspect");
|
||||
case VK_IMAGE_ASPECT_DEPTH_BIT:
|
||||
isl_usage &= ~ISL_SURF_USAGE_DISABLE_AUX_BIT;
|
||||
isl_usage |= ISL_SURF_USAGE_DEPTH_BIT;
|
||||
break;
|
||||
case VK_IMAGE_ASPECT_STENCIL_BIT:
|
||||
|
|
@ -99,6 +101,16 @@ get_surface(struct anv_image *image, VkImageAspectFlags aspect)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
add_surface(struct anv_image *image, struct anv_surface *surf)
|
||||
{
|
||||
assert(surf->isl.size > 0); /* isl surface must be initialized */
|
||||
|
||||
surf->offset = align_u32(image->size, surf->isl.alignment);
|
||||
image->size = surf->offset + surf->isl.size;
|
||||
image->alignment = MAX(image->alignment, surf->isl.alignment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the anv_image::*_surface selected by \a aspect. Then update the
|
||||
* image's memory requirements (that is, the image's size and alignment).
|
||||
|
|
@ -160,9 +172,28 @@ make_surface(const struct anv_device *dev,
|
|||
*/
|
||||
assert(ok);
|
||||
|
||||
anv_surf->offset = align_u32(image->size, anv_surf->isl.alignment);
|
||||
image->size = anv_surf->offset + anv_surf->isl.size;
|
||||
image->alignment = MAX(image->alignment, anv_surf->isl.alignment);
|
||||
add_surface(image, anv_surf);
|
||||
|
||||
/* Add a HiZ surface to a depth buffer that will be used for rendering.
|
||||
*/
|
||||
if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT &&
|
||||
(image->usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) {
|
||||
|
||||
/* Allow the user to control HiZ enabling. Disable by default on gen7
|
||||
* because resolves are not currently implemented pre-BDW.
|
||||
*/
|
||||
if (!env_var_as_boolean("INTEL_VK_HIZ", dev->info.gen >= 8)) {
|
||||
anv_finishme("Implement gen7 HiZ");
|
||||
} else if (vk_info->mipLevels > 1) {
|
||||
anv_finishme("Test multi-LOD HiZ");
|
||||
} else if (dev->info.gen == 8 && vk_info->samples > 1) {
|
||||
anv_finishme("Test gen8 multisampled HiZ");
|
||||
} else {
|
||||
isl_surf_get_hiz_surf(&dev->isl_dev, &image->depth_surface.isl,
|
||||
&image->hiz_surface.isl);
|
||||
add_surface(image, &image->hiz_surface);
|
||||
}
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue