Coverage Report

Created: 2024-09-08 06:20

/src/FreeRDP/libfreerdp/primitives/prim_internal.h
Line
Count
Source (jump to first uncovered line)
1
/* prim_internal.h
2
 * vi:ts=4 sw=4
3
 *
4
 * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
5
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
6
 * not use this file except in compliance with the License. You may obtain
7
 * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
8
 * Unless required by applicable law or agreed to in writing, software
9
 * distributed under the License is distributed on an "AS IS" BASIS,
10
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
 * or implied. See the License for the specific language governing
12
 * permissions and limitations under the License.  Algorithms used by
13
 * this code may be covered by patents by HP, Microsoft, or other parties.
14
 *
15
 */
16
17
#ifndef FREERDP_LIB_PRIM_INTERNAL_H
18
#define FREERDP_LIB_PRIM_INTERNAL_H
19
20
#include <winpr/platform.h>
21
#include <freerdp/config.h>
22
23
#include <freerdp/primitives.h>
24
#include <freerdp/api.h>
25
26
#include <freerdp/log.h>
27
#define PRIM_TAG FREERDP_TAG("primitives")
28
29
#ifdef __GNUC__
30
#define PRIM_ALIGN_128 __attribute__((aligned(16)))
31
#else
32
#ifdef _WIN32
33
#define PRIM_ALIGN_128 __declspec(align(16))
34
#endif
35
#endif
36
37
#if defined(WITH_SSE2)
38
#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64)
39
#define SSE2_ENABLED
40
#endif
41
#endif
42
43
#if defined(WITH_NEON)
44
#if defined(_M_ARM64) || defined(_M_ARM)
45
#define NEON_ENABLED
46
#endif
47
#endif
48
49
#if defined(SSE2_ENABLED) || defined(NEON_ENABLED) || defined(WITH_OPENCL)
50
#define HAVE_OPTIMIZED_PRIMITIVES 1
51
#endif
52
53
#if defined(SSE2_ENABLED) || defined(NEON_ENABLED)
54
#define HAVE_CPU_OPTIMIZED_PRIMITIVES 1
55
#endif
56
57
#if defined(SSE2_ENABLED)
58
/* Use lddqu for unaligned; load for 16-byte aligned. */
59
#define LOAD_SI128(_ptr_)                                                       \
60
  (((const ULONG_PTR)(_ptr_)&0x0f) ? _mm_lddqu_si128((const __m128i*)(_ptr_)) \
61
                                   : _mm_load_si128((const __m128i*)(_ptr_)))
62
#endif
63
64
static INLINE BYTE* writePixelBGRA(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
65
                                   BYTE B, BYTE A)
66
0
{
67
0
  WINPR_UNUSED(formatSize);
68
0
  WINPR_UNUSED(format);
69
70
0
  *dst++ = B;
71
0
  *dst++ = G;
72
0
  *dst++ = R;
73
0
  *dst++ = A;
74
0
  return dst;
75
0
}
Unexecuted instantiation: primitives.c:writePixelBGRA
Unexecuted instantiation: prim_add.c:writePixelBGRA
Unexecuted instantiation: prim_andor.c:writePixelBGRA
Unexecuted instantiation: prim_alphaComp.c:writePixelBGRA
Unexecuted instantiation: prim_colors.c:writePixelBGRA
Unexecuted instantiation: prim_copy.c:writePixelBGRA
Unexecuted instantiation: prim_set.c:writePixelBGRA
Unexecuted instantiation: prim_shift.c:writePixelBGRA
Unexecuted instantiation: prim_sign.c:writePixelBGRA
Unexecuted instantiation: prim_YUV.c:writePixelBGRA
Unexecuted instantiation: prim_YCoCg.c:writePixelBGRA
Unexecuted instantiation: prim_colors_neon.c:writePixelBGRA
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelBGRA
Unexecuted instantiation: prim_YUV_neon.c:writePixelBGRA
Unexecuted instantiation: prim_colors_sse2.c:writePixelBGRA
Unexecuted instantiation: prim_set_sse2.c:writePixelBGRA
Unexecuted instantiation: prim_add_sse3.c:writePixelBGRA
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelBGRA
Unexecuted instantiation: prim_andor_sse3.c:writePixelBGRA
Unexecuted instantiation: prim_shift_sse3.c:writePixelBGRA
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelBGRA
Unexecuted instantiation: prim_sign_ssse3.c:writePixelBGRA
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelBGRA
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelBGRA
Unexecuted instantiation: prim_copy_avx2.c:writePixelBGRA
76
77
static INLINE BYTE* writePixelBGRX(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
78
                                   BYTE B, BYTE A)
79
0
{
80
0
  WINPR_UNUSED(formatSize);
81
0
  WINPR_UNUSED(format);
82
0
  WINPR_UNUSED(A);
83
84
0
  *dst++ = B;
85
0
  *dst++ = G;
86
0
  *dst++ = R;
87
0
  dst++; /* Do not touch alpha */
88
89
0
  return dst;
90
0
}
Unexecuted instantiation: primitives.c:writePixelBGRX
Unexecuted instantiation: prim_add.c:writePixelBGRX
Unexecuted instantiation: prim_andor.c:writePixelBGRX
Unexecuted instantiation: prim_alphaComp.c:writePixelBGRX
Unexecuted instantiation: prim_colors.c:writePixelBGRX
Unexecuted instantiation: prim_copy.c:writePixelBGRX
Unexecuted instantiation: prim_set.c:writePixelBGRX
Unexecuted instantiation: prim_shift.c:writePixelBGRX
Unexecuted instantiation: prim_sign.c:writePixelBGRX
Unexecuted instantiation: prim_YUV.c:writePixelBGRX
Unexecuted instantiation: prim_YCoCg.c:writePixelBGRX
Unexecuted instantiation: prim_colors_neon.c:writePixelBGRX
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelBGRX
Unexecuted instantiation: prim_YUV_neon.c:writePixelBGRX
Unexecuted instantiation: prim_colors_sse2.c:writePixelBGRX
Unexecuted instantiation: prim_set_sse2.c:writePixelBGRX
Unexecuted instantiation: prim_add_sse3.c:writePixelBGRX
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelBGRX
Unexecuted instantiation: prim_andor_sse3.c:writePixelBGRX
Unexecuted instantiation: prim_shift_sse3.c:writePixelBGRX
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelBGRX
Unexecuted instantiation: prim_sign_ssse3.c:writePixelBGRX
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelBGRX
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelBGRX
Unexecuted instantiation: prim_copy_avx2.c:writePixelBGRX
91
92
static INLINE BYTE* writePixelRGBA(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
93
                                   BYTE B, BYTE A)
94
0
{
95
0
  WINPR_UNUSED(formatSize);
96
0
  WINPR_UNUSED(format);
97
98
0
  *dst++ = R;
99
0
  *dst++ = G;
100
0
  *dst++ = B;
101
0
  *dst++ = A;
102
0
  return dst;
103
0
}
Unexecuted instantiation: primitives.c:writePixelRGBA
Unexecuted instantiation: prim_add.c:writePixelRGBA
Unexecuted instantiation: prim_andor.c:writePixelRGBA
Unexecuted instantiation: prim_alphaComp.c:writePixelRGBA
Unexecuted instantiation: prim_colors.c:writePixelRGBA
Unexecuted instantiation: prim_copy.c:writePixelRGBA
Unexecuted instantiation: prim_set.c:writePixelRGBA
Unexecuted instantiation: prim_shift.c:writePixelRGBA
Unexecuted instantiation: prim_sign.c:writePixelRGBA
Unexecuted instantiation: prim_YUV.c:writePixelRGBA
Unexecuted instantiation: prim_YCoCg.c:writePixelRGBA
Unexecuted instantiation: prim_colors_neon.c:writePixelRGBA
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelRGBA
Unexecuted instantiation: prim_YUV_neon.c:writePixelRGBA
Unexecuted instantiation: prim_colors_sse2.c:writePixelRGBA
Unexecuted instantiation: prim_set_sse2.c:writePixelRGBA
Unexecuted instantiation: prim_add_sse3.c:writePixelRGBA
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelRGBA
Unexecuted instantiation: prim_andor_sse3.c:writePixelRGBA
Unexecuted instantiation: prim_shift_sse3.c:writePixelRGBA
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelRGBA
Unexecuted instantiation: prim_sign_ssse3.c:writePixelRGBA
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelRGBA
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelRGBA
Unexecuted instantiation: prim_copy_avx2.c:writePixelRGBA
104
105
static INLINE BYTE* writePixelRGBX(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
106
                                   BYTE B, BYTE A)
107
0
{
108
0
  WINPR_UNUSED(formatSize);
109
0
  WINPR_UNUSED(format);
110
0
  WINPR_UNUSED(A);
111
112
0
  *dst++ = R;
113
0
  *dst++ = G;
114
0
  *dst++ = B;
115
0
  dst++; /* Do not touch alpha */
116
117
0
  return dst;
118
0
}
Unexecuted instantiation: primitives.c:writePixelRGBX
Unexecuted instantiation: prim_add.c:writePixelRGBX
Unexecuted instantiation: prim_andor.c:writePixelRGBX
Unexecuted instantiation: prim_alphaComp.c:writePixelRGBX
Unexecuted instantiation: prim_colors.c:writePixelRGBX
Unexecuted instantiation: prim_copy.c:writePixelRGBX
Unexecuted instantiation: prim_set.c:writePixelRGBX
Unexecuted instantiation: prim_shift.c:writePixelRGBX
Unexecuted instantiation: prim_sign.c:writePixelRGBX
Unexecuted instantiation: prim_YUV.c:writePixelRGBX
Unexecuted instantiation: prim_YCoCg.c:writePixelRGBX
Unexecuted instantiation: prim_colors_neon.c:writePixelRGBX
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelRGBX
Unexecuted instantiation: prim_YUV_neon.c:writePixelRGBX
Unexecuted instantiation: prim_colors_sse2.c:writePixelRGBX
Unexecuted instantiation: prim_set_sse2.c:writePixelRGBX
Unexecuted instantiation: prim_add_sse3.c:writePixelRGBX
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelRGBX
Unexecuted instantiation: prim_andor_sse3.c:writePixelRGBX
Unexecuted instantiation: prim_shift_sse3.c:writePixelRGBX
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelRGBX
Unexecuted instantiation: prim_sign_ssse3.c:writePixelRGBX
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelRGBX
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelRGBX
Unexecuted instantiation: prim_copy_avx2.c:writePixelRGBX
119
120
static INLINE BYTE* writePixelABGR(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
121
                                   BYTE B, BYTE A)
122
0
{
123
0
  WINPR_UNUSED(formatSize);
124
0
  WINPR_UNUSED(format);
125
126
0
  *dst++ = A;
127
0
  *dst++ = B;
128
0
  *dst++ = G;
129
0
  *dst++ = R;
130
0
  return dst;
131
0
}
Unexecuted instantiation: primitives.c:writePixelABGR
Unexecuted instantiation: prim_add.c:writePixelABGR
Unexecuted instantiation: prim_andor.c:writePixelABGR
Unexecuted instantiation: prim_alphaComp.c:writePixelABGR
Unexecuted instantiation: prim_colors.c:writePixelABGR
Unexecuted instantiation: prim_copy.c:writePixelABGR
Unexecuted instantiation: prim_set.c:writePixelABGR
Unexecuted instantiation: prim_shift.c:writePixelABGR
Unexecuted instantiation: prim_sign.c:writePixelABGR
Unexecuted instantiation: prim_YUV.c:writePixelABGR
Unexecuted instantiation: prim_YCoCg.c:writePixelABGR
Unexecuted instantiation: prim_colors_neon.c:writePixelABGR
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelABGR
Unexecuted instantiation: prim_YUV_neon.c:writePixelABGR
Unexecuted instantiation: prim_colors_sse2.c:writePixelABGR
Unexecuted instantiation: prim_set_sse2.c:writePixelABGR
Unexecuted instantiation: prim_add_sse3.c:writePixelABGR
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelABGR
Unexecuted instantiation: prim_andor_sse3.c:writePixelABGR
Unexecuted instantiation: prim_shift_sse3.c:writePixelABGR
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelABGR
Unexecuted instantiation: prim_sign_ssse3.c:writePixelABGR
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelABGR
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelABGR
Unexecuted instantiation: prim_copy_avx2.c:writePixelABGR
132
133
static INLINE BYTE* writePixelXBGR(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
134
                                   BYTE B, BYTE A)
135
0
{
136
0
  WINPR_UNUSED(formatSize);
137
0
  WINPR_UNUSED(format);
138
0
  WINPR_UNUSED(A);
139
140
0
  dst++; /* Do not touch alpha */
141
0
  *dst++ = B;
142
0
  *dst++ = G;
143
0
  *dst++ = R;
144
0
  return dst;
145
0
}
Unexecuted instantiation: primitives.c:writePixelXBGR
Unexecuted instantiation: prim_add.c:writePixelXBGR
Unexecuted instantiation: prim_andor.c:writePixelXBGR
Unexecuted instantiation: prim_alphaComp.c:writePixelXBGR
Unexecuted instantiation: prim_colors.c:writePixelXBGR
Unexecuted instantiation: prim_copy.c:writePixelXBGR
Unexecuted instantiation: prim_set.c:writePixelXBGR
Unexecuted instantiation: prim_shift.c:writePixelXBGR
Unexecuted instantiation: prim_sign.c:writePixelXBGR
Unexecuted instantiation: prim_YUV.c:writePixelXBGR
Unexecuted instantiation: prim_YCoCg.c:writePixelXBGR
Unexecuted instantiation: prim_colors_neon.c:writePixelXBGR
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelXBGR
Unexecuted instantiation: prim_YUV_neon.c:writePixelXBGR
Unexecuted instantiation: prim_colors_sse2.c:writePixelXBGR
Unexecuted instantiation: prim_set_sse2.c:writePixelXBGR
Unexecuted instantiation: prim_add_sse3.c:writePixelXBGR
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelXBGR
Unexecuted instantiation: prim_andor_sse3.c:writePixelXBGR
Unexecuted instantiation: prim_shift_sse3.c:writePixelXBGR
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelXBGR
Unexecuted instantiation: prim_sign_ssse3.c:writePixelXBGR
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelXBGR
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelXBGR
Unexecuted instantiation: prim_copy_avx2.c:writePixelXBGR
146
147
static INLINE BYTE* writePixelARGB(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
148
                                   BYTE B, BYTE A)
149
0
{
150
0
  WINPR_UNUSED(formatSize);
151
0
  WINPR_UNUSED(format);
152
153
0
  *dst++ = A;
154
0
  *dst++ = R;
155
0
  *dst++ = G;
156
0
  *dst++ = B;
157
0
  return dst;
158
0
}
Unexecuted instantiation: primitives.c:writePixelARGB
Unexecuted instantiation: prim_add.c:writePixelARGB
Unexecuted instantiation: prim_andor.c:writePixelARGB
Unexecuted instantiation: prim_alphaComp.c:writePixelARGB
Unexecuted instantiation: prim_colors.c:writePixelARGB
Unexecuted instantiation: prim_copy.c:writePixelARGB
Unexecuted instantiation: prim_set.c:writePixelARGB
Unexecuted instantiation: prim_shift.c:writePixelARGB
Unexecuted instantiation: prim_sign.c:writePixelARGB
Unexecuted instantiation: prim_YUV.c:writePixelARGB
Unexecuted instantiation: prim_YCoCg.c:writePixelARGB
Unexecuted instantiation: prim_colors_neon.c:writePixelARGB
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelARGB
Unexecuted instantiation: prim_YUV_neon.c:writePixelARGB
Unexecuted instantiation: prim_colors_sse2.c:writePixelARGB
Unexecuted instantiation: prim_set_sse2.c:writePixelARGB
Unexecuted instantiation: prim_add_sse3.c:writePixelARGB
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelARGB
Unexecuted instantiation: prim_andor_sse3.c:writePixelARGB
Unexecuted instantiation: prim_shift_sse3.c:writePixelARGB
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelARGB
Unexecuted instantiation: prim_sign_ssse3.c:writePixelARGB
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelARGB
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelARGB
Unexecuted instantiation: prim_copy_avx2.c:writePixelARGB
159
160
static INLINE BYTE* writePixelXRGB(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
161
                                   BYTE B, BYTE A)
162
0
{
163
0
  WINPR_UNUSED(formatSize);
164
0
  WINPR_UNUSED(format);
165
0
  WINPR_UNUSED(A);
166
167
0
  dst++; /* Do not touch alpha */
168
0
  *dst++ = R;
169
0
  *dst++ = G;
170
0
  *dst++ = B;
171
0
  return dst;
172
0
}
Unexecuted instantiation: primitives.c:writePixelXRGB
Unexecuted instantiation: prim_add.c:writePixelXRGB
Unexecuted instantiation: prim_andor.c:writePixelXRGB
Unexecuted instantiation: prim_alphaComp.c:writePixelXRGB
Unexecuted instantiation: prim_colors.c:writePixelXRGB
Unexecuted instantiation: prim_copy.c:writePixelXRGB
Unexecuted instantiation: prim_set.c:writePixelXRGB
Unexecuted instantiation: prim_shift.c:writePixelXRGB
Unexecuted instantiation: prim_sign.c:writePixelXRGB
Unexecuted instantiation: prim_YUV.c:writePixelXRGB
Unexecuted instantiation: prim_YCoCg.c:writePixelXRGB
Unexecuted instantiation: prim_colors_neon.c:writePixelXRGB
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelXRGB
Unexecuted instantiation: prim_YUV_neon.c:writePixelXRGB
Unexecuted instantiation: prim_colors_sse2.c:writePixelXRGB
Unexecuted instantiation: prim_set_sse2.c:writePixelXRGB
Unexecuted instantiation: prim_add_sse3.c:writePixelXRGB
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelXRGB
Unexecuted instantiation: prim_andor_sse3.c:writePixelXRGB
Unexecuted instantiation: prim_shift_sse3.c:writePixelXRGB
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelXRGB
Unexecuted instantiation: prim_sign_ssse3.c:writePixelXRGB
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelXRGB
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelXRGB
Unexecuted instantiation: prim_copy_avx2.c:writePixelXRGB
173
174
static INLINE BYTE* writePixelGenericAlpha(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R,
175
                                           BYTE G, BYTE B, BYTE A)
176
1.17M
{
177
1.17M
  UINT32 color = FreeRDPGetColor(format, R, G, B, A);
178
1.17M
  FreeRDPWriteColor(dst, format, color);
179
1.17M
  return dst + formatSize;
180
1.17M
}
Unexecuted instantiation: primitives.c:writePixelGenericAlpha
Unexecuted instantiation: prim_add.c:writePixelGenericAlpha
Unexecuted instantiation: prim_andor.c:writePixelGenericAlpha
Unexecuted instantiation: prim_alphaComp.c:writePixelGenericAlpha
Unexecuted instantiation: prim_colors.c:writePixelGenericAlpha
Unexecuted instantiation: prim_copy.c:writePixelGenericAlpha
Unexecuted instantiation: prim_set.c:writePixelGenericAlpha
Unexecuted instantiation: prim_shift.c:writePixelGenericAlpha
Unexecuted instantiation: prim_sign.c:writePixelGenericAlpha
Unexecuted instantiation: prim_YUV.c:writePixelGenericAlpha
prim_YCoCg.c:writePixelGenericAlpha
Line
Count
Source
176
1.17M
{
177
1.17M
  UINT32 color = FreeRDPGetColor(format, R, G, B, A);
178
1.17M
  FreeRDPWriteColor(dst, format, color);
179
1.17M
  return dst + formatSize;
180
1.17M
}
Unexecuted instantiation: prim_colors_neon.c:writePixelGenericAlpha
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelGenericAlpha
Unexecuted instantiation: prim_YUV_neon.c:writePixelGenericAlpha
Unexecuted instantiation: prim_colors_sse2.c:writePixelGenericAlpha
Unexecuted instantiation: prim_set_sse2.c:writePixelGenericAlpha
Unexecuted instantiation: prim_add_sse3.c:writePixelGenericAlpha
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelGenericAlpha
Unexecuted instantiation: prim_andor_sse3.c:writePixelGenericAlpha
Unexecuted instantiation: prim_shift_sse3.c:writePixelGenericAlpha
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelGenericAlpha
Unexecuted instantiation: prim_sign_ssse3.c:writePixelGenericAlpha
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelGenericAlpha
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelGenericAlpha
Unexecuted instantiation: prim_copy_avx2.c:writePixelGenericAlpha
181
182
static INLINE BYTE* writePixelGeneric(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
183
                                      BYTE B, BYTE A)
184
0
{
185
0
  UINT32 color = FreeRDPGetColor(format, R, G, B, A);
186
0
  FreeRDPWriteColorIgnoreAlpha(dst, format, color);
187
0
  return dst + formatSize;
188
0
}
Unexecuted instantiation: primitives.c:writePixelGeneric
Unexecuted instantiation: prim_add.c:writePixelGeneric
Unexecuted instantiation: prim_andor.c:writePixelGeneric
Unexecuted instantiation: prim_alphaComp.c:writePixelGeneric
Unexecuted instantiation: prim_colors.c:writePixelGeneric
Unexecuted instantiation: prim_copy.c:writePixelGeneric
Unexecuted instantiation: prim_set.c:writePixelGeneric
Unexecuted instantiation: prim_shift.c:writePixelGeneric
Unexecuted instantiation: prim_sign.c:writePixelGeneric
Unexecuted instantiation: prim_YUV.c:writePixelGeneric
Unexecuted instantiation: prim_YCoCg.c:writePixelGeneric
Unexecuted instantiation: prim_colors_neon.c:writePixelGeneric
Unexecuted instantiation: prim_YCoCg_neon.c:writePixelGeneric
Unexecuted instantiation: prim_YUV_neon.c:writePixelGeneric
Unexecuted instantiation: prim_colors_sse2.c:writePixelGeneric
Unexecuted instantiation: prim_set_sse2.c:writePixelGeneric
Unexecuted instantiation: prim_add_sse3.c:writePixelGeneric
Unexecuted instantiation: prim_alphaComp_sse3.c:writePixelGeneric
Unexecuted instantiation: prim_andor_sse3.c:writePixelGeneric
Unexecuted instantiation: prim_shift_sse3.c:writePixelGeneric
Unexecuted instantiation: prim_YUV_ssse3.c:writePixelGeneric
Unexecuted instantiation: prim_sign_ssse3.c:writePixelGeneric
Unexecuted instantiation: prim_YCoCg_ssse3.c:writePixelGeneric
Unexecuted instantiation: prim_copy_sse4_1.c:writePixelGeneric
Unexecuted instantiation: prim_copy_avx2.c:writePixelGeneric
189
190
typedef BYTE* (*fkt_writePixel)(BYTE*, DWORD, UINT32, BYTE, BYTE, BYTE, BYTE);
191
192
static INLINE fkt_writePixel getPixelWriteFunction(DWORD format, BOOL useAlpha)
193
591
{
194
591
  switch (format)
195
591
  {
196
0
    case PIXEL_FORMAT_ARGB32:
197
0
    case PIXEL_FORMAT_XRGB32:
198
0
      return useAlpha ? writePixelARGB : writePixelXRGB;
199
200
0
    case PIXEL_FORMAT_ABGR32:
201
0
    case PIXEL_FORMAT_XBGR32:
202
0
      return useAlpha ? writePixelABGR : writePixelXBGR;
203
204
0
    case PIXEL_FORMAT_RGBA32:
205
0
    case PIXEL_FORMAT_RGBX32:
206
0
      return useAlpha ? writePixelRGBA : writePixelRGBX;
207
208
0
    case PIXEL_FORMAT_BGRA32:
209
0
    case PIXEL_FORMAT_BGRX32:
210
0
      return useAlpha ? writePixelBGRA : writePixelBGRX;
211
212
591
    default:
213
591
      return useAlpha ? writePixelGenericAlpha : writePixelGeneric;
214
591
  }
215
591
}
Unexecuted instantiation: primitives.c:getPixelWriteFunction
Unexecuted instantiation: prim_add.c:getPixelWriteFunction
Unexecuted instantiation: prim_andor.c:getPixelWriteFunction
Unexecuted instantiation: prim_alphaComp.c:getPixelWriteFunction
Unexecuted instantiation: prim_colors.c:getPixelWriteFunction
Unexecuted instantiation: prim_copy.c:getPixelWriteFunction
Unexecuted instantiation: prim_set.c:getPixelWriteFunction
Unexecuted instantiation: prim_shift.c:getPixelWriteFunction
Unexecuted instantiation: prim_sign.c:getPixelWriteFunction
Unexecuted instantiation: prim_YUV.c:getPixelWriteFunction
prim_YCoCg.c:getPixelWriteFunction
Line
Count
Source
193
591
{
194
591
  switch (format)
195
591
  {
196
0
    case PIXEL_FORMAT_ARGB32:
197
0
    case PIXEL_FORMAT_XRGB32:
198
0
      return useAlpha ? writePixelARGB : writePixelXRGB;
199
200
0
    case PIXEL_FORMAT_ABGR32:
201
0
    case PIXEL_FORMAT_XBGR32:
202
0
      return useAlpha ? writePixelABGR : writePixelXBGR;
203
204
0
    case PIXEL_FORMAT_RGBA32:
205
0
    case PIXEL_FORMAT_RGBX32:
206
0
      return useAlpha ? writePixelRGBA : writePixelRGBX;
207
208
0
    case PIXEL_FORMAT_BGRA32:
209
0
    case PIXEL_FORMAT_BGRX32:
210
0
      return useAlpha ? writePixelBGRA : writePixelBGRX;
211
212
591
    default:
213
591
      return useAlpha ? writePixelGenericAlpha : writePixelGeneric;
214
591
  }
215
591
}
Unexecuted instantiation: prim_colors_neon.c:getPixelWriteFunction
Unexecuted instantiation: prim_YCoCg_neon.c:getPixelWriteFunction
Unexecuted instantiation: prim_YUV_neon.c:getPixelWriteFunction
Unexecuted instantiation: prim_colors_sse2.c:getPixelWriteFunction
Unexecuted instantiation: prim_set_sse2.c:getPixelWriteFunction
Unexecuted instantiation: prim_add_sse3.c:getPixelWriteFunction
Unexecuted instantiation: prim_alphaComp_sse3.c:getPixelWriteFunction
Unexecuted instantiation: prim_andor_sse3.c:getPixelWriteFunction
Unexecuted instantiation: prim_shift_sse3.c:getPixelWriteFunction
Unexecuted instantiation: prim_YUV_ssse3.c:getPixelWriteFunction
Unexecuted instantiation: prim_sign_ssse3.c:getPixelWriteFunction
Unexecuted instantiation: prim_YCoCg_ssse3.c:getPixelWriteFunction
Unexecuted instantiation: prim_copy_sse4_1.c:getPixelWriteFunction
Unexecuted instantiation: prim_copy_avx2.c:getPixelWriteFunction
216
217
static INLINE BYTE CLIP(INT64 X)
218
3.53M
{
219
3.53M
  if (X > 255L)
220
86.8k
    return 255L;
221
222
3.45M
  if (X < 0L)
223
708k
    return 0L;
224
225
2.74M
  return (BYTE)X;
226
3.45M
}
Unexecuted instantiation: primitives.c:CLIP
Unexecuted instantiation: prim_add.c:CLIP
Unexecuted instantiation: prim_andor.c:CLIP
Unexecuted instantiation: prim_alphaComp.c:CLIP
Unexecuted instantiation: prim_colors.c:CLIP
Unexecuted instantiation: prim_copy.c:CLIP
Unexecuted instantiation: prim_set.c:CLIP
Unexecuted instantiation: prim_shift.c:CLIP
Unexecuted instantiation: prim_sign.c:CLIP
Unexecuted instantiation: prim_YUV.c:CLIP
prim_YCoCg.c:CLIP
Line
Count
Source
218
3.53M
{
219
3.53M
  if (X > 255L)
220
86.8k
    return 255L;
221
222
3.45M
  if (X < 0L)
223
708k
    return 0L;
224
225
2.74M
  return (BYTE)X;
226
3.45M
}
Unexecuted instantiation: prim_colors_neon.c:CLIP
Unexecuted instantiation: prim_YCoCg_neon.c:CLIP
Unexecuted instantiation: prim_YUV_neon.c:CLIP
Unexecuted instantiation: prim_colors_sse2.c:CLIP
Unexecuted instantiation: prim_set_sse2.c:CLIP
Unexecuted instantiation: prim_add_sse3.c:CLIP
Unexecuted instantiation: prim_alphaComp_sse3.c:CLIP
Unexecuted instantiation: prim_andor_sse3.c:CLIP
Unexecuted instantiation: prim_shift_sse3.c:CLIP
Unexecuted instantiation: prim_YUV_ssse3.c:CLIP
Unexecuted instantiation: prim_sign_ssse3.c:CLIP
Unexecuted instantiation: prim_YCoCg_ssse3.c:CLIP
Unexecuted instantiation: prim_copy_sse4_1.c:CLIP
Unexecuted instantiation: prim_copy_avx2.c:CLIP
227
228
static INLINE BYTE CONDITIONAL_CLIP(INT32 in, BYTE original)
229
0
{
230
0
  BYTE out = CLIP(in);
231
0
  BYTE diff = 0;
232
0
  if (out > original)
233
0
    diff = out - original;
234
0
  else
235
0
    diff = original - out;
236
0
  if (diff < 30)
237
0
    return original;
238
0
  return out;
239
0
}
Unexecuted instantiation: primitives.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_add.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_andor.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_alphaComp.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_colors.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_copy.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_set.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_shift.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_sign.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_YUV.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_YCoCg.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_colors_neon.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_YCoCg_neon.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_YUV_neon.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_colors_sse2.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_set_sse2.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_add_sse3.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_alphaComp_sse3.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_andor_sse3.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_shift_sse3.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_YUV_ssse3.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_sign_ssse3.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_YCoCg_ssse3.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_copy_sse4_1.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_copy_avx2.c:CONDITIONAL_CLIP
240
241
/**
242
 * | R |   ( | 256     0    403 | |    Y    | )
243
 * | G | = ( | 256   -48   -120 | | U - 128 | ) >> 8
244
 * | B |   ( | 256   475      0 | | V - 128 | )
245
 */
246
static INLINE INT32 C(INT32 Y)
247
0
{
248
0
  return (Y)-0L;
249
0
}
Unexecuted instantiation: primitives.c:C
Unexecuted instantiation: prim_add.c:C
Unexecuted instantiation: prim_andor.c:C
Unexecuted instantiation: prim_alphaComp.c:C
Unexecuted instantiation: prim_colors.c:C
Unexecuted instantiation: prim_copy.c:C
Unexecuted instantiation: prim_set.c:C
Unexecuted instantiation: prim_shift.c:C
Unexecuted instantiation: prim_sign.c:C
Unexecuted instantiation: prim_YUV.c:C
Unexecuted instantiation: prim_YCoCg.c:C
Unexecuted instantiation: prim_colors_neon.c:C
Unexecuted instantiation: prim_YCoCg_neon.c:C
Unexecuted instantiation: prim_YUV_neon.c:C
Unexecuted instantiation: prim_colors_sse2.c:C
Unexecuted instantiation: prim_set_sse2.c:C
Unexecuted instantiation: prim_add_sse3.c:C
Unexecuted instantiation: prim_alphaComp_sse3.c:C
Unexecuted instantiation: prim_andor_sse3.c:C
Unexecuted instantiation: prim_shift_sse3.c:C
Unexecuted instantiation: prim_YUV_ssse3.c:C
Unexecuted instantiation: prim_sign_ssse3.c:C
Unexecuted instantiation: prim_YCoCg_ssse3.c:C
Unexecuted instantiation: prim_copy_sse4_1.c:C
Unexecuted instantiation: prim_copy_avx2.c:C
250
251
static INLINE INT32 D(INT32 U)
252
0
{
253
0
  return (U)-128L;
254
0
}
Unexecuted instantiation: primitives.c:D
Unexecuted instantiation: prim_add.c:D
Unexecuted instantiation: prim_andor.c:D
Unexecuted instantiation: prim_alphaComp.c:D
Unexecuted instantiation: prim_colors.c:D
Unexecuted instantiation: prim_copy.c:D
Unexecuted instantiation: prim_set.c:D
Unexecuted instantiation: prim_shift.c:D
Unexecuted instantiation: prim_sign.c:D
Unexecuted instantiation: prim_YUV.c:D
Unexecuted instantiation: prim_YCoCg.c:D
Unexecuted instantiation: prim_colors_neon.c:D
Unexecuted instantiation: prim_YCoCg_neon.c:D
Unexecuted instantiation: prim_YUV_neon.c:D
Unexecuted instantiation: prim_colors_sse2.c:D
Unexecuted instantiation: prim_set_sse2.c:D
Unexecuted instantiation: prim_add_sse3.c:D
Unexecuted instantiation: prim_alphaComp_sse3.c:D
Unexecuted instantiation: prim_andor_sse3.c:D
Unexecuted instantiation: prim_shift_sse3.c:D
Unexecuted instantiation: prim_YUV_ssse3.c:D
Unexecuted instantiation: prim_sign_ssse3.c:D
Unexecuted instantiation: prim_YCoCg_ssse3.c:D
Unexecuted instantiation: prim_copy_sse4_1.c:D
Unexecuted instantiation: prim_copy_avx2.c:D
255
256
static INLINE INT32 E(INT32 V)
257
0
{
258
0
  return (V)-128L;
259
0
}
Unexecuted instantiation: primitives.c:E
Unexecuted instantiation: prim_add.c:E
Unexecuted instantiation: prim_andor.c:E
Unexecuted instantiation: prim_alphaComp.c:E
Unexecuted instantiation: prim_colors.c:E
Unexecuted instantiation: prim_copy.c:E
Unexecuted instantiation: prim_set.c:E
Unexecuted instantiation: prim_shift.c:E
Unexecuted instantiation: prim_sign.c:E
Unexecuted instantiation: prim_YUV.c:E
Unexecuted instantiation: prim_YCoCg.c:E
Unexecuted instantiation: prim_colors_neon.c:E
Unexecuted instantiation: prim_YCoCg_neon.c:E
Unexecuted instantiation: prim_YUV_neon.c:E
Unexecuted instantiation: prim_colors_sse2.c:E
Unexecuted instantiation: prim_set_sse2.c:E
Unexecuted instantiation: prim_add_sse3.c:E
Unexecuted instantiation: prim_alphaComp_sse3.c:E
Unexecuted instantiation: prim_andor_sse3.c:E
Unexecuted instantiation: prim_shift_sse3.c:E
Unexecuted instantiation: prim_YUV_ssse3.c:E
Unexecuted instantiation: prim_sign_ssse3.c:E
Unexecuted instantiation: prim_YCoCg_ssse3.c:E
Unexecuted instantiation: prim_copy_sse4_1.c:E
Unexecuted instantiation: prim_copy_avx2.c:E
260
261
static INLINE BYTE YUV2R(INT32 Y, INT32 U, INT32 V)
262
0
{
263
0
  const INT32 r = (256L * C(Y) + 0L * D(U) + 403L * E(V));
264
0
  const INT32 r8 = r >> 8L;
265
0
  return CLIP(r8);
266
0
}
Unexecuted instantiation: primitives.c:YUV2R
Unexecuted instantiation: prim_add.c:YUV2R
Unexecuted instantiation: prim_andor.c:YUV2R
Unexecuted instantiation: prim_alphaComp.c:YUV2R
Unexecuted instantiation: prim_colors.c:YUV2R
Unexecuted instantiation: prim_copy.c:YUV2R
Unexecuted instantiation: prim_set.c:YUV2R
Unexecuted instantiation: prim_shift.c:YUV2R
Unexecuted instantiation: prim_sign.c:YUV2R
Unexecuted instantiation: prim_YUV.c:YUV2R
Unexecuted instantiation: prim_YCoCg.c:YUV2R
Unexecuted instantiation: prim_colors_neon.c:YUV2R
Unexecuted instantiation: prim_YCoCg_neon.c:YUV2R
Unexecuted instantiation: prim_YUV_neon.c:YUV2R
Unexecuted instantiation: prim_colors_sse2.c:YUV2R
Unexecuted instantiation: prim_set_sse2.c:YUV2R
Unexecuted instantiation: prim_add_sse3.c:YUV2R
Unexecuted instantiation: prim_alphaComp_sse3.c:YUV2R
Unexecuted instantiation: prim_andor_sse3.c:YUV2R
Unexecuted instantiation: prim_shift_sse3.c:YUV2R
Unexecuted instantiation: prim_YUV_ssse3.c:YUV2R
Unexecuted instantiation: prim_sign_ssse3.c:YUV2R
Unexecuted instantiation: prim_YCoCg_ssse3.c:YUV2R
Unexecuted instantiation: prim_copy_sse4_1.c:YUV2R
Unexecuted instantiation: prim_copy_avx2.c:YUV2R
267
268
static INLINE BYTE YUV2G(INT32 Y, INT32 U, INT32 V)
269
0
{
270
0
  const INT32 g = (256L * C(Y) - 48L * D(U) - 120L * E(V));
271
0
  const INT32 g8 = g >> 8L;
272
0
  return CLIP(g8);
273
0
}
Unexecuted instantiation: primitives.c:YUV2G
Unexecuted instantiation: prim_add.c:YUV2G
Unexecuted instantiation: prim_andor.c:YUV2G
Unexecuted instantiation: prim_alphaComp.c:YUV2G
Unexecuted instantiation: prim_colors.c:YUV2G
Unexecuted instantiation: prim_copy.c:YUV2G
Unexecuted instantiation: prim_set.c:YUV2G
Unexecuted instantiation: prim_shift.c:YUV2G
Unexecuted instantiation: prim_sign.c:YUV2G
Unexecuted instantiation: prim_YUV.c:YUV2G
Unexecuted instantiation: prim_YCoCg.c:YUV2G
Unexecuted instantiation: prim_colors_neon.c:YUV2G
Unexecuted instantiation: prim_YCoCg_neon.c:YUV2G
Unexecuted instantiation: prim_YUV_neon.c:YUV2G
Unexecuted instantiation: prim_colors_sse2.c:YUV2G
Unexecuted instantiation: prim_set_sse2.c:YUV2G
Unexecuted instantiation: prim_add_sse3.c:YUV2G
Unexecuted instantiation: prim_alphaComp_sse3.c:YUV2G
Unexecuted instantiation: prim_andor_sse3.c:YUV2G
Unexecuted instantiation: prim_shift_sse3.c:YUV2G
Unexecuted instantiation: prim_YUV_ssse3.c:YUV2G
Unexecuted instantiation: prim_sign_ssse3.c:YUV2G
Unexecuted instantiation: prim_YCoCg_ssse3.c:YUV2G
Unexecuted instantiation: prim_copy_sse4_1.c:YUV2G
Unexecuted instantiation: prim_copy_avx2.c:YUV2G
274
275
static INLINE BYTE YUV2B(INT32 Y, INT32 U, INT32 V)
276
0
{
277
0
  const INT32 b = (256L * C(Y) + 475L * D(U) + 0L * E(V));
278
0
  const INT32 b8 = b >> 8L;
279
0
  return CLIP(b8);
280
0
}
Unexecuted instantiation: primitives.c:YUV2B
Unexecuted instantiation: prim_add.c:YUV2B
Unexecuted instantiation: prim_andor.c:YUV2B
Unexecuted instantiation: prim_alphaComp.c:YUV2B
Unexecuted instantiation: prim_colors.c:YUV2B
Unexecuted instantiation: prim_copy.c:YUV2B
Unexecuted instantiation: prim_set.c:YUV2B
Unexecuted instantiation: prim_shift.c:YUV2B
Unexecuted instantiation: prim_sign.c:YUV2B
Unexecuted instantiation: prim_YUV.c:YUV2B
Unexecuted instantiation: prim_YCoCg.c:YUV2B
Unexecuted instantiation: prim_colors_neon.c:YUV2B
Unexecuted instantiation: prim_YCoCg_neon.c:YUV2B
Unexecuted instantiation: prim_YUV_neon.c:YUV2B
Unexecuted instantiation: prim_colors_sse2.c:YUV2B
Unexecuted instantiation: prim_set_sse2.c:YUV2B
Unexecuted instantiation: prim_add_sse3.c:YUV2B
Unexecuted instantiation: prim_alphaComp_sse3.c:YUV2B
Unexecuted instantiation: prim_andor_sse3.c:YUV2B
Unexecuted instantiation: prim_shift_sse3.c:YUV2B
Unexecuted instantiation: prim_YUV_ssse3.c:YUV2B
Unexecuted instantiation: prim_sign_ssse3.c:YUV2B
Unexecuted instantiation: prim_YCoCg_ssse3.c:YUV2B
Unexecuted instantiation: prim_copy_sse4_1.c:YUV2B
Unexecuted instantiation: prim_copy_avx2.c:YUV2B
281
282
/* Function prototypes for all the init/deinit routines. */
283
FREERDP_LOCAL void primitives_init_copy(primitives_t* prims);
284
FREERDP_LOCAL void primitives_init_set(primitives_t* prims);
285
FREERDP_LOCAL void primitives_init_add(primitives_t* prims);
286
FREERDP_LOCAL void primitives_init_andor(primitives_t* prims);
287
FREERDP_LOCAL void primitives_init_shift(primitives_t* prims);
288
FREERDP_LOCAL void primitives_init_sign(primitives_t* prims);
289
FREERDP_LOCAL void primitives_init_alphaComp(primitives_t* prims);
290
FREERDP_LOCAL void primitives_init_colors(primitives_t* prims);
291
FREERDP_LOCAL void primitives_init_YCoCg(primitives_t* prims);
292
FREERDP_LOCAL void primitives_init_YUV(primitives_t* prims);
293
294
FREERDP_LOCAL void primitives_init_copy_opt(primitives_t* prims);
295
FREERDP_LOCAL void primitives_init_set_opt(primitives_t* prims);
296
FREERDP_LOCAL void primitives_init_add_opt(primitives_t* prims);
297
FREERDP_LOCAL void primitives_init_andor_opt(primitives_t* prims);
298
FREERDP_LOCAL void primitives_init_shift_opt(primitives_t* prims);
299
FREERDP_LOCAL void primitives_init_sign_opt(primitives_t* prims);
300
FREERDP_LOCAL void primitives_init_alphaComp_opt(primitives_t* prims);
301
FREERDP_LOCAL void primitives_init_colors_opt(primitives_t* prims);
302
FREERDP_LOCAL void primitives_init_YCoCg_opt(primitives_t* prims);
303
FREERDP_LOCAL void primitives_init_YUV_opt(primitives_t* prims);
304
305
#if defined(WITH_OPENCL)
306
FREERDP_LOCAL BOOL primitives_init_opencl(primitives_t* prims);
307
#endif
308
309
FREERDP_LOCAL primitives_t* primitives_get_by_type(DWORD type);
310
311
#endif /* FREERDP_LIB_PRIM_INTERNAL_H */