浏览代码

intel: Clean up check_pbo_format to ignore internalFormat.

All that matters here is the format of the texture, not the
internalformat (which might mean various different pixel formats).  In
one case, the pbo upload for MESA_FORMAT_YCBCR would have swapped the
channels for MESA_FORMAT_YCBCR_REV.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
tags/mesa-8.0-rc1
Eric Anholt 14 年前
父节点
当前提交
3bb536e4c7
共有 1 个文件被更改,包括 13 次插入25 次删除
  1. 13
    25
      src/mesa/drivers/dri/intel/intel_tex_image.c

+ 13
- 25
src/mesa/drivers/dri/intel/intel_tex_image.c 查看文件

@@ -123,33 +123,22 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
/* There are actually quite a few combinations this will work for,
* more than what I've listed here.
*/
static GLboolean
check_pbo_format(GLint internalFormat,
GLenum format, GLenum type,
static bool
check_pbo_format(GLenum format, GLenum type,
gl_format mesa_format)
{
switch (internalFormat) {
case 4:
case GL_RGBA:
case GL_RGBA8:
return (format == GL_BGRA &&
(type == GL_UNSIGNED_BYTE ||
type == GL_UNSIGNED_INT_8_8_8_8_REV) &&
mesa_format == MESA_FORMAT_ARGB8888);
case 3:
case GL_RGB:
return (format == GL_RGB &&
type == GL_UNSIGNED_SHORT_5_6_5 &&
mesa_format == MESA_FORMAT_RGB565);
case 1:
case GL_LUMINANCE:
return (format == GL_LUMINANCE &&
type == GL_UNSIGNED_BYTE &&
mesa_format == MESA_FORMAT_L8);
case GL_YCBCR_MESA:
switch (mesa_format) {
case MESA_FORMAT_ARGB8888:
return (format == GL_BGRA && (type == GL_UNSIGNED_BYTE ||
type == GL_UNSIGNED_INT_8_8_8_8_REV));
case MESA_FORMAT_RGB565:
return (format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5);
case MESA_FORMAT_L8:
return (format == GL_LUMINANCE && type == GL_UNSIGNED_BYTE);
case MESA_FORMAT_YCBCR:
return (type == GL_UNSIGNED_SHORT_8_8_MESA || type == GL_UNSIGNED_BYTE);
default:
return GL_FALSE;
return false;
}
}

@@ -184,8 +173,7 @@ try_pbo_upload(struct intel_context *intel,
return false;
}

if (!check_pbo_format(intelImage->base.Base.InternalFormat, format,
type, intelImage->base.Base.TexFormat)) {
if (!check_pbo_format(format, type, intelImage->base.Base.TexFormat)) {
DBG("%s: format mismatch (upload to %s with format 0x%x, type 0x%x)\n",
__FUNCTION__, _mesa_get_format_name(intelImage->base.Base.TexFormat),
format, type);

正在加载...
取消
保存