gallium: test if PIPE_FORMAT_YCBCR[_REV] is supported and enable GL_MESA_ycbcr_texture

Update texture format selection code too.
This commit is contained in:
Brian
2008-04-03 16:37:30 -06:00
parent 766f3a545e
commit 1307eebfa0
2 changed files with 22 additions and 8 deletions

View File

@@ -220,4 +220,9 @@ void st_init_extensions(struct st_context *st)
ctx->Extensions.EXT_texture_compression_s3tc = GL_TRUE; ctx->Extensions.EXT_texture_compression_s3tc = GL_TRUE;
} }
if (screen->is_format_supported(screen, PIPE_FORMAT_YCBCR, PIPE_TEXTURE) ||
screen->is_format_supported(screen, PIPE_FORMAT_YCBCR_REV, PIPE_TEXTURE)) {
ctx->Extensions.MESA_ycbcr_texture = GL_TRUE;
}
} }

View File

@@ -189,15 +189,14 @@ st_get_format_info(enum pipe_format format, struct pipe_format_info *pinfo)
pinfo->base_format = GL_RGBA; pinfo->base_format = GL_RGBA;
} }
} }
else if (pf_layout(format) == PIPE_FORMAT_LAYOUT_YCBCR) {
pinfo->base_format = GL_YCBCR_MESA;
pinfo->datatype = GL_UNSIGNED_SHORT;
pinfo->size = 2; /* two bytes per "texel" */
}
else { else {
pipe_format_ycbcr_t info; /* compressed format? */
assert(0);
assert( pf_layout(format) == PIPE_FORMAT_LAYOUT_YCBCR );
info = format;
/* TODO */
assert( 0 );
} }
#if 0 #if 0
@@ -275,6 +274,8 @@ st_mesa_format_to_pipe_format(GLuint mesaFormat)
return PIPE_FORMAT_Z32_UNORM; return PIPE_FORMAT_Z32_UNORM;
case MESA_FORMAT_Z24_S8: case MESA_FORMAT_Z24_S8:
return PIPE_FORMAT_Z24S8_UNORM; return PIPE_FORMAT_Z24S8_UNORM;
case MESA_FORMAT_YCBCR:
return PIPE_FORMAT_YCBCR;
default: default:
assert(0); assert(0);
return 0; return 0;
@@ -435,6 +436,14 @@ choose_format(struct pipe_context *pipe, GLint internalFormat, uint surfType)
return default_rgba_format( screen, surfType ); return default_rgba_format( screen, surfType );
case GL_YCBCR_MESA: case GL_YCBCR_MESA:
if (screen->is_format_supported(screen, PIPE_FORMAT_YCBCR,
PIPE_TEXTURE)) {
return PIPE_FORMAT_YCBCR;
}
if (screen->is_format_supported(screen, PIPE_FORMAT_YCBCR_REV,
PIPE_TEXTURE)) {
return PIPE_FORMAT_YCBCR_REV;
}
return PIPE_FORMAT_NONE; return PIPE_FORMAT_NONE;
case GL_RGB_S3TC: case GL_RGB_S3TC: