diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/panfrost/nir/nir_lower_framebuffer.c | 16 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.c | 8 |
2 files changed, 16 insertions, 8 deletions
diff --git a/src/gallium/drivers/panfrost/nir/nir_lower_framebuffer.c b/src/gallium/drivers/panfrost/nir/nir_lower_framebuffer.c index ffb51c4c3a1..887b3662dc3 100644 --- a/src/gallium/drivers/panfrost/nir/nir_lower_framebuffer.c +++ b/src/gallium/drivers/panfrost/nir/nir_lower_framebuffer.c @@ -338,6 +338,22 @@ nir_lower_framebuffer(nir_shader *shader, enum pipe_format format, /* 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); diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 8c911b5d001..9c51f423f86 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -1037,14 +1037,6 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data) 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 { |