i965/miptree: Add a colorspace parameter to create_for_dri_image
The __DRI_FORMAT enums are all UNORM but we will frequently want sRGB when creating miptrees for renderbuffers. This lets us specify. Reviewed-by: Chad Versace <chadversary@chromium.org>
This commit is contained in:
@@ -362,7 +362,8 @@ intel_image_target_renderbuffer_storage(struct gl_context *ctx,
|
|||||||
* buffer's content to the main buffer nor for invalidating the aux buffer's
|
* buffer's content to the main buffer nor for invalidating the aux buffer's
|
||||||
* content.
|
* content.
|
||||||
*/
|
*/
|
||||||
irb->mt = intel_miptree_create_for_dri_image(brw, image, GL_TEXTURE_2D);
|
irb->mt = intel_miptree_create_for_dri_image(brw, image, GL_TEXTURE_2D,
|
||||||
|
ISL_COLORSPACE_NONE);
|
||||||
if (!irb->mt)
|
if (!irb->mt)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@@ -1040,12 +1040,32 @@ miptree_create_for_planar_image(struct brw_context *brw,
|
|||||||
|
|
||||||
struct intel_mipmap_tree *
|
struct intel_mipmap_tree *
|
||||||
intel_miptree_create_for_dri_image(struct brw_context *brw,
|
intel_miptree_create_for_dri_image(struct brw_context *brw,
|
||||||
__DRIimage *image, GLenum target)
|
__DRIimage *image, GLenum target,
|
||||||
|
enum isl_colorspace colorspace)
|
||||||
{
|
{
|
||||||
if (image->planar_format && image->planar_format->nplanes > 0)
|
if (image->planar_format && image->planar_format->nplanes > 0) {
|
||||||
|
assert(colorspace == ISL_COLORSPACE_NONE ||
|
||||||
|
colorspace == ISL_COLORSPACE_YUV);
|
||||||
return miptree_create_for_planar_image(brw, image, target);
|
return miptree_create_for_planar_image(brw, image, target);
|
||||||
|
}
|
||||||
|
|
||||||
mesa_format format = image->format;
|
mesa_format format = image->format;
|
||||||
|
switch (colorspace) {
|
||||||
|
case ISL_COLORSPACE_NONE:
|
||||||
|
/* Keep the image format unmodified */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ISL_COLORSPACE_LINEAR:
|
||||||
|
format =_mesa_get_srgb_format_linear(format);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ISL_COLORSPACE_SRGB:
|
||||||
|
format =_mesa_get_linear_format_srgb(format);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
unreachable("Inalid colorspace for non-planar image");
|
||||||
|
}
|
||||||
|
|
||||||
if (!brw->ctx.TextureFormatSupported[format]) {
|
if (!brw->ctx.TextureFormatSupported[format]) {
|
||||||
/* The texture storage paths in core Mesa detect if the driver does not
|
/* The texture storage paths in core Mesa detect if the driver does not
|
||||||
|
@@ -689,7 +689,8 @@ intel_miptree_create_for_bo(struct brw_context *brw,
|
|||||||
struct intel_mipmap_tree *
|
struct intel_mipmap_tree *
|
||||||
intel_miptree_create_for_dri_image(struct brw_context *brw,
|
intel_miptree_create_for_dri_image(struct brw_context *brw,
|
||||||
__DRIimage *image,
|
__DRIimage *image,
|
||||||
GLenum target);
|
GLenum target,
|
||||||
|
enum isl_colorspace colorspace);
|
||||||
|
|
||||||
bool
|
bool
|
||||||
intel_update_winsys_renderbuffer_miptree(struct brw_context *intel,
|
intel_update_winsys_renderbuffer_miptree(struct brw_context *intel,
|
||||||
|
@@ -356,7 +356,8 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mt = intel_miptree_create_for_dri_image(brw, image, target);
|
mt = intel_miptree_create_for_dri_image(brw, image, target,
|
||||||
|
ISL_COLORSPACE_NONE);
|
||||||
if (mt == NULL)
|
if (mt == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user