diff options
author | Marek Olšák <maraeo@gmail.com> | 2013-02-12 22:09:24 +0100 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2013-02-14 14:51:46 +0100 |
commit | 5d3b8ad24bf1f8ff7682a1489630d234b7c31b6a (patch) | |
tree | ef248c04f25ef6ccb07088164768d0a9244f8630 /src/mesa/state_tracker/st_format.c | |
parent | 2b9659c9e627ad03160899b8be04f96307d098eb (diff) | |
download | external_mesa3d-5d3b8ad24bf1f8ff7682a1489630d234b7c31b6a.zip external_mesa3d-5d3b8ad24bf1f8ff7682a1489630d234b7c31b6a.tar.gz external_mesa3d-5d3b8ad24bf1f8ff7682a1489630d234b7c31b6a.tar.bz2 |
st/mesa: try to find exact format matching user format and type for DrawPixels
Reviewed-by: Brian Paul <brianp@vmware.com>
Diffstat (limited to 'src/mesa/state_tracker/st_format.c')
-rw-r--r-- | src/mesa/state_tracker/st_format.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 02969b9..5fd44e7 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -1675,6 +1675,41 @@ st_choose_renderbuffer_format(struct st_context *st, /** + * 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 pipe_screen *screen, unsigned bind, + GLenum format, GLenum type, GLboolean swapBytes) +{ + gl_format mesa_format; + + for (mesa_format = 1; mesa_format < MESA_FORMAT_COUNT; mesa_format++) { + if (_mesa_get_format_color_encoding(mesa_format) == GL_SRGB) { + continue; + } + + if (_mesa_format_matches_format_and_type(mesa_format, format, type, + swapBytes)) { + enum pipe_format format = st_mesa_format_to_pipe_format(mesa_format); + + if (format && + screen->is_format_supported(screen, format, PIPE_TEXTURE_2D, 0, + bind)) { + return format; + } + /* It's unlikely to find 2 matching Mesa formats. */ + break; + } + } + return PIPE_FORMAT_NONE; +} + + +/** * Called via ctx->Driver.ChooseTextureFormat(). */ gl_format |