Lines Matching full:pattern
34 /* state for pattern generator and whether swapping is necessary */
41 /* used to get the pattern in native order */
42 static unsigned long fb_pattern_get(struct fb_pattern *pattern) in fb_pattern_get() argument
44 return pattern->pixels; in fb_pattern_get()
47 /* used to get the pattern in reverse order */
48 static unsigned long fb_pattern_get_reverse(struct fb_pattern *pattern) in fb_pattern_get_reverse() argument
50 return swab_long(pattern->pixels); in fb_pattern_get_reverse()
53 /* next static pattern */
54 static void fb_pattern_static(struct fb_pattern *pattern) in fb_pattern_static() argument
59 /* next rotating pattern */
60 static void fb_pattern_rotate(struct fb_pattern *pattern) in fb_pattern_rotate() argument
62 pattern->pixels = fb_left(pattern->pixels, pattern->left) in fb_pattern_rotate()
63 | fb_right(pattern->pixels, pattern->right); in fb_pattern_rotate()
68 /* create the filling pattern from a given color */
79 unsigned long pattern; in pixel_to_pat() local
83 pattern = mulconst[bpp] * color; in pixel_to_pat()
86 pattern = color; in pixel_to_pat()
87 pattern = pattern | pattern << bpp; in pixel_to_pat()
88 pattern = pattern | pattern << bpp*2; in pixel_to_pat()
91 pattern = color; in pixel_to_pat()
92 pattern = pattern | pattern << bpp; in pixel_to_pat()
98 pattern <<= (BITS_PER_LONG % bpp); in pixel_to_pat()
99 pattern |= pattern >> bpp; in pixel_to_pat()
101 return pattern; in pixel_to_pat()
104 /* overwrite bits according to a pattern in a line */
106 struct fb_pattern *pattern, in bitfill() argument
107 unsigned long (*get)(struct fb_pattern *pattern), in bitfill() argument
108 void (*rotate)(struct fb_pattern *pattern), in bitfill() argument
114 first = fb_pixel_mask(dst->bits, pattern->reverse); in bitfill()
115 last = ~fb_pixel_mask(end & (BITS_PER_LONG-1), pattern->reverse); in bitfill()
119 first = get(pattern); in bitfill()
128 fb_modify_offset(get(pattern), first, 0, dst); in bitfill()
129 rotate(pattern); in bitfill()
133 fb_write_offset(get(pattern), offset + 0, dst); in bitfill()
134 rotate(pattern); in bitfill()
135 fb_write_offset(get(pattern), offset + 1, dst); in bitfill()
136 rotate(pattern); in bitfill()
137 fb_write_offset(get(pattern), offset + 2, dst); in bitfill()
138 rotate(pattern); in bitfill()
139 fb_write_offset(get(pattern), offset + 3, dst); in bitfill()
140 rotate(pattern); in bitfill()
143 fb_write_offset(get(pattern), offset++, dst); in bitfill()
144 rotate(pattern); in bitfill()
148 fb_modify_offset(get(pattern), last, offset, dst); in bitfill()
152 /* inverts bits according to a pattern in a line */
154 struct fb_pattern *pattern, in bitinvert() argument
155 unsigned long (*get)(struct fb_pattern *pattern), in bitinvert() argument
156 void (*rotate)(struct fb_pattern *pattern), in bitinvert() argument
163 first = fb_pixel_mask(dst->bits, pattern->reverse); in bitinvert()
164 last = ~fb_pixel_mask(end & (BITS_PER_LONG-1), pattern->reverse); in bitinvert()
173 first &= get(pattern); in bitinvert()
176 rotate(pattern); in bitinvert()
181 fb_invert_offset(get(pattern), offset + 0, dst); in bitinvert()
182 rotate(pattern); in bitinvert()
183 fb_invert_offset(get(pattern), offset + 1, dst); in bitinvert()
184 rotate(pattern); in bitinvert()
185 fb_invert_offset(get(pattern), offset + 2, dst); in bitinvert()
186 rotate(pattern); in bitinvert()
187 fb_invert_offset(get(pattern), offset + 3, dst); in bitinvert()
188 rotate(pattern); in bitinvert()
191 fb_invert_offset(get(pattern), offset++, dst); in bitinvert()
192 rotate(pattern); in bitinvert()
196 last &= get(pattern); in bitinvert()
201 /* pattern doesn't change. 1, 2, 4, 8, 16, 32, 64 bpp */
203 struct fb_address *dst, struct fb_pattern *pattern, in fb_fillrect_static() argument
209 if (bpp > 8 && pattern->reverse.byte) in fb_fillrect_static()
210 pattern->pixels = swab_long(pattern->pixels); in fb_fillrect_static()
214 bitinvert(dst, pattern, fb_pattern_get, fb_pattern_static, width); in fb_fillrect_static()
219 bitfill(dst, pattern, fb_pattern_get, fb_pattern_static, width); in fb_fillrect_static()
224 /* rotate pattern to the correct position */
225 static inline unsigned long fb_rotate(unsigned long pattern, int shift, int bpp) in fb_rotate() argument
228 return fb_right(pattern, shift) | fb_left(pattern, bpp - shift); in fb_rotate()
231 /* rotating pattern, for example 24 bpp */
234 struct fb_pattern *pattern, in fb_fillrect_rotating() argument
235 unsigned long (*get)(struct fb_pattern *pattern), in fb_fillrect_rotating() argument
238 unsigned long pat = pattern->pixels; in fb_fillrect_rotating()
244 pattern->pixels = fb_rotate(pat, dst->bits, bpp); in fb_fillrect_rotating()
245 bitinvert(dst, pattern, get, fb_pattern_rotate, width); in fb_fillrect_rotating()
250 pattern->pixels = fb_rotate(pat, dst->bits, bpp); in fb_fillrect_rotating()
251 bitfill(dst, pattern, get, fb_pattern_rotate, width); in fb_fillrect_rotating()
262 struct fb_pattern pattern; in fb_fillrect() local
266 pattern.pixels = pixel_to_pat(bpp, palette ? palette[rect->color] : rect->color); in fb_fillrect()
267 pattern.reverse = fb_reverse_init(p); in fb_fillrect()
268 pattern.left = BITS_PER_LONG % bpp; in fb_fillrect()
269 if (pattern.left) { in fb_fillrect()
270 pattern.right = bpp - pattern.left; in fb_fillrect()
271 if (pattern.reverse.byte) in fb_fillrect()
272 fb_fillrect_rotating(rect, bpp, &dst, &pattern, in fb_fillrect()
275 fb_fillrect_rotating(rect, bpp, &dst, &pattern, in fb_fillrect()
278 fb_fillrect_static(rect, bpp, &dst, &pattern, bits_per_line); in fb_fillrect()