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