The main issue is when the st selects an alpha-ful format, but the GL wants an alpha-less format. The driver has no way of knowing. This gives it a way of knowing.
The alternative is that the driver has to support every format and we drop all the fallbacks from st_format. Brian's proposal seems like a simpler solution. (This happens on nvc0, for example - RGB10A2 is supported, but RGB10X2 isn't. So the st picks RGB10A2 and nvc0 is none the wiser - until someone tries to do DST_ALPHA blending.) -ilia On Tue, Jun 28, 2016 at 11:11 AM, Marek Olšák <mar...@gmail.com> wrote: > I guess you need this because your driver doesn't support LUMINANCE > and st/mesa selects RGBA, right? In that case, you can just set RGBX > in pipe_surface::format and you don't need another flag. > > It would be better to select RGBX at renderbuffer creation, but doing > it later is fine as well. > > Marek > > On Fri, Jun 24, 2016 at 4:43 PM, Brian Paul <bri...@vmware.com> wrote: >> This indicates the alpha channel of the surface should always be one. >> Drivers can use this to adjust blending terms when needed. >> >> v2: also check for R, RG, LUMINANCE surfaces, per Ilia >> --- >> src/mesa/state_tracker/st_cb_fbo.c | 9 +++++++++ >> 1 file changed, 9 insertions(+) >> >> diff --git a/src/mesa/state_tracker/st_cb_fbo.c >> b/src/mesa/state_tracker/st_cb_fbo.c >> index 9801b1f..843ff83 100644 >> --- a/src/mesa/state_tracker/st_cb_fbo.c >> +++ b/src/mesa/state_tracker/st_cb_fbo.c >> @@ -216,6 +216,11 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx, >> return FALSE; >> >> u_surface_default_template(&surf_tmpl, strb->texture); >> + surf_tmpl.alpha_one = (strb->Base._BaseFormat == GL_RGB || >> + strb->Base._BaseFormat == GL_RG || >> + strb->Base._BaseFormat == GL_R || >> + strb->Base._BaseFormat == GL_LUMINANCE); >> + >> strb->surface = pipe->create_surface(pipe, >> strb->texture, >> &surf_tmpl); >> @@ -463,6 +468,10 @@ st_update_renderbuffer_surface(struct st_context *st, >> /* create a new pipe_surface */ >> struct pipe_surface surf_tmpl; >> memset(&surf_tmpl, 0, sizeof(surf_tmpl)); >> + surf_tmpl.alpha_one = (strb->Base._BaseFormat == GL_RGB || >> + strb->Base._BaseFormat == GL_RG || >> + strb->Base._BaseFormat == GL_R || >> + strb->Base._BaseFormat == GL_LUMINANCE); >> surf_tmpl.format = format; >> surf_tmpl.u.tex.level = level; >> surf_tmpl.u.tex.first_layer = first_layer; >> -- >> 1.9.1 >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev