/* Grab the input color */
nir_ssa_def *c_nir = nir_ssa_for_src(&b, intr->src[1], 4);
+ /* Apply sRGB transform */
+
+ if (format_desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) {
+ nir_ssa_def *rgb = nir_channels(&b, c_nir, 0x7);
+ nir_ssa_def *trans = nir_format_linear_to_srgb(&b, rgb);
+
+ nir_ssa_def *comp[4] = {
+ nir_channel(&b, trans, 0),
+ nir_channel(&b, trans, 1),
+ nir_channel(&b, trans, 2),
+ nir_channel(&b, c_nir, 3),
+ };
+
+ c_nir = nir_vec(&b, comp, 4);
+ }
+
/* Format convert */
nir_ssa_def *converted = nir_shader_to_native(&b, c_nir, format_desc, bits, homogenous_bits);
SET_BIT(rts[i].flags, MALI_BLEND_SRGB, is_srgb);
SET_BIT(rts[i].flags, MALI_BLEND_NO_DITHER, !ctx->blend->base.dither);
- /* TODO: sRGB in blend shaders is currently
- * unimplemented. Contact me (Alyssa) if you're
- * interested in working on this. We have
- * native Midgard ops for helping here, but
- * they're not well-understood yet. */
-
- assert(!(is_srgb && blend[i].is_shader));
-
if (blend[i].is_shader) {
rts[i].blend.shader = blend[i].shader.gpu | blend[i].shader.first_tag;
} else {