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>tags/17.2-branchpoint
@@ -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 | |||
* 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) | |||
return; | |||
@@ -1040,12 +1040,32 @@ miptree_create_for_planar_image(struct brw_context *brw, | |||
struct intel_mipmap_tree * | |||
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); | |||
} | |||
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]) { | |||
/* 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 * | |||
intel_miptree_create_for_dri_image(struct brw_context *brw, | |||
__DRIimage *image, | |||
GLenum target); | |||
GLenum target, | |||
enum isl_colorspace colorspace); | |||
bool | |||
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; | |||
} | |||
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) | |||
return; | |||