i965/i915: Add colorspace support to YUV sampling
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6122>
This commit is contained in:
@@ -210,6 +210,8 @@ struct brw_sampler_prog_key_data {
|
|||||||
uint32_t xy_uxvx_image_mask;
|
uint32_t xy_uxvx_image_mask;
|
||||||
uint32_t ayuv_image_mask;
|
uint32_t ayuv_image_mask;
|
||||||
uint32_t xyuv_image_mask;
|
uint32_t xyuv_image_mask;
|
||||||
|
uint32_t bt709_mask;
|
||||||
|
uint32_t bt2020_mask;
|
||||||
|
|
||||||
/* Scale factor for each texture. */
|
/* Scale factor for each texture. */
|
||||||
float scale_factors[32];
|
float scale_factors[32];
|
||||||
|
@@ -1073,6 +1073,8 @@ brw_nir_apply_sampler_key(nir_shader *nir,
|
|||||||
tex_options.lower_xy_uxvx_external = key_tex->xy_uxvx_image_mask;
|
tex_options.lower_xy_uxvx_external = key_tex->xy_uxvx_image_mask;
|
||||||
tex_options.lower_ayuv_external = key_tex->ayuv_image_mask;
|
tex_options.lower_ayuv_external = key_tex->ayuv_image_mask;
|
||||||
tex_options.lower_xyuv_external = key_tex->xyuv_image_mask;
|
tex_options.lower_xyuv_external = key_tex->xyuv_image_mask;
|
||||||
|
tex_options.bt709_external = key_tex->bt709_mask;
|
||||||
|
tex_options.bt2020_external = key_tex->bt2020_mask;
|
||||||
|
|
||||||
/* Setup array of scaling factors for each texture. */
|
/* Setup array of scaling factors for each texture. */
|
||||||
memcpy(&tex_options.scale_factors, &key_tex->scale_factors,
|
memcpy(&tex_options.scale_factors, &key_tex->scale_factors,
|
||||||
|
@@ -323,6 +323,17 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (intel_tex->yuv_color_space) {
|
||||||
|
case __DRI_YUV_COLOR_SPACE_ITU_REC709:
|
||||||
|
key->bt709_mask |= 1 << s;
|
||||||
|
break;
|
||||||
|
case __DRI_YUV_COLOR_SPACE_ITU_REC2020:
|
||||||
|
key->bt2020_mask |= 1 << s;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -634,6 +634,7 @@ intel_image_target_texture(struct gl_context *ctx, GLenum target,
|
|||||||
|
|
||||||
struct intel_texture_object *intel_texobj = intel_texture_object(texObj);
|
struct intel_texture_object *intel_texobj = intel_texture_object(texObj);
|
||||||
intel_texobj->planar_format = image->planar_format;
|
intel_texobj->planar_format = image->planar_format;
|
||||||
|
intel_texobj->yuv_color_space = image->yuv_color_space;
|
||||||
|
|
||||||
GLenum internal_format =
|
GLenum internal_format =
|
||||||
image->internal_format != 0 ?
|
image->internal_format != 0 ?
|
||||||
|
@@ -63,6 +63,7 @@ struct intel_texture_object
|
|||||||
mesa_format _Format;
|
mesa_format _Format;
|
||||||
|
|
||||||
const struct intel_image_format *planar_format;
|
const struct intel_image_format *planar_format;
|
||||||
|
unsigned int yuv_color_space;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user