As I wrote in my other message yesterday, I was going to disable support in our VMware driver for the RGBX8 formats because of difficulties with ARB_copy_image functionality. This led to the issue of blending to RGBA surfaces as if they were RGBX.

I guess we could set pipe_surface::format = RGBX for this case. Though this would probably lead to some special-case code in the driver(s) (but probably comparable to what I had done for 'alpha_one'.)

The issue is when a driver says it can't support RGBX formats, it would still need to be prepared to handle some of those formats in the pipe_surface::format field. As it is now, when a driver says it can't support a particular format, it really means it and is probably unprepared to see it anywhere. So, if we set pipe_surface::format = RGBX in the state tracker, there's some regression risk across all drivers. The flag I proposed wouldn't have that risk.

Anyway, I think I've found work-arounds in our driver to keep RGBX support so that this patch isn't needed after all. I just have to finish more piglit testing.

-Brian


On 06/28/2016 09:11 AM, Marek Olšák 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://urldefense.proofpoint.com/v2/url?u=https-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=CwIBaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=T0t4QG7chq2ZwJo6wilkFznRSFy-8uDKartPGbomVj8&m=aRQY4-PdtA1sKl095cbVP0IOaCsr4WAgTK9bl_Loek0&s=vyrVquTCLd-SUurntQWZk5fNrQUvyVGdEzFB8q5kQ_k&e=

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to