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:
Jason Ekstrand
2017-06-16 11:35:32 -07:00
parent 14ce44a7bc
commit 2dd4e2348f
4 changed files with 28 additions and 5 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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,

View File

@@ -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;