OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the Chromium LICENSE file. | 3 // found in the Chromium LICENSE file. |
4 | 4 |
5 #include "qcms.h" | 5 #include "qcms.h" |
6 #include "qcms_test_util.h" | 6 #include "qcms_test_util.h" |
7 #include "timing.h" | 7 #include "timing.h" |
8 | 8 |
9 #include <math.h> | 9 #include <math.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
11 #include <stdlib.h> | 11 #include <stdlib.h> |
12 #include <string.h> | 12 #include <string.h> |
13 | 13 |
14 // External qcms tetra clut interpolators. | 14 // External qcms tetra clut interpolators. |
15 | 15 |
16 extern void qcms_transform_data_tetra_clut_rgba(qcms_transform *transform, | 16 extern void qcms_transform_data_tetra_clut_rgba(qcms_transform *transform, |
17 unsigned char *src, | 17 unsigned char *src, |
18 unsigned char *dest, | 18 unsigned char *dest, |
19 size_t length, | 19 size_t length, |
20 qcms_format_type output_format); | 20 qcms_format_type output_format); |
21 | 21 |
| 22 #ifdef SSE2_ENABLE |
22 extern void qcms_transform_data_tetra_clut_rgba_sse2(qcms_transform *transform, | 23 extern void qcms_transform_data_tetra_clut_rgba_sse2(qcms_transform *transform, |
23 unsigned char *src, | 24 unsigned char *src, |
24 unsigned char *dest, | 25 unsigned char *dest, |
25 size_t length, | 26 size_t length, |
26 qcms_format_type output_for
mat); | 27 qcms_format_type output_for
mat); |
| 28 #else |
| 29 void qcms_transform_data_tetra_clut_rgba_dummy(qcms_transform *transform, |
| 30 unsigned char *src, |
| 31 unsigned char *dest, |
| 32 size_t length, |
| 33 qcms_format_type output_format) |
| 34 { |
| 35 (void)(transform); |
| 36 (void)(src); |
| 37 (void)(dest); |
| 38 (void)(length); |
| 39 (void)(output_format); |
| 40 } |
| 41 #endif |
27 | 42 |
28 static float *create_lut(size_t lutSize) | 43 static float *create_lut(size_t lutSize) |
29 { | 44 { |
30 float *lut = malloc(lutSize * sizeof(float)); | 45 float *lut = malloc(lutSize * sizeof(float)); |
31 size_t i; | 46 size_t i; |
32 | 47 |
33 for (i = 0; i < lutSize; ++i) { | 48 for (i = 0; i < lutSize; ++i) { |
34 lut[i] = (rand() & 255) * (1.0f / 255.0f); | 49 lut[i] = (rand() & 255) * (1.0f / 255.0f); |
35 } | 50 } |
36 | 51 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 for (i = 0; i < iterations; ++i) { | 131 for (i = 0; i < iterations; ++i) { |
117 unsigned char *src0 = (unsigned char *)calloc(length, pixel_size); | 132 unsigned char *src0 = (unsigned char *)calloc(length, pixel_size); |
118 unsigned char *src1 = (unsigned char *)calloc(length, pixel_size); | 133 unsigned char *src1 = (unsigned char *)calloc(length, pixel_size); |
119 unsigned char *dst0 = (unsigned char *)calloc(length, pixel_size); | 134 unsigned char *dst0 = (unsigned char *)calloc(length, pixel_size); |
120 unsigned char *dst1 = (unsigned char *)calloc(length, pixel_size); | 135 unsigned char *dst1 = (unsigned char *)calloc(length, pixel_size); |
121 | 136 |
122 generate_source_uint8_t(src0, length, pixel_size); | 137 generate_source_uint8_t(src0, length, pixel_size); |
123 memcpy(src1, src0, length * pixel_size); | 138 memcpy(src1, src0, length * pixel_size); |
124 | 139 |
125 #define TRANSFORM_TEST0 qcms_transform_data_tetra_clut_rgba | 140 #define TRANSFORM_TEST0 qcms_transform_data_tetra_clut_rgba |
| 141 #ifdef SSE2_ENABLE |
126 #define TRANSFORM_TEST1 qcms_transform_data_tetra_clut_rgba_sse2 | 142 #define TRANSFORM_TEST1 qcms_transform_data_tetra_clut_rgba_sse2 |
| 143 #else |
| 144 #define TRANSFORM_TEST1 qcms_transform_data_tetra_clut_rgba_dummy |
| 145 #endif |
127 | 146 |
128 TIME(TRANSFORM_TEST0(&transform0, src0, dst0, length, format), &time0); | 147 TIME(TRANSFORM_TEST0(&transform0, src0, dst0, length, format), &time0); |
129 TIME(TRANSFORM_TEST1(&transform1, src1, dst1, length, format), &time1); | 148 TIME(TRANSFORM_TEST1(&transform1, src1, dst1, length, format), &time1); |
130 | 149 |
131 if (!validate(dst0, dst1, length, 0, pixel_size)) { | 150 if (!validate(dst0, dst1, length, 0, pixel_size)) { |
132 fprintf(stderr, "Invalid transform output: %d diffs\n", diffs); | 151 fprintf(stderr, "Invalid transform output: %d diffs\n", diffs); |
133 } | 152 } |
134 | 153 |
135 free(src0); | 154 free(src0); |
136 free(src1); | 155 free(src1); |
(...skipping 15 matching lines...) Expand all Loading... |
152 free(lut1); | 171 free(lut1); |
153 | 172 |
154 return diffs; | 173 return diffs; |
155 } | 174 } |
156 | 175 |
157 struct qcms_test_case qcms_test_tetra_clut_rgba_info = { | 176 struct qcms_test_case qcms_test_tetra_clut_rgba_info = { |
158 "qcms_test_tetra_clut_rgba", | 177 "qcms_test_tetra_clut_rgba", |
159 qcms_test_tetra_clut_rgba, | 178 qcms_test_tetra_clut_rgba, |
160 QCMS_TEST_DISABLED | 179 QCMS_TEST_DISABLED |
161 }; | 180 }; |
OLD | NEW |