xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

glamor_program.h (5816B)


      1 /*
      2  * Copyright © 2014 Keith Packard
      3  *
      4  * Permission to use, copy, modify, distribute, and sell this software and its
      5  * documentation for any purpose is hereby granted without fee, provided that
      6  * the above copyright notice appear in all copies and that both that copyright
      7  * notice and this permission notice appear in supporting documentation, and
      8  * that the name of the copyright holders not be used in advertising or
      9  * publicity pertaining to distribution of the software without specific,
     10  * written prior permission.  The copyright holders make no representations
     11  * about the suitability of this software for any purpose.  It is provided "as
     12  * is" without express or implied warranty.
     13  *
     14  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
     15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
     16  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
     17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
     18  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
     19  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
     20  * OF THIS SOFTWARE.
     21  */
     22 
     23 #ifndef _GLAMOR_PROGRAM_H_
     24 #define _GLAMOR_PROGRAM_H_
     25 
     26 typedef enum {
     27     glamor_program_location_none = 0,
     28     glamor_program_location_fg = 1,
     29     glamor_program_location_bg = 2,
     30     glamor_program_location_fillsamp = 4,
     31     glamor_program_location_fillpos = 8,
     32     glamor_program_location_font = 16,
     33     glamor_program_location_bitplane = 32,
     34     glamor_program_location_dash = 64,
     35     glamor_program_location_atlas = 128,
     36 } glamor_program_location;
     37 
     38 typedef enum {
     39     glamor_program_flag_none = 0,
     40 } glamor_program_flag;
     41 
     42 typedef enum {
     43     glamor_program_alpha_normal,
     44     glamor_program_alpha_ca_first,
     45     glamor_program_alpha_ca_second,
     46     glamor_program_alpha_dual_blend,
     47     glamor_program_alpha_count
     48 } glamor_program_alpha;
     49 
     50 typedef struct _glamor_program glamor_program;
     51 
     52 typedef Bool (*glamor_use) (PixmapPtr pixmap, GCPtr gc, glamor_program *prog, void *arg);
     53 
     54 typedef Bool (*glamor_use_render) (CARD8 op, PicturePtr src, PicturePtr dst, glamor_program *prog);
     55 
     56 typedef struct {
     57     const char                          *name;
     58     const int                           version;
     59     char                                *vs_defines;
     60     char                                *fs_defines;
     61     const char                          *vs_vars;
     62     const char                          *vs_exec;
     63     const char                          *fs_vars;
     64     const char                          *fs_exec;
     65     const glamor_program_location       locations;
     66     const glamor_program_flag           flags;
     67     const char                          *source_name;
     68     glamor_use                          use;
     69     glamor_use_render                   use_render;
     70 } glamor_facet;
     71 
     72 struct _glamor_program {
     73     GLint                       prog;
     74     GLint                       failed;
     75     GLint                       matrix_uniform;
     76     GLint                       fg_uniform;
     77     GLint                       bg_uniform;
     78     GLint                       fill_size_inv_uniform;
     79     GLint                       fill_offset_uniform;
     80     GLint                       font_uniform;
     81     GLint                       bitplane_uniform;
     82     GLint                       bitmul_uniform;
     83     GLint                       dash_uniform;
     84     GLint                       dash_length_uniform;
     85     GLint                       atlas_uniform;
     86     glamor_program_location     locations;
     87     glamor_program_flag         flags;
     88     glamor_use                  prim_use;
     89     glamor_use                  fill_use;
     90     glamor_program_alpha        alpha;
     91     glamor_use_render           prim_use_render;
     92     glamor_use_render           fill_use_render;
     93 };
     94 
     95 typedef struct {
     96     glamor_program      progs[4];
     97 } glamor_program_fill;
     98 
     99 extern const glamor_facet glamor_fill_solid;
    100 
    101 Bool
    102 glamor_build_program(ScreenPtr          screen,
    103                      glamor_program     *prog,
    104                      const glamor_facet *prim,
    105                      const glamor_facet *fill,
    106                      const char         *combine,
    107                      const char         *defines);
    108 
    109 Bool
    110 glamor_use_program(PixmapPtr            pixmap,
    111                    GCPtr                gc,
    112                    glamor_program       *prog,
    113                    void                 *arg);
    114 
    115 glamor_program *
    116 glamor_use_program_fill(PixmapPtr               pixmap,
    117                         GCPtr                   gc,
    118                         glamor_program_fill     *program_fill,
    119                         const glamor_facet      *prim);
    120 
    121 typedef enum {
    122     glamor_program_source_solid,
    123     glamor_program_source_picture,
    124     glamor_program_source_1x1_picture,
    125     glamor_program_source_count,
    126 } glamor_program_source;
    127 
    128 typedef struct {
    129     glamor_program      progs[glamor_program_source_count][glamor_program_alpha_count];
    130 } glamor_program_render;
    131 
    132 static inline Bool
    133 glamor_is_component_alpha(PicturePtr mask) {
    134     if (mask && mask->componentAlpha && PICT_FORMAT_RGB(mask->format))
    135         return TRUE;
    136     return FALSE;
    137 }
    138 
    139 glamor_program *
    140 glamor_setup_program_render(CARD8                 op,
    141                             PicturePtr            src,
    142                             PicturePtr            mask,
    143                             PicturePtr            dst,
    144                             glamor_program_render *program_render,
    145                             const glamor_facet    *prim,
    146                             const char            *defines);
    147 
    148 Bool
    149 glamor_use_program_render(glamor_program        *prog,
    150                           CARD8                 op,
    151                           PicturePtr            src,
    152                           PicturePtr            dst);
    153 
    154 #endif /* _GLAMOR_PROGRAM_H_ */