Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/solaris/native/sun/java2d/loops/vis_AlphaMacros.h
32288 views
1
/*
2
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
#if !defined(JAVA2D_NO_MLIB) || defined(MLIB_ADD_SUFF)
27
28
#include <vis_proto.h>
29
#include <mlib_image.h>
30
31
#include "java2d_Mlib.h"
32
#include "AlphaMacros.h"
33
34
/***************************************************************/
35
36
extern const mlib_u32 vis_mul8s_tbl[];
37
extern const mlib_u64 vis_div8_tbl[];
38
extern const mlib_u64 vis_div8pre_tbl[];
39
40
/***************************************************************/
41
42
void IntArgbToIntAbgrConvert_line(mlib_s32 *srcBase,
43
mlib_s32 *dstBase,
44
mlib_s32 width);
45
46
/***************************************************************/
47
48
#define BUFF_SIZE 256
49
50
/***************************************************************/
51
52
#define COPY_NA(src, dst, _size) { \
53
mlib_s32 cci, size = _size; \
54
if (size <= 16) { \
55
for (cci = 0; cci < size; cci++) { \
56
((mlib_u8*)dst)[cci] = ((mlib_u8*)src)[cci]; \
57
} \
58
} else { \
59
mlib_ImageCopy_na(src, dst, size); \
60
} \
61
}
62
63
/***************************************************************/
64
65
#define MUL8_INT(x, y) mul8_tbl[256*(y) + (x)]
66
67
#define FMUL_16x16(x, y) \
68
vis_fpadd16(vis_fmul8sux16(x, y), vis_fmul8ulx16(x, y))
69
70
/***************************************************************/
71
72
#define MUL8_VIS(rr, alp) \
73
vis_fmul8x16al(rr, ((mlib_f32 *)vis_mul8s_tbl)[alp])
74
75
#define DIV_ALPHA(rr, alp) { \
76
mlib_d64 d_div = ((mlib_d64*)vis_div8_tbl)[alp]; \
77
rr = FMUL_16x16(rr, d_div); \
78
}
79
80
#define DIV_ALPHA_RGB(rr, alp) \
81
DIV_ALPHA(rr, alp)
82
83
/***************************************************************/
84
85
#define BLEND_VIS(rr, dstARGB, srcARGB, dstA, srcA) \
86
{ \
87
mlib_d64 t0, t1; \
88
\
89
t0 = MUL8_VIS(srcARGB, srcA); \
90
t1 = MUL8_VIS(dstARGB, dstA); \
91
rr = vis_fpadd16(t0, t1); \
92
\
93
dstA += srcA; \
94
DIV_ALPHA(rr, dstA); \
95
}
96
97
#define BLEND_VIS_RGB(rr, dstARGB, srcARGB, dstA, srcA) \
98
BLEND_VIS(rr, dstARGB, srcARGB, dstA, srcA)
99
100
/***************************************************************/
101
102
#if 0
103
extern const mlib_u16 vis_div8_16_tbl[];
104
105
#undef BLEND_VIS
106
#define BLEND_VIS(rr, dstARGB, srcARGB, dstA, srcA) \
107
{ \
108
mlib_d64 done = vis_to_double_dup(0x00FFFFFF); \
109
mlib_d64 t0, t1; \
110
mlib_f32 s0, s1; \
111
mlib_s32 resA; \
112
\
113
resA = dstA + srcA; \
114
t0 = vis_ld_u16((mlib_u16*)vis_div8_16_tbl + 256*srcA + resA); \
115
t1 = vis_ld_u16((mlib_u16*)vis_div8_16_tbl + 256*dstA + resA); \
116
dstA = resA; \
117
\
118
t0 = vis_fmul8x16al(srcARGB, vis_read_lo(t0)); \
119
t1 = vis_fmul8x16al(dstARGB, vis_read_lo(t1)); \
120
rr = vis_fpadd16(t0, t1); \
121
}
122
123
#define BLEND_VIS_RGB(rr, dstARGB, srcARGB, dstA, srcA) \
124
{ \
125
mlib_d64 maskRGB = vis_to_double_dup(0x00FFFFFF); \
126
\
127
BLEND_VIS(rr, dstARGB, srcARGB, dstA, srcA) \
128
\
129
rr = vis_fand(rr, maskRGB); \
130
}
131
132
#endif
133
134
/***************************************************************/
135
136
#define F32_FROM_U8x4(x0, x1, x2, x3) \
137
vis_to_float(((x0) << 24) | ((x1) << 16) | ((x2)<< 8) | ((x3)))
138
139
/***************************************************************/
140
141
#define D64_FROM_U8x8(dd, val) \
142
val &= 0xFF; \
143
val |= (val << 8); \
144
val |= (val << 16); \
145
dd = vis_to_double_dup(val)
146
147
/***************************************************************/
148
149
#define D64_FROM_U16x4(dd, val) \
150
val &= 0xFFFF; \
151
val |= (val << 16); \
152
dd = vis_to_double_dup(val)
153
154
/***************************************************************/
155
156
#define D64_FROM_F32x2(ff) \
157
vis_freg_pair(ff, ff)
158
159
/***************************************************************/
160
161
#if VIS >= 0x200
162
163
#define ARGB2ABGR_FL(src) \
164
src = vis_read_hi(vis_bshuffle(vis_freg_pair(src, vis_fzeros()), 0));
165
166
#define ARGB2ABGR_FL2(dst, src0, src1) \
167
dst = vis_freg_pair(src0, src1); \
168
dst = vis_bshuffle(dst, 0)
169
170
#define ARGB2ABGR_DB(src) \
171
src = vis_bshuffle(src, 0);
172
173
#else
174
175
#define ARGB2ABGR_FL(src) { \
176
mlib_d64 t0, t1, t2, t3; \
177
t0 = vis_fpmerge(src, src); \
178
t1 = vis_fpmerge(vis_read_lo(t0), vis_read_hi(t0)); \
179
t2 = vis_fpmerge(vis_read_hi(t0), vis_read_lo(t0)); \
180
t3 = vis_fpmerge(vis_read_hi(t2), vis_read_lo(t1)); \
181
src = vis_read_hi(t3); \
182
}
183
184
#define ARGB2ABGR_FL2(dst, src0, src1) { \
185
mlib_d64 t0, t1, t2; \
186
t0 = vis_fpmerge(src0, src1); \
187
t1 = vis_fpmerge(vis_read_lo(t0), vis_read_hi(t0)); \
188
t2 = vis_fpmerge(vis_read_hi(t0), vis_read_lo(t0)); \
189
dst = vis_fpmerge(vis_read_hi(t2), vis_read_lo(t1)); \
190
}
191
192
#define ARGB2ABGR_DB(src) \
193
ARGB2ABGR_FL2(src, vis_read_hi(src), vis_read_lo(src))
194
195
#endif
196
197
/***************************************************************/
198
199
#endif /* JAVA2D_NO_MLIB */
200
201