panfrost: Enable sRGB fixed-function blending
For fixed-function, we have hardware to handle sRGB so we just set a flag. For blend shaders, it's rather more involved; this is currently unimplemented. Assert it out for now; we don't need it quite yet. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
@@ -168,9 +168,6 @@ struct mali_stencil_test {
|
||||
unsigned zero : 4;
|
||||
} __attribute__((packed));
|
||||
|
||||
/* Blending is a mess, since anything fancy triggers a blend shader, and
|
||||
* -those- are not understood whatsover yet */
|
||||
|
||||
#define MALI_MASK_R (1 << 0)
|
||||
#define MALI_MASK_G (1 << 1)
|
||||
#define MALI_MASK_B (1 << 2)
|
||||
@@ -439,11 +436,14 @@ union midgard_blend {
|
||||
/* On MRT Midgard systems (using an MFBD), each render target gets its own
|
||||
* blend descriptor */
|
||||
|
||||
#define MALI_BLEND_SRGB (0x400)
|
||||
|
||||
struct midgard_blend_rt {
|
||||
/* Flags base value of 0x200 to enable the render target.
|
||||
* OR with 0x1 for blending (anything other than REPLACE).
|
||||
* OR with 0x2 for programmable blending with 0-2 registers
|
||||
* OR with 0x3 for programmable blending with 2+ registers
|
||||
* OR with MALI_BLEND_SRGB for implicit sRGB
|
||||
*/
|
||||
|
||||
u64 flags;
|
||||
|
||||
@@ -1259,8 +1259,22 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
|
||||
/* TODO: MRT */
|
||||
|
||||
for (unsigned i = 0; i < 1; ++i) {
|
||||
bool is_srgb =
|
||||
util_format_is_srgb(ctx->pipe_framebuffer.cbufs[i]->format);
|
||||
|
||||
rts[i].flags = blend_count;
|
||||
|
||||
if (is_srgb)
|
||||
rts[i].flags |= MALI_BLEND_SRGB;
|
||||
|
||||
/* 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 && ctx->blend->has_blend_shader));
|
||||
|
||||
if (ctx->blend->has_blend_shader) {
|
||||
rts[i].blend.shader = ctx->blend->blend_shader;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user