mesa: Add a helper function for shared code in get_tex_rgba_{un}compressed
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
5e2d25894b
commit
46c8967813
|
@ -265,6 +265,40 @@ get_tex_ycbcr(struct gl_context *ctx, GLuint dimensions,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Depending on the base format involved we may need to apply a rebase
|
||||
* transform (for example: if we download to a Luminance format we want
|
||||
* G=0 and B=0).
|
||||
*/
|
||||
static bool
|
||||
teximage_needs_rebase(mesa_format texFormat, GLenum baseFormat,
|
||||
bool is_compressed, uint8_t *rebaseSwizzle)
|
||||
{
|
||||
bool needsRebase = false;
|
||||
|
||||
if (baseFormat == GL_LUMINANCE ||
|
||||
baseFormat == GL_INTENSITY) {
|
||||
needsRebase = true;
|
||||
rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
|
||||
rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_ONE;
|
||||
} else if (baseFormat == GL_LUMINANCE_ALPHA) {
|
||||
needsRebase = true;
|
||||
rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
|
||||
rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_W;
|
||||
} else if (!is_compressed &&
|
||||
(baseFormat != _mesa_get_format_base_format(texFormat))) {
|
||||
needsRebase =
|
||||
_mesa_compute_rgba2base2rgba_component_mapping(baseFormat,
|
||||
rebaseSwizzle);
|
||||
}
|
||||
|
||||
return needsRebase;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a color texture image with decompression.
|
||||
|
@ -319,26 +353,8 @@ get_tex_rgba_compressed(struct gl_context *ctx, GLuint dimensions,
|
|||
}
|
||||
}
|
||||
|
||||
/* Depending on the base format involved we may need to apply a rebase
|
||||
* transform (for example: if we download to a Luminance format we want
|
||||
* G=0 and B=0).
|
||||
*/
|
||||
if (baseFormat == GL_LUMINANCE ||
|
||||
baseFormat == GL_INTENSITY) {
|
||||
needsRebase = true;
|
||||
rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
|
||||
rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_ONE;
|
||||
} else if (baseFormat == GL_LUMINANCE_ALPHA) {
|
||||
needsRebase = true;
|
||||
rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
|
||||
rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_W;
|
||||
} else {
|
||||
needsRebase = false;
|
||||
}
|
||||
needsRebase = teximage_needs_rebase(texFormat, baseFormat, true,
|
||||
rebaseSwizzle);
|
||||
|
||||
srcStride = 4 * width * sizeof(GLfloat);
|
||||
dstStride = _mesa_image_row_stride(&ctx->Pack, width, format, type);
|
||||
|
@ -423,31 +439,8 @@ get_tex_rgba_uncompressed(struct gl_context *ctx, GLuint dimensions,
|
|||
bool needsRebase;
|
||||
void *rgba = NULL;
|
||||
|
||||
/* Depending on the base format involved we may need to apply a rebase
|
||||
* transform (for example: if we download to a Luminance format we want
|
||||
* G=0 and B=0).
|
||||
*/
|
||||
if (texImage->_BaseFormat == GL_LUMINANCE ||
|
||||
texImage->_BaseFormat == GL_INTENSITY) {
|
||||
needsRebase = true;
|
||||
rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
|
||||
rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_ONE;
|
||||
} else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) {
|
||||
needsRebase = true;
|
||||
rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
|
||||
rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
|
||||
rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_W;
|
||||
} else if (texImage->_BaseFormat !=
|
||||
_mesa_get_format_base_format(texFormat)) {
|
||||
needsRebase =
|
||||
_mesa_compute_rgba2base2rgba_component_mapping(texImage->_BaseFormat,
|
||||
rebaseSwizzle);
|
||||
} else {
|
||||
needsRebase = false;
|
||||
}
|
||||
needsRebase = teximage_needs_rebase(texFormat, texImage->_BaseFormat, false,
|
||||
rebaseSwizzle);
|
||||
|
||||
/* Describe the dst format */
|
||||
dst_is_integer = _mesa_is_enum_format_integer(format);
|
||||
|
|
Loading…
Reference in New Issue