Author: post
Date: 2009-12-31 16:52:04 +0100 (Thu, 31 Dec 2009)
New Revision: 2957
Modified:
branches/rawstudio-ng-color/plugins/dcp/dcp-sse2.c
branches/rawstudio-ng-color/plugins/dcp/dcp-sse4.c
branches/rawstudio-ng-color/plugins/dcp/dcp.c
Log:
DCP: Avoid sqrt(0) in contrast. Clamp S/V when entering huesatmap to ensure no
out-of-buffer reads. Disable SSE2 debug visualization.
Modified: branches/rawstudio-ng-color/plugins/dcp/dcp-sse2.c
===================================================================
--- branches/rawstudio-ng-color/plugins/dcp/dcp-sse2.c 2009-12-31 15:17:52 UTC
(rev 2956)
+++ branches/rawstudio-ng-color/plugins/dcp/dcp-sse2.c 2009-12-31 15:52:04 UTC
(rev 2957)
@@ -224,11 +224,17 @@
static void
huesat_map_SSE2(RSHuesatMap *map, const PrecalcHSM* precalc, __m128 *_h,
__m128 *_s, __m128 *_v)
{
- g_assert(RS_IS_HUESAT_MAP(map));
-
+ __m128 zero_ps = _mm_setzero_ps();
+ __m128 ones_ps = _mm_load_ps(_ones_ps);
+
__m128 h = *_h;
__m128 s = *_s;
__m128 v = *_v;
+
+ /* Clamp - H must be pre-clamped*/
+ s = _mm_min_ps(_mm_max_ps(s, zero_ps),ones_ps);
+ v = _mm_min_ps(_mm_max_ps(v, zero_ps),ones_ps);
+
gint xfer_0[4] __attribute__ ((aligned (16)));
gint xfer_1[4] __attribute__ ((aligned (16)));
@@ -416,7 +422,7 @@
}
__m128 mul_hue = _mm_load_ps(_mul_hue_ps);
- __m128 ones_ps = _mm_load_ps(_ones_ps);
+ ones_ps = _mm_load_ps(_ones_ps);
hueShift = _mm_mul_ps(hueShift, mul_hue);
s = _mm_min_ps(ones_ps, _mm_mul_ps(s, satScale));
v = _mm_min_ps(ones_ps, _mm_mul_ps(v, valScale));
@@ -727,6 +733,9 @@
__m128 half_ps = _mm_load_ps(_half_ps);
__m128 contrast = _mm_load_ps(_contrast);
min_val = _mm_load_ps(_very_small_ps);
+ r = _mm_max_ps(r, min_val);
+ g = _mm_max_ps(g, min_val);
+ b = _mm_max_ps(b, min_val);
r = _mm_add_ps(_mm_mul_ps(contrast,
_mm_sub_ps(_mm_sqrt_ps(r), half_ps)), half_ps);
g = _mm_add_ps(_mm_mul_ps(contrast,
_mm_sub_ps(_mm_sqrt_ps(g), half_ps)), half_ps);
b = _mm_add_ps(_mm_mul_ps(contrast,
_mm_sub_ps(_mm_sqrt_ps(b), half_ps)), half_ps);
Modified: branches/rawstudio-ng-color/plugins/dcp/dcp-sse4.c
===================================================================
--- branches/rawstudio-ng-color/plugins/dcp/dcp-sse4.c 2009-12-31 15:17:52 UTC
(rev 2956)
+++ branches/rawstudio-ng-color/plugins/dcp/dcp-sse4.c 2009-12-31 15:52:04 UTC
(rev 2957)
@@ -228,11 +228,16 @@
static void
huesat_map_SSE4(RSHuesatMap *map, const PrecalcHSM* precalc, __m128 *_h,
__m128 *_s, __m128 *_v)
{
- g_assert(RS_IS_HUESAT_MAP(map));
-
+ __m128 zero_ps = _mm_setzero_ps();
+ __m128 ones_ps = _mm_load_ps(_ones_ps);
+
__m128 h = *_h;
__m128 s = *_s;
__m128 v = *_v;
+
+ /* Clamp - H must be pre-clamped*/
+ s = _mm_min_ps(_mm_max_ps(s, zero_ps),ones_ps);
+ v = _mm_min_ps(_mm_max_ps(v, zero_ps),ones_ps);
const RS_VECTOR3 *tableBase = map->deltas;
@@ -453,7 +458,7 @@
}
__m128 mul_hue = _mm_load_ps(_mul_hue_ps);
- __m128 ones_ps = _mm_load_ps(_ones_ps);
+ ones_ps = _mm_load_ps(_ones_ps);
hueShift = _mm_mul_ps(hueShift, mul_hue);
s = _mm_min_ps(ones_ps, _mm_mul_ps(s, satScale));
v = _mm_min_ps(ones_ps, _mm_mul_ps(v, valScale));
Modified: branches/rawstudio-ng-color/plugins/dcp/dcp.c
===================================================================
--- branches/rawstudio-ng-color/plugins/dcp/dcp.c 2009-12-31 15:17:52 UTC
(rev 2956)
+++ branches/rawstudio-ng-color/plugins/dcp/dcp.c 2009-12-31 15:52:04 UTC
(rev 2957)
@@ -317,7 +317,7 @@
ThreadInfo* t = _thread_info;
RS_IMAGE16 *tmp = t->tmp;
- if (t->start_y && tmp->pixelsize == 4 && (rs_detect_cpu_features() &
RS_CPU_FLAG_SSE2))
+ if (tmp->pixelsize == 4 && (rs_detect_cpu_features() &
RS_CPU_FLAG_SSE2))
{
if (render_SSE2(t))
{
@@ -1066,7 +1066,7 @@
/* ProfileToneCurve */
dcp->tone_curve = rs_dcp_file_get_tonecurve(dcp_file);
if (!dcp->tone_curve)
- dcp->tone_curve = rs_spline_new(adobe_default_table,
adobe_default_table_size, NATURAL);
+ dcp->tone_curve = rs_spline_new(adobe_default_table,
adobe_default_table_size / 2, NATURAL);
if (dcp->tone_curve)
dcp->tone_curve_lut = rs_spline_sample(dcp->tone_curve, NULL,
65536);
/* FIXME: Free these at some point! */
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit