diff options
author | Jason Ekstrand <[email protected]> | 2016-10-24 22:03:45 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-11-17 12:03:24 -0800 |
commit | 338cdc172a28266b062794084efb7745f07b02a7 (patch) | |
tree | bfa99b1cc81d0eeae6705d7defead931fd20b5c7 /src/intel/vulkan/anv_image.c | |
parent | e2f5880839eea19c173f1a4f1697b63eb2a353aa (diff) |
anv: Add initial support for Sky Lake color compression
This commit adds basic support for color compression. For the moment,
color compression is only enabled within a render pass and a full resolve
is done before the render pass finishes. All texturing operations still
happen with CCS disabled.
Diffstat (limited to 'src/intel/vulkan/anv_image.c')
-rw-r--r-- | src/intel/vulkan/anv_image.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index b9bf6b81799..1fd0434d756 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -176,23 +176,32 @@ make_surface(const struct anv_device *dev, /* 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)) { - + if (aspect == VK_IMAGE_ASPECT_DEPTH_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)) { + if (!(image->usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) { + /* It will never be used as an attachment, HiZ is pointless. */ + } else 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 { + assert(image->aux_surface.isl.size == 0); isl_surf_get_hiz_surf(&dev->isl_dev, &image->depth_surface.isl, &image->aux_surface.isl); add_surface(image, &image->aux_surface); } + } else if (aspect == VK_IMAGE_ASPECT_COLOR_BIT && vk_info->samples == 1) { + if (dev->info.gen >= 9 && !unlikely(INTEL_DEBUG & DEBUG_NO_RBC)) { + assert(image->aux_surface.isl.size == 0); + ok = isl_surf_get_ccs_surf(&dev->isl_dev, &anv_surf->isl, + &image->aux_surface.isl); + if (ok) + add_surface(image, &image->aux_surface); + } } return VK_SUCCESS; |