[Mesa-dev] panfrost: Questions regarding pan_wallpaper.c (and the 'reload FB content' logic in general)
Boris Brezillon
boris.brezillon at collabora.com
Fri May 3 14:45:34 UTC 2019
On Fri, 3 May 2019 07:29:22 -0700
Alyssa Rosenzweig <alyssa at rosenzweig.io> wrote:
> > + else if (!(job->clear & PIPE_CLEAR_COLOR))
>
> Make sure this is actually being called when you expect. I don't
> remember if job->clear is being zeroed when we expect (hint: it might
> not be due to a missing job_free routine somewhere, *blush*).
>
> > + .rt[0].rgb_func = PIPE_BLEND_ADD,
> > + .rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE,
> > + .rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO,
> > + .rt[0].alpha_func = PIPE_BLEND_ADD,
> > + .rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ZERO,
> > + .rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ONE,
>
> Why is alpha flipped?
Actually, I tried several things, so I might have left it flipped at
some point, but it doesn't work with with src_factor=one and
dts_factor=zero.
> Is the black you're seeing really (0, 0, 0, a) or
> might it be (0, 0, 0, 0)?
Good question. I haven't dumped the buffers yet. Another thing to note:
the texture I'm reloading from is using PIPE_FORMAT_B8G8R8X8_UNORM as
a format, so no alpha component in there. I don't know exactly what
happens in this case (do we have garbage in the alpha component?) :-/.
>
> > /* Bind texture/sampler. TODO: push/pop */
>
> (Was this TODO addressed? It might explain the missing panel)
We definitely bind the new sampler/texture, but I'm not sure we restore
the old one. This being said, the version I have made using
util_blitter_blit() was taking care of saving/restoring those, and I
still had the issue :-/.
>
> > + 0.0, ctx->pipe_framebuffer.height, 0.0, 1.0,
> > + 0.0, 0.0, 0.0, 1.0,
> > + ctx->pipe_framebuffer.width, ctx->pipe_framebuffer.height, 0.0, 1.0,
> > + ctx->pipe_framebuffer.width, 0.0, 0.0, 1.0,
>
> Just FWIW, this routine is running a fragment shader _without a vertex
> shader_. In effect, we're running the vertex shader in software and
> writing varyings straight to memory, as if the VS ran. So these values
> are essentially the transformed output of a vertex shader.
You mean we should apply the viewport transform on top, right? But
again, the blitter-based implementation had a full VS -> FS pipeline
with viewport transform applied and it didn't work either.
>
> > + .format = MALI_RGBA32F,
> > + .swizzle = panfrost_get_default_swizzle(4),
> > + .unknown1 = 0x2,
>
> +1
>
> > + /* Looks like setting first_tiler_job->dependency_index_2 to point to
> > + * out 'reload fb content' job is not enough, the link order matters too.
> > + * Let's insert our job in the first slot so that panfrost_link_jobs()
> > + * place it before any other tiler jobs.
>
> Oh, that's very interesting, I never realized that was the issue (I had
> draw order issues). It's worth more investigation in the future, but +1
> and here's a cookie :P
Hehe, glad to hear that at least part of this investigation lead to
something useful :-).
>
> --------------------------------------
>
> Hoping one of these is related, but the diff looks fairly solid....
More information about the mesa-dev
mailing list