Mesa (main): mesa/st: break up st_choose_matching_format()

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jul 28 17:31:53 UTC 2021


Module: Mesa
Branch: main
Commit: daf2a039f55bf51a7c6ad3372b25e234de371b08
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=daf2a039f55bf51a7c6ad3372b25e234de371b08

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Thu Apr 22 16:00:58 2021 -0400

mesa/st: break up st_choose_matching_format()

having a function that just returns the equivalent format is handy

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11982>

---

 src/mesa/state_tracker/st_format.c | 37 ++++++++++++++++++++++++++-----------
 src/mesa/state_tracker/st_format.h |  4 ++++
 2 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index b1d31cc9a20..0698f797c13 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -1230,26 +1230,41 @@ st_choose_renderbuffer_format(struct st_context *st,
  * return the format which exactly matches those parameters, so that
  * a memcpy-based transfer can be done.
  *
- * If no format is supported, return PIPE_FORMAT_NONE.
+ * If no match format exists, return PIPE_FORMAT_NONE.
  */
 enum pipe_format
-st_choose_matching_format(struct st_context *st, unsigned bind,
-                          GLenum format, GLenum type, GLboolean swapBytes)
+st_choose_matching_format_noverify(struct st_context *st,
+                                   GLenum format, GLenum type, GLboolean swapBytes)
 {
-   struct pipe_screen *screen = st->screen;
-
    if (swapBytes && !_mesa_swap_bytes_in_type_enum(&type))
       return PIPE_FORMAT_NONE;
 
    mesa_format mesa_format = _mesa_format_from_format_and_type(format, type);
    if (_mesa_format_is_mesa_array_format(mesa_format))
       mesa_format = _mesa_format_from_array_format(mesa_format);
-   if (mesa_format != MESA_FORMAT_NONE) {
-      enum pipe_format format = st_mesa_format_to_pipe_format(st, mesa_format);
-      if (format != PIPE_FORMAT_NONE &&
-          screen->is_format_supported(screen, format, PIPE_TEXTURE_2D, 0, 0, bind))
-         return format;
-   }
+   if (mesa_format != MESA_FORMAT_NONE)
+      return st_mesa_format_to_pipe_format(st, mesa_format);
+
+   return PIPE_FORMAT_NONE;
+}
+
+
+/**
+ * Given an OpenGL user-requested format and type, and swapBytes state,
+ * return the format which exactly matches those parameters, so that
+ * a memcpy-based transfer can be done.
+ *
+ * If no format is supported, return PIPE_FORMAT_NONE.
+ */
+enum pipe_format
+st_choose_matching_format(struct st_context *st, unsigned bind,
+                          GLenum format, GLenum type, GLboolean swapBytes)
+{
+   struct pipe_screen *screen = st->screen;
+   enum pipe_format pformat = st_choose_matching_format_noverify(st, format, type, swapBytes);
+   if (pformat != PIPE_FORMAT_NONE &&
+       screen->is_format_supported(screen, pformat, PIPE_TEXTURE_2D, 0, 0, bind))
+      return pformat;
 
    return PIPE_FORMAT_NONE;
 }
diff --git a/src/mesa/state_tracker/st_format.h b/src/mesa/state_tracker/st_format.h
index cdb8c69f5ca..e7228520b37 100644
--- a/src/mesa/state_tracker/st_format.h
+++ b/src/mesa/state_tracker/st_format.h
@@ -62,6 +62,10 @@ st_choose_renderbuffer_format(struct st_context *st,
                               GLenum internalFormat, unsigned sample_count,
                               unsigned storage_sample_count);
 
+extern enum pipe_format
+st_choose_matching_format_noverify(struct st_context *st,
+                                   GLenum format, GLenum type, GLboolean swapBytes);
+
 extern enum pipe_format
 st_choose_matching_format(struct st_context *st, unsigned bind,
 			  GLenum format, GLenum type, GLboolean swapBytes);



More information about the mesa-commit mailing list