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