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_ThreeByteBgr.c
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_AlphaMacros.h"
29
30
/***************************************************************/
31
32
#define GBR_PIXEL(i) \
33
0xFF000000 | (src[3*i + 2] << 16) | (src[3*i + 1] << 8) | src[3*i]
34
35
/***************************************************************/
36
37
#define BGR_TO_ARGB { \
38
mlib_d64 sda, sdb, sdc, sdd, sde, sdf; \
39
mlib_d64 s_1, s_2, s_3, a13, b13, a02, b02; \
40
\
41
sda = vis_fpmerge(vis_read_hi(sd0), vis_read_lo(sd1)); \
42
sdb = vis_fpmerge(vis_read_lo(sd0), vis_read_hi(sd2)); \
43
sdc = vis_fpmerge(vis_read_hi(sd1), vis_read_lo(sd2)); \
44
\
45
sdd = vis_fpmerge(vis_read_hi(sda), vis_read_lo(sdb)); \
46
sde = vis_fpmerge(vis_read_lo(sda), vis_read_hi(sdc)); \
47
sdf = vis_fpmerge(vis_read_hi(sdb), vis_read_lo(sdc)); \
48
\
49
s_3 = vis_fpmerge(vis_read_hi(sdd), vis_read_lo(sde)); \
50
s_2 = vis_fpmerge(vis_read_lo(sdd), vis_read_hi(sdf)); \
51
s_1 = vis_fpmerge(vis_read_hi(sde), vis_read_lo(sdf)); \
52
\
53
a13 = vis_fpmerge(vis_read_hi(s_1), vis_read_hi(s_3)); \
54
b13 = vis_fpmerge(vis_read_lo(s_1), vis_read_lo(s_3)); \
55
a02 = vis_fpmerge(vis_read_hi(s_0), vis_read_hi(s_2)); \
56
b02 = vis_fpmerge(vis_read_lo(s_0), vis_read_lo(s_2)); \
57
\
58
dd0 = vis_fpmerge(vis_read_hi(a02), vis_read_hi(a13)); \
59
dd1 = vis_fpmerge(vis_read_lo(a02), vis_read_lo(a13)); \
60
dd2 = vis_fpmerge(vis_read_hi(b02), vis_read_hi(b13)); \
61
dd3 = vis_fpmerge(vis_read_lo(b02), vis_read_lo(b13)); \
62
}
63
64
/***************************************************************/
65
66
void ADD_SUFF(ThreeByteBgrToIntArgbConvert)(BLIT_PARAMS)
67
{
68
mlib_s32 dstScan = pDstInfo->scanStride;
69
mlib_s32 srcScan = pSrcInfo->scanStride;
70
mlib_d64 *sp;
71
mlib_d64 s_0;
72
mlib_d64 s0, s1, s2, s3, sd0, sd1, sd2, dd0, dd1, dd2, dd3;
73
mlib_s32 i, i0, j;
74
75
if (width < 16) {
76
for (j = 0; j < height; j++) {
77
mlib_u8 *src = srcBase;
78
mlib_s32 *dst = dstBase;
79
80
for (i = 0; i < width; i++) {
81
dst[i] = GBR_PIXEL(i);
82
}
83
84
PTR_ADD(dstBase, dstScan);
85
PTR_ADD(srcBase, srcScan);
86
}
87
return;
88
}
89
90
if (srcScan == 3*width && dstScan == 4*width) {
91
width *= height;
92
height = 1;
93
}
94
95
s_0 = vis_fone();
96
97
for (j = 0; j < height; j++) {
98
mlib_u8 *src = srcBase;
99
mlib_f32 *dst = dstBase;
100
101
i = i0 = 0;
102
103
if ((mlib_s32)dst & 7) {
104
((mlib_s32*)dst)[i] = GBR_PIXEL(i);
105
i0 = 1;
106
}
107
108
sp = vis_alignaddr(src, 3*i0);
109
s3 = *sp++;
110
111
#pragma pipeloop(0)
112
for (i = i0; i <= (mlib_s32)width - 8; i += 8) {
113
s0 = s3;
114
s1 = *sp++;
115
s2 = *sp++;
116
s3 = *sp++;
117
sd0 = vis_faligndata(s0, s1);
118
sd1 = vis_faligndata(s1, s2);
119
sd2 = vis_faligndata(s2, s3);
120
121
BGR_TO_ARGB
122
123
*(mlib_d64*)(dst + i ) = dd0;
124
*(mlib_d64*)(dst + i + 2) = dd1;
125
*(mlib_d64*)(dst + i + 4) = dd2;
126
*(mlib_d64*)(dst + i + 6) = dd3;
127
}
128
129
for (; i < width; i++) {
130
((mlib_s32*)dst)[i] = GBR_PIXEL(i);
131
}
132
133
PTR_ADD(dstBase, dstScan);
134
PTR_ADD(srcBase, srcScan);
135
}
136
}
137
138
/***************************************************************/
139
140
void ADD_SUFF(ThreeByteBgrToIntArgbScaleConvert)(SCALE_PARAMS)
141
{
142
mlib_s32 dstScan = pDstInfo->scanStride;
143
mlib_s32 srcScan = pSrcInfo->scanStride;
144
mlib_d64 dd, maskFF;
145
mlib_s32 i, i0, i1, j;
146
147
if (width < 16) {
148
for (j = 0; j < height; j++) {
149
mlib_u8 *src = srcBase;
150
mlib_s32 *dst = dstBase;
151
mlib_s32 *dst_end = dst + width;
152
mlib_s32 tmpsxloc = sxloc;
153
154
PTR_ADD(src, (syloc >> shift) * srcScan);
155
156
for (; dst < dst_end; dst++) {
157
i = tmpsxloc >> shift;
158
tmpsxloc += sxinc;
159
*(mlib_s32*)dst = GBR_PIXEL(i);
160
}
161
162
PTR_ADD(dstBase, dstScan);
163
syloc += syinc;
164
}
165
return;
166
}
167
168
maskFF = vis_fone();
169
170
vis_alignaddr(NULL, 7);
171
172
for (j = 0; j < height; j++) {
173
mlib_u8 *src = srcBase;
174
mlib_f32 *dst = dstBase;
175
mlib_f32 *dst_end = dst + width;
176
mlib_s32 tmpsxloc = sxloc;
177
178
PTR_ADD(src, (syloc >> shift) * srcScan);
179
180
if ((mlib_s32)dst & 7) {
181
i = tmpsxloc >> shift;
182
tmpsxloc += sxinc;
183
*(mlib_s32*)dst = GBR_PIXEL(i);
184
dst++;
185
}
186
187
#pragma pipeloop(0)
188
for (; dst <= dst_end - 2; dst += 2) {
189
i0 = tmpsxloc >> shift;
190
i1 = (tmpsxloc + sxinc) >> shift;
191
tmpsxloc += 2*sxinc;
192
193
dd = vis_faligndata(vis_ld_u8(src + 3*i1 ), dd);
194
dd = vis_faligndata(vis_ld_u8(src + 3*i1 + 1), dd);
195
dd = vis_faligndata(vis_ld_u8(src + 3*i1 + 2), dd);
196
dd = vis_faligndata(maskFF, dd);
197
dd = vis_faligndata(vis_ld_u8(src + 3*i0 ), dd);
198
dd = vis_faligndata(vis_ld_u8(src + 3*i0 + 1), dd);
199
dd = vis_faligndata(vis_ld_u8(src + 3*i0 + 2), dd);
200
dd = vis_faligndata(maskFF, dd);
201
202
*(mlib_d64*)dst = dd;
203
}
204
205
for (; dst < dst_end; dst++) {
206
i = tmpsxloc >> shift;
207
tmpsxloc += sxinc;
208
*(mlib_s32*)dst = GBR_PIXEL(i);
209
}
210
211
PTR_ADD(dstBase, dstScan);
212
syloc += syinc;
213
}
214
}
215
216
/***************************************************************/
217
218
#endif
219
220