summaryrefslogtreecommitdiffstats
path: root/src/intel/vulkan
diff options
context:
space:
mode:
authorChad Versace <[email protected]>2017-11-03 12:20:21 -0700
committerChad Versace <[email protected]>2017-11-09 16:01:59 -0800
commit6394e4a38077783f189f99322dbc1f5f2006f878 (patch)
treeb2833cbd8033fbcc57a2f282b5d37101fd2b405e /src/intel/vulkan
parent66647074a455754393c6ad6be09acc03b1761a00 (diff)
anv: Refactor get_image_format_properties() - Reduce params
Replace parameters 'enum isl_format' and 'struct anv_format_plane' with new parameter 'const struct anv_format *'. The goal is to incrementally fix get_image_format_properties() to return a correct result. Currently, it returns incorrect VkFormatFeatureFlags which the caller must clean up. Reviewed-by: Lionel Landwerlin <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/intel/vulkan')
-rw-r--r--src/intel/vulkan/anv_formats.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c
index 3cc0673cbaf..151c1c9e066 100644
--- a/src/intel/vulkan/anv_formats.c
+++ b/src/intel/vulkan/anv_formats.c
@@ -469,13 +469,12 @@ anv_get_format_plane(const struct gen_device_info *devinfo, VkFormat vk_format,
static VkFormatFeatureFlags
get_image_format_properties(const struct gen_device_info *devinfo,
VkFormat vk_format,
- enum isl_format base_isl_format,
- struct anv_format_plane plane_format,
+ const struct anv_format *anv_format,
VkImageTiling vk_tiling)
{
VkFormatFeatureFlags flags = 0;
- if (plane_format.isl_format == ISL_FORMAT_UNSUPPORTED)
+ if (anv_format == NULL)
return 0;
const VkImageAspectFlags aspects = vk_format_aspects(vk_format);
@@ -497,6 +496,22 @@ get_image_format_properties(const struct gen_device_info *devinfo,
return flags;
}
+ const struct anv_format_plane plane_format =
+ anv_get_format_plane(devinfo, vk_format, VK_IMAGE_ASPECT_COLOR_BIT,
+ vk_tiling);
+
+ if (plane_format.isl_format == ISL_FORMAT_UNSUPPORTED)
+ return 0;
+
+ struct anv_format_plane base_plane_format = plane_format;
+ if (vk_tiling == VK_IMAGE_TILING_OPTIMAL) {
+ base_plane_format = anv_get_format_plane(devinfo, vk_format,
+ VK_IMAGE_ASPECT_COLOR_BIT,
+ VK_IMAGE_TILING_LINEAR);
+ }
+
+ enum isl_format base_isl_format = base_plane_format.isl_format;
+
/* ASTC textures must be in Y-tiled memory */
if (vk_tiling == VK_IMAGE_TILING_LINEAR &&
isl_format_get_layout(plane_format.isl_format)->txc == ISL_TXC_ASTC)
@@ -593,20 +608,15 @@ anv_physical_device_get_format_properties(struct anv_physical_device *physical_d
if (format == NULL) {
/* Nothing to do here */
} else {
- struct anv_format_plane linear_fmt, tiled_fmt;
+ struct anv_format_plane linear_fmt;
linear_fmt = anv_get_format_plane(&physical_device->info, vk_format,
VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_TILING_LINEAR);
- tiled_fmt = anv_get_format_plane(&physical_device->info, vk_format,
- VK_IMAGE_ASPECT_COLOR_BIT,
- VK_IMAGE_TILING_OPTIMAL);
linear = get_image_format_properties(&physical_device->info, vk_format,
- linear_fmt.isl_format, linear_fmt,
- VK_IMAGE_TILING_LINEAR);
+ format, VK_IMAGE_TILING_LINEAR);
tiled = get_image_format_properties(&physical_device->info, vk_format,
- linear_fmt.isl_format, tiled_fmt,
- VK_IMAGE_TILING_OPTIMAL);
+ format, VK_IMAGE_TILING_OPTIMAL);
/* XXX: We handle 3-channel formats by switching them out for RGBX or
* RGBA formats behind-the-scenes. This works fine for textures