diff options
author | Jordan Justen <[email protected]> | 2012-06-21 09:40:47 -0700 |
---|---|---|
committer | Jordan Justen <[email protected]> | 2012-07-22 00:10:27 -0700 |
commit | 4e0ece34ed3fc8dacb209a3fb1e9bc8ec129a30a (patch) | |
tree | 94dfa7f2b090787e1d8beab86232b4509ee21546 | |
parent | 8bccaa61d76c912bee679241f65a0c493c2c9f24 (diff) |
meta: allow CopyTexSubImage on integer formats
Signed-off-by: Jordan Justen <[email protected]>
-rw-r--r-- | src/mesa/drivers/common/meta.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index cf2d05337c8..d1fd268396b 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -72,6 +72,8 @@ #include "program/program.h" #include "swrast/swrast.h" #include "drivers/common/meta.h" +#include "main/enums.h" +#include "main/glformats.h" /** Return offset in bytes of the field within a vertex struct */ @@ -3158,8 +3160,12 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target, * ReadPixels() and passed to Tex[Sub]Image(). */ static GLenum -get_temp_image_type(struct gl_context *ctx, GLenum baseFormat) +get_temp_image_type(struct gl_context *ctx, gl_format format) { + GLenum baseFormat, type; + + baseFormat = _mesa_get_format_base_format(format); + switch (baseFormat) { case GL_RGBA: case GL_RGB: @@ -3174,7 +3180,7 @@ get_temp_image_type(struct gl_context *ctx, GLenum baseFormat) else if (ctx->DrawBuffer->Visual.redBits <= 16) return GL_UNSIGNED_SHORT; else - return GL_FLOAT; + return _mesa_get_format_datatype(format); case GL_DEPTH_COMPONENT: return GL_UNSIGNED_INT; case GL_DEPTH_STENCIL: @@ -3216,12 +3222,10 @@ _mesa_meta_CopyTexSubImage(struct gl_context *ctx, GLuint dims, format = GL_RGBA; } + type = get_temp_image_type(ctx, texImage->TexFormat); if (_mesa_is_format_integer_color(texImage->TexFormat)) { - _mesa_problem(ctx, "unsupported integer color copyteximage"); - return; + format = _mesa_base_format_to_integer_format(format); } - - type = get_temp_image_type(ctx, format); bpp = _mesa_bytes_per_pixel(format, type); if (bpp <= 0) { _mesa_problem(ctx, "Bad bpp in _mesa_meta_CopyTexSubImage()"); |