diff options
author | Keith Packard <keithp@keithp.com> | 2014-10-29 23:20:11 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2015-03-24 12:35:02 -0700 |
commit | cc731ce0ca4d6c5c8d9c1130864e652a814644b4 (patch) | |
tree | 34a17b927dd1572b73af4db7975d9b7314b2d1c5 /glamor | |
parent | 020fcc582837b80b20843a09c1e28fa96096fe6b (diff) |
glamor: Create inline tests for small/large pixmaps
This will let us eliminate the pixmap types shortly
Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'glamor')
-rw-r--r-- | glamor/glamor_compositerects.c | 2 | ||||
-rw-r--r-- | glamor/glamor_copy.c | 2 | ||||
-rw-r--r-- | glamor/glamor_fbo.c | 2 | ||||
-rw-r--r-- | glamor/glamor_largepixmap.c | 22 | ||||
-rw-r--r-- | glamor/glamor_pixmap.c | 4 | ||||
-rw-r--r-- | glamor/glamor_priv.h | 151 | ||||
-rw-r--r-- | glamor/glamor_render.c | 2 | ||||
-rw-r--r-- | glamor/glamor_transform.c | 2 | ||||
-rw-r--r-- | glamor/glamor_utils.h | 12 |
9 files changed, 103 insertions, 96 deletions
diff --git a/glamor/glamor_compositerects.c b/glamor/glamor_compositerects.c index 4459fce07..e188d8a3f 100644 --- a/glamor/glamor_compositerects.c +++ b/glamor/glamor_compositerects.c @@ -246,7 +246,7 @@ glamor_composite_rectangles(CARD8 op, goto done; } else { - if (_X_LIKELY(priv->type != GLAMOR_TEXTURE_LARGE)) { + if (_X_LIKELY(glamor_pixmap_priv_is_small(priv))) { int error; source = CreateSolidPicture(0, color, &error); diff --git a/glamor/glamor_copy.c b/glamor/glamor_copy.c index 18fcdf90a..609fcb396 100644 --- a/glamor/glamor_copy.c +++ b/glamor/glamor_copy.c @@ -367,7 +367,7 @@ glamor_copy_fbo_fbo_draw(DrawablePtr src, glamor_get_drawable_deltas(src, src_pixmap, &src_off_x, &src_off_y); - set_scissor = src_priv->type == GLAMOR_TEXTURE_LARGE; + set_scissor = glamor_pixmap_priv_is_large(src_priv); if (set_scissor) glEnable(GL_SCISSOR_TEST); diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c index 63c66cd54..6789b4b36 100644 --- a/glamor/glamor_fbo.c +++ b/glamor/glamor_fbo.c @@ -496,7 +496,7 @@ glamor_pixmap_destroy_fbo(glamor_screen_private *glamor_priv, { glamor_pixmap_fbo *fbo; - if (priv->type == GLAMOR_TEXTURE_LARGE) { + if (glamor_pixmap_priv_is_large(priv)) { int i; glamor_pixmap_private *large = priv; diff --git a/glamor/glamor_largepixmap.c b/glamor/glamor_largepixmap.c index 6eda4e901..9c7878f78 100644 --- a/glamor/glamor_largepixmap.c +++ b/glamor/glamor_largepixmap.c @@ -4,7 +4,7 @@ static inline glamor_pixmap_private * __glamor_large(glamor_pixmap_private *pixmap_priv) { - assert(pixmap_priv->type == GLAMOR_TEXTURE_LARGE); + assert(glamor_pixmap_priv_is_large(pixmap_priv)); return pixmap_priv; } @@ -167,7 +167,7 @@ glamor_compute_clipped_regions_ext(PixmapPtr pixmap, DEBUGF("ext called \n"); - if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + if (glamor_pixmap_priv_is_small(pixmap_priv)) { clipped_regions = calloc(1, sizeof(*clipped_regions)); if (clipped_regions == NULL) { *n_region = 0; @@ -355,7 +355,7 @@ _glamor_compute_clipped_regions(PixmapPtr pixmap, glamor_pixmap_private *priv; DEBUGRegionPrint(region); - if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + if (glamor_pixmap_priv_is_small(pixmap_priv)) { clipped_regions = calloc(1, sizeof(*clipped_regions)); clipped_regions[0].region = RegionCreate(NULL, 1); clipped_regions[0].block_idx = 0; @@ -798,7 +798,7 @@ glamor_merge_clipped_regions(PixmapPtr pixmap, } temp_priv = glamor_get_pixmap_private(temp_pixmap); - assert(temp_priv->type != GLAMOR_TEXTURE_LARGE); + assert(glamor_pixmap_priv_is_small(temp_priv)); priv->box = temp_box; if (temp_extent->x1 >= 0 && temp_extent->x2 <= pixmap_width @@ -1065,7 +1065,7 @@ glamor_composite_largepixmap_region(CARD8 op, else mask_repeat_type = RepeatNone; - if (dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (glamor_pixmap_priv_is_large(dest_pixmap_priv)) { dest_block_width = __glamor_large(dest_pixmap_priv)->block_w; dest_block_height = __glamor_large(dest_pixmap_priv)->block_h; } else { @@ -1096,7 +1096,7 @@ glamor_composite_largepixmap_region(CARD8 op, */ if (source_pixmap_priv && source->transform - && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + && glamor_pixmap_priv_is_large(source_pixmap_priv)) { int source_transformed_block_width, source_transformed_block_height; if (!glamor_get_transform_block_size(source->transform, @@ -1118,7 +1118,7 @@ glamor_composite_largepixmap_region(CARD8 op, } if (mask_pixmap_priv - && mask->transform && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + && mask->transform && glamor_pixmap_priv_is_large(mask_pixmap_priv)) { int mask_transformed_block_width, mask_transformed_block_height; if (!glamor_get_transform_block_size(mask->transform, @@ -1156,7 +1156,7 @@ glamor_composite_largepixmap_region(CARD8 op, if (source_pixmap_priv && (source_pixmap_priv == dest_pixmap_priv || source_pixmap_priv == mask_pixmap_priv) - && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + && glamor_pixmap_priv_is_large(source_pixmap_priv)) { /* XXX self-copy... */ need_free_source_pixmap_priv = source_pixmap_priv; source_pixmap_priv = malloc(sizeof(*source_pixmap_priv)); @@ -1172,7 +1172,7 @@ glamor_composite_largepixmap_region(CARD8 op, glamor_set_pixmap_fbo_current(dest_pixmap_priv, clipped_dest_regions[i].block_idx); if (source_pixmap_priv && - source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + glamor_pixmap_priv_is_large(source_pixmap_priv)) { if (!source->transform && source_repeat_type != RepeatPad) { RegionTranslate(clipped_dest_regions[i].region, x_source - x_dest, y_source - y_dest); @@ -1213,7 +1213,7 @@ glamor_composite_largepixmap_region(CARD8 op, clipped_source_regions[j].block_idx); if (mask_pixmap_priv && - mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + glamor_pixmap_priv_is_large(mask_pixmap_priv)) { if (is_normal_mask_fbo && is_normal_source_fbo) { /* both mask and source are normal fbo box without transform or repeatpad. * The region is clipped against source and then we clip it against mask here.*/ @@ -1371,7 +1371,7 @@ glamor_composite_largepixmap_region(CARD8 op, } else { if (mask_pixmap_priv && - mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + glamor_pixmap_priv_is_large(mask_pixmap_priv)) { if (!mask->transform && mask_repeat_type != RepeatPad) { RegionTranslate(clipped_dest_regions[i].region, x_mask - x_dest, y_mask - y_dest); diff --git a/glamor/glamor_pixmap.c b/glamor/glamor_pixmap.c index d1551a4df..0224b3415 100644 --- a/glamor/glamor_pixmap.c +++ b/glamor/glamor_pixmap.c @@ -799,7 +799,7 @@ _glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, if (no_alpha == 0 && revert == REVERT_NONE && swap_rb == SWAP_NONE_UPLOADING #ifdef WALKAROUND_LARGE_TEXTURE_MAP - && pixmap_priv->type != GLAMOR_TEXTURE_LARGE + && glamor_pixmap_priv_is_small(pixmap_priv) #endif ) { int fbo_x_off, fbo_y_off; @@ -956,7 +956,7 @@ glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, force_clip = glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP && !glamor_check_fbo_size(glamor_priv, w, h); - if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { + if (glamor_pixmap_priv_is_large(pixmap_priv) || force_clip) { RegionRec region; BoxRec box; int n_region; diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h index 6cbebd2c5..33b2c5ff8 100644 --- a/glamor/glamor_priv.h +++ b/glamor/glamor_priv.h @@ -471,15 +471,86 @@ typedef struct glamor_pixmap_private { glamor_pixmap_fbo **fbo_array; } glamor_pixmap_private; +extern DevPrivateKeyRec glamor_pixmap_private_key; + +static inline glamor_pixmap_private * +glamor_get_pixmap_private(PixmapPtr pixmap) +{ + glamor_pixmap_private *priv; + + if (pixmap == NULL) + return NULL; + + priv = dixLookupPrivate(&pixmap->devPrivates, &glamor_pixmap_private_key); + if (!priv) { + glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); + priv = dixLookupPrivate(&pixmap->devPrivates, + &glamor_pixmap_private_key); + } + return priv; +} + +void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv); + /* - * @base.fbo: current fbo. - * - **/ + * Returns TRUE if pixmap has no image object + */ +static inline Bool +glamor_pixmap_drm_only(PixmapPtr pixmap) +{ + glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); + + return priv && priv->type == GLAMOR_DRM_ONLY; +} + +/* + * Returns TRUE if pixmap is plain memory (not a GL object at all) + */ +static inline Bool +glamor_pixmap_is_memory(PixmapPtr pixmap) +{ + glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); + + return !priv || priv->type == GLAMOR_MEMORY; +} + +/* + * Returns TRUE if pixmap requires multiple textures to hold it + */ +static inline Bool +glamor_pixmap_priv_is_large(glamor_pixmap_private *priv) +{ + return priv && priv->type == GLAMOR_TEXTURE_LARGE; +} + +static inline Bool +glamor_pixmap_priv_is_small(glamor_pixmap_private *priv) +{ + return priv && priv->type != GLAMOR_TEXTURE_LARGE; +} + +static inline Bool +glamor_pixmap_is_large(PixmapPtr pixmap) +{ + glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); + + return priv && glamor_pixmap_priv_is_large(priv); +} +/* + * Returns TRUE if pixmap has an FBO + */ +static inline Bool +glamor_pixmap_has_fbo(PixmapPtr pixmap) +{ + glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); + + return priv && priv->gl_fbo == GLAMOR_FBO_NORMAL; +} static inline void glamor_set_pixmap_fbo_current(glamor_pixmap_private *priv, int idx) { - if (priv->type == GLAMOR_TEXTURE_LARGE) { + if (glamor_pixmap_priv_is_large(priv)) { priv->fbo = priv->fbo_array[idx]; priv->box = priv->box_array[idx]; } @@ -488,7 +559,7 @@ glamor_set_pixmap_fbo_current(glamor_pixmap_private *priv, int idx) static inline glamor_pixmap_fbo * glamor_pixmap_fbo_at(glamor_pixmap_private *priv, int x, int y) { - if (priv->type == GLAMOR_TEXTURE_LARGE) { + if (glamor_pixmap_priv_is_large(priv)) { assert(x < priv->block_wcnt); assert(y < priv->block_hcnt); return priv->fbo_array[y * priv->block_wcnt + x]; @@ -501,7 +572,7 @@ glamor_pixmap_fbo_at(glamor_pixmap_private *priv, int x, int y) static inline BoxPtr glamor_pixmap_box_at(glamor_pixmap_private *priv, int x, int y) { - if (priv->type == GLAMOR_TEXTURE_LARGE) { + if (glamor_pixmap_priv_is_large(priv)) { assert(x < priv->block_wcnt); assert(y < priv->block_hcnt); return &priv->box_array[y * priv->block_wcnt + x]; @@ -514,7 +585,7 @@ glamor_pixmap_box_at(glamor_pixmap_private *priv, int x, int y) static inline int glamor_pixmap_wcnt(glamor_pixmap_private *priv) { - if (priv->type == GLAMOR_TEXTURE_LARGE) + if (glamor_pixmap_priv_is_large(priv)) return priv->block_wcnt; return 1; } @@ -522,7 +593,7 @@ glamor_pixmap_wcnt(glamor_pixmap_private *priv) static inline int glamor_pixmap_hcnt(glamor_pixmap_private *priv) { - if (priv->type == GLAMOR_TEXTURE_LARGE) + if (glamor_pixmap_priv_is_large(priv)) return priv->block_hcnt; return 1; } @@ -557,7 +628,6 @@ typedef struct { extern DevPrivateKeyRec glamor_gc_private_key; extern DevPrivateKeyRec glamor_screen_private_key; -extern DevPrivateKeyRec glamor_pixmap_private_key; static inline glamor_screen_private * glamor_get_screen_private(ScreenPtr screen) @@ -572,69 +642,6 @@ glamor_set_screen_private(ScreenPtr screen, glamor_screen_private *priv) dixSetPrivate(&screen->devPrivates, &glamor_screen_private_key, priv); } -static inline glamor_pixmap_private * -glamor_get_pixmap_private(PixmapPtr pixmap) -{ - glamor_pixmap_private *priv; - - if (pixmap == NULL) - return NULL; - - priv = dixLookupPrivate(&pixmap->devPrivates, &glamor_pixmap_private_key); - if (!priv) { - glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); - priv = dixLookupPrivate(&pixmap->devPrivates, - &glamor_pixmap_private_key); - } - return priv; -} - -/* - * Returns TRUE if pixmap has no image object - */ -static inline Bool -glamor_pixmap_drm_only(PixmapPtr pixmap) -{ - glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); - - return priv && priv->type == GLAMOR_DRM_ONLY; -} - -/* - * Returns TRUE if pixmap is plain memory (not a GL object at all) - */ -static inline Bool -glamor_pixmap_is_memory(PixmapPtr pixmap) -{ - glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); - - return !priv || priv->type == GLAMOR_TEXTURE_LARGE; -} - -/* - * Returns TRUE if pixmap requires multiple textures to hold it - */ -static inline Bool -glamor_pixmap_is_large(PixmapPtr pixmap) -{ - glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); - - return priv && priv->type == GLAMOR_TEXTURE_LARGE; -} - -/* - * Returns TRUE if pixmap has an FBO - */ -static inline Bool -glamor_pixmap_has_fbo(PixmapPtr pixmap) -{ - glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); - - return priv && priv->gl_fbo == GLAMOR_FBO_NORMAL; -} - -void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv); - static inline glamor_gc_private * glamor_get_gc_private(GCPtr gc) { diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c index b961f45d8..6669f487e 100644 --- a/glamor/glamor_render.c +++ b/glamor/glamor_render.c @@ -542,7 +542,7 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit, if (repeat_type != RepeatNone) repeat_type += RepeatFix; else if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 - || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + || glamor_pixmap_priv_is_large(pixmap_priv)) { if (picture->transform) repeat_type += RepeatFix; } diff --git a/glamor/glamor_transform.c b/glamor/glamor_transform.c index 7d1e685d2..df45b6fa4 100644 --- a/glamor/glamor_transform.c +++ b/glamor/glamor_transform.c @@ -169,7 +169,7 @@ glamor_set_texture(PixmapPtr pixmap, if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(texture_priv)) return FALSE; - if (texture_priv->type == GLAMOR_TEXTURE_LARGE) + if (glamor_pixmap_priv_is_large(texture_priv)) return FALSE; glActiveTexture(GL_TEXTURE0); diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h index b922771cc..6a3bd2942 100644 --- a/glamor/glamor_utils.h +++ b/glamor/glamor_utils.h @@ -57,7 +57,7 @@ #define PIXMAP_PRIV_GET_ACTUAL_SIZE(pixmap, priv, w, h) \ do { \ - if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(glamor_pixmap_priv_is_large(priv))) { \ w = priv->box.x2 - priv->box.x1; \ h = priv->box.y2 - priv->box.y1; \ } else { \ @@ -78,7 +78,7 @@ #define pixmap_priv_get_fbo_off(_priv_, _xoff_, _yoff_) \ do { \ - if (_X_UNLIKELY(_priv_ && (_priv_)->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(_priv_ && glamor_pixmap_priv_is_large(_priv_))) { \ *(_xoff_) = - (_priv_)->box.x1; \ *(_yoff_) = - (_priv_)->box.y1; \ } else { \ @@ -410,7 +410,7 @@ texcoords, \ stride) \ do { \ - if (_X_LIKELY(priv->type != GLAMOR_TEXTURE_LARGE)) { \ + if (_X_LIKELY(glamor_pixmap_priv_is_small(priv))) { \ glamor_set_transformed_normalize_tcoords_ext(priv, matrix, xscale, \ yscale, _x1_, _y1_, \ _x2_, _y2_, \ @@ -493,7 +493,7 @@ x1, y1, x2, y2, \ vertices, stride) \ do { \ - if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(glamor_pixmap_priv_is_large(priv))) { \ float tx1, tx2, ty1, ty2; \ int fbo_x_off, fbo_y_off; \ pixmap_priv_get_fbo_off(priv, &fbo_x_off, &fbo_y_off); \ @@ -523,7 +523,7 @@ _x1_, _y1_, _x2_, _y2_, \ vertices, stride) \ do { \ - if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(glamor_pixmap_priv_is_large(priv))) { \ float tx1, tx2, ty1, ty2; \ if (repeat_type == RepeatPad) { \ tx1 = _x1_ - priv->box.x1; \ @@ -943,7 +943,7 @@ glamor_is_large_pixmap(PixmapPtr pixmap) glamor_pixmap_private *priv; priv = glamor_get_pixmap_private(pixmap); - return (priv->type == GLAMOR_TEXTURE_LARGE); + return (glamor_pixmap_priv_is_large(priv)); } inline static Bool |