[Mesa-dev] [PATCH] st/mesa: set the new pipe_surface::alpha_one field for RGB surfaces

Brian Paul brianp at vmware.com
Fri Jun 24 14:43:52 UTC 2016


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



More information about the mesa-dev mailing list