Re: [Mesa-dev] [RFC PATCH v1 05/30] anv: Fix get_image_format_properties() - depthstencil (v2)

2017-11-09 Thread Chad Versace
On Tue 07 Nov 2017, Jason Ekstrand wrote:
> I think I'd prefer we not make "Fix" the first word in the title unless it
> fixes an actual bug.  How about "Refactor"?  Same for the ASTC patch.

Sure, I'll s/Fix/Refactor/ in those patches.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [RFC PATCH v1 05/30] anv: Fix get_image_format_properties() - depthstencil (v2)

2017-11-07 Thread Jason Ekstrand
I think I'd prefer we not make "Fix" the first word in the title unless it
fixes an actual bug.  How about "Refactor"?  Same for the ASTC patch.

On Tue, Nov 7, 2017 at 6:47 AM, Chad Versace 
wrote:

> Teach it to calculate the features of depthstencil formats.
>
> 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.
>
> v2: New commit message
>
> Reviewed-by: Jason Ekstrand  (v1)
> ---
>  src/intel/vulkan/anv_formats.c | 47 --
> 
>  1 file changed, 31 insertions(+), 16 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_
> formats.c
> index bd03b248ff9..8c9f5a46d2c 100644
> --- a/src/intel/vulkan/anv_formats.c
> +++ b/src/intel/vulkan/anv_formats.c
> @@ -468,12 +468,35 @@ 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,
> -enum isl_format base, struct anv_format_plane
> format)
> +VkFormat vk_format,
> +enum isl_format base,
> +struct anv_format_plane format,
> +VkImageTiling vk_tiling)
>  {
> +   VkFormatFeatureFlags flags = 0;
> +
> if (format.isl_format == ISL_FORMAT_UNSUPPORTED)
>return 0;
>
> -   VkFormatFeatureFlags flags = 0;
> +   const VkImageAspectFlags aspects = vk_format_aspects(vk_format);
> +
> +   if (aspects & (VK_IMAGE_ASPECT_DEPTH_BIT |
> VK_IMAGE_ASPECT_STENCIL_BIT)) {
> +  if (vk_tiling == VK_IMAGE_TILING_LINEAR)
> + return 0;
> +
> +  flags |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
> +
> +  if (aspects == VK_IMAGE_ASPECT_DEPTH_BIT || devinfo->gen >= 8)
> + flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
> +
> +  flags |= VK_FORMAT_FEATURE_BLIT_SRC_BIT |
> +   VK_FORMAT_FEATURE_BLIT_DST_BIT |
> +   VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
> +   VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
> +
> +  return flags;
> +   }
> +
> if (isl_format_supports_sampling(devinfo, format.isl_format)) {
>flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
> VK_FORMAT_FEATURE_BLIT_SRC_BIT;
> @@ -563,16 +586,6 @@ anv_physical_device_get_format_properties(struct
> anv_physical_device *physical_d
>
> if (format == NULL) {
>/* Nothing to do here */
> -   } else if (vk_format_is_depth_or_stencil(vk_format)) {
> -  tiled |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
> -  if (vk_format_aspects(vk_format) == VK_IMAGE_ASPECT_DEPTH_BIT ||
> -  physical_device->info.gen >= 8)
> - tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
> -
> -  tiled |= VK_FORMAT_FEATURE_BLIT_SRC_BIT |
> -   VK_FORMAT_FEATURE_BLIT_DST_BIT |
> -   VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
> -   VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
> } else {
>struct anv_format_plane linear_fmt, tiled_fmt;
>linear_fmt = anv_get_format_plane(_device->info,
> vk_format,
> @@ -582,10 +595,12 @@ anv_physical_device_get_format_properties(struct
> anv_physical_device *physical_d
> VK_IMAGE_ASPECT_COLOR_BIT,
> VK_IMAGE_TILING_OPTIMAL);
>
> -  linear = get_image_format_properties(_device->info,
> -   linear_fmt.isl_format,
> linear_fmt);
> -  tiled = get_image_format_properties(_device->info,
> -  linear_fmt.isl_format,
> tiled_fmt);
> +  linear = get_image_format_properties(_device->info,
> vk_format,
> +   linear_fmt.isl_format,
> linear_fmt,
> +   VK_IMAGE_TILING_LINEAR);
> +  tiled = get_image_format_properties(_device->info,
> vk_format,
> +  linear_fmt.isl_format,
> tiled_fmt,
> +  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
> --
> 2.13.0
>
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [RFC PATCH v1 05/30] anv: Fix get_image_format_properties() - depthstencil (v2)

2017-11-07 Thread Lionel Landwerlin

Reviewed-by: Lionel Landwerlin 

On 07/11/17 14:47, Chad Versace wrote:

Teach it to calculate the features of depthstencil formats.

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.

v2: New commit message

Reviewed-by: Jason Ekstrand  (v1)
---
  src/intel/vulkan/anv_formats.c | 47 --
  1 file changed, 31 insertions(+), 16 deletions(-)

diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c
index bd03b248ff9..8c9f5a46d2c 100644
--- a/src/intel/vulkan/anv_formats.c
+++ b/src/intel/vulkan/anv_formats.c
@@ -468,12 +468,35 @@ 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,
-enum isl_format base, struct anv_format_plane 
format)
+VkFormat vk_format,
+enum isl_format base,
+struct anv_format_plane format,
+VkImageTiling vk_tiling)
  {
+   VkFormatFeatureFlags flags = 0;
+
 if (format.isl_format == ISL_FORMAT_UNSUPPORTED)
return 0;
  
-   VkFormatFeatureFlags flags = 0;

+   const VkImageAspectFlags aspects = vk_format_aspects(vk_format);
+
+   if (aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
+  if (vk_tiling == VK_IMAGE_TILING_LINEAR)
+ return 0;
+
+  flags |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
+
+  if (aspects == VK_IMAGE_ASPECT_DEPTH_BIT || devinfo->gen >= 8)
+ flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
+
+  flags |= VK_FORMAT_FEATURE_BLIT_SRC_BIT |
+   VK_FORMAT_FEATURE_BLIT_DST_BIT |
+   VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
+   VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
+
+  return flags;
+   }
+
 if (isl_format_supports_sampling(devinfo, format.isl_format)) {
flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
 VK_FORMAT_FEATURE_BLIT_SRC_BIT;
@@ -563,16 +586,6 @@ anv_physical_device_get_format_properties(struct 
anv_physical_device *physical_d
  
 if (format == NULL) {

/* Nothing to do here */
-   } else if (vk_format_is_depth_or_stencil(vk_format)) {
-  tiled |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
-  if (vk_format_aspects(vk_format) == VK_IMAGE_ASPECT_DEPTH_BIT ||
-  physical_device->info.gen >= 8)
- tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
-
-  tiled |= VK_FORMAT_FEATURE_BLIT_SRC_BIT |
-   VK_FORMAT_FEATURE_BLIT_DST_BIT |
-   VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
-   VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
 } else {
struct anv_format_plane linear_fmt, tiled_fmt;
linear_fmt = anv_get_format_plane(_device->info, vk_format,
@@ -582,10 +595,12 @@ anv_physical_device_get_format_properties(struct 
anv_physical_device *physical_d
 VK_IMAGE_ASPECT_COLOR_BIT,
 VK_IMAGE_TILING_OPTIMAL);
  
-  linear = get_image_format_properties(_device->info,

-   linear_fmt.isl_format, linear_fmt);
-  tiled = get_image_format_properties(_device->info,
-  linear_fmt.isl_format, tiled_fmt);
+  linear = get_image_format_properties(_device->info, vk_format,
+   linear_fmt.isl_format, linear_fmt,
+   VK_IMAGE_TILING_LINEAR);
+  tiled = get_image_format_properties(_device->info, vk_format,
+  linear_fmt.isl_format, tiled_fmt,
+  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



___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [RFC PATCH v1 05/30] anv: Fix get_image_format_properties() - depthstencil (v2)

2017-11-07 Thread Chad Versace
Teach it to calculate the features of depthstencil formats.

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.

v2: New commit message

Reviewed-by: Jason Ekstrand  (v1)
---
 src/intel/vulkan/anv_formats.c | 47 --
 1 file changed, 31 insertions(+), 16 deletions(-)

diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c
index bd03b248ff9..8c9f5a46d2c 100644
--- a/src/intel/vulkan/anv_formats.c
+++ b/src/intel/vulkan/anv_formats.c
@@ -468,12 +468,35 @@ 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,
-enum isl_format base, struct anv_format_plane 
format)
+VkFormat vk_format,
+enum isl_format base,
+struct anv_format_plane format,
+VkImageTiling vk_tiling)
 {
+   VkFormatFeatureFlags flags = 0;
+
if (format.isl_format == ISL_FORMAT_UNSUPPORTED)
   return 0;
 
-   VkFormatFeatureFlags flags = 0;
+   const VkImageAspectFlags aspects = vk_format_aspects(vk_format);
+
+   if (aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
+  if (vk_tiling == VK_IMAGE_TILING_LINEAR)
+ return 0;
+
+  flags |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
+
+  if (aspects == VK_IMAGE_ASPECT_DEPTH_BIT || devinfo->gen >= 8)
+ flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
+
+  flags |= VK_FORMAT_FEATURE_BLIT_SRC_BIT |
+   VK_FORMAT_FEATURE_BLIT_DST_BIT |
+   VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
+   VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
+
+  return flags;
+   }
+
if (isl_format_supports_sampling(devinfo, format.isl_format)) {
   flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
VK_FORMAT_FEATURE_BLIT_SRC_BIT;
@@ -563,16 +586,6 @@ anv_physical_device_get_format_properties(struct 
anv_physical_device *physical_d
 
if (format == NULL) {
   /* Nothing to do here */
-   } else if (vk_format_is_depth_or_stencil(vk_format)) {
-  tiled |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
-  if (vk_format_aspects(vk_format) == VK_IMAGE_ASPECT_DEPTH_BIT ||
-  physical_device->info.gen >= 8)
- tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
-
-  tiled |= VK_FORMAT_FEATURE_BLIT_SRC_BIT |
-   VK_FORMAT_FEATURE_BLIT_DST_BIT |
-   VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
-   VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
} else {
   struct anv_format_plane linear_fmt, tiled_fmt;
   linear_fmt = anv_get_format_plane(_device->info, vk_format,
@@ -582,10 +595,12 @@ anv_physical_device_get_format_properties(struct 
anv_physical_device *physical_d
VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_TILING_OPTIMAL);
 
-  linear = get_image_format_properties(_device->info,
-   linear_fmt.isl_format, linear_fmt);
-  tiled = get_image_format_properties(_device->info,
-  linear_fmt.isl_format, tiled_fmt);
+  linear = get_image_format_properties(_device->info, vk_format,
+   linear_fmt.isl_format, linear_fmt,
+   VK_IMAGE_TILING_LINEAR);
+  tiled = get_image_format_properties(_device->info, vk_format,
+  linear_fmt.isl_format, tiled_fmt,
+  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
-- 
2.13.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev