[Mesa-dev] [PATCH v3 7/8] meta: allow CopyTexSubImage on integer formats

Brian Paul brianp at vmware.com
Thu Aug 9 07:50:59 PDT 2012


On 07/23/2012 10:59 AM, Jordan Justen wrote:
> Signed-off-by: Jordan Justen<jordan.l.justen at intel.com>
> ---
>   src/mesa/drivers/common/meta.c |   16 ++++++++++------
>   1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index cf2d053..d1fd268 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()");

Reviewed-by: Brian Paul <brianp at vmware.com>


More information about the mesa-dev mailing list