Hi,
I can't build packages for aarch64, armv7l, ppc64le, ppc64 and ppc because of errors.
Sample logs are available:
https://build.opensuse.org/public/build/home:rawtherapee/openSUSE_Factory_ARM/aarch64/rawtherapee-unstable/_log
https://build.opensuse.org/public/build/home:rawtherapee/openSUSE_Factory_ARM/armv7l/rawtherapee-unstable/_log
https://build.opensuse.org/public/build/home:rawtherapee/openSUSE_Factory_PowerPC/ppc/rawtherapee-unstable/_log
@mbajor you appear to be trying to compile 1854147c? Why not the latest dev?
It's an non-SSE2 issue. Looking...
@mbajor Marcin, here's a patch:
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index 7552cf52..d57294f2 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -1965,7 +1965,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
const float pow1 = pow_F ( 1.64f - pow_F ( 0.29f, n ), 0.73f );
float nj, nbbj, ncbj, czj, awj, flj;
Ciecam02::initcam2float (gamu, yb2, pilotout, f2, la2, xw2, yw2, zw2, nj, dj, nbbj, ncbj, czj, awj, flj);
+#ifdef __SSE2__
const float reccmcz = 1.f / (c2 * czj);
+#endif
const float pow1n = pow_F ( 1.64f - pow_F ( 0.29f, nj ), 0.73f );
const float epsil = 0.0001f;
@@ -2530,7 +2532,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
Ciecam02::jch2xyz_ciecam02float ( xx, yy, zz,
J, C, h,
xw2, yw2, zw2,
- f2, c2, nc2, gamu, pow1n, nbbj, ncbj, flj, czj, dj, awj);
+ c2, nc2, gamu, pow1n, nbbj, ncbj, flj, czj, dj, awj);
float x, y, z;
x = xx * 655.35f;
y = yy * 655.35f;
@@ -2541,10 +2543,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
// gamut control in Lab mode; I must study how to do with cIECAM only
if (gamu == 1) {
- float HH, Lprov1, Chprov1;
+ float Lprov1, Chprov1;
Lprov1 = Ll / 327.68f;
Chprov1 = sqrtf (SQR (aa) + SQR (bb)) / 327.68f;
- HH = xatan2f (bb, aa);
float2 sincosval;
if (Chprov1 == 0.0f) {
@@ -2874,7 +2875,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
Ciecam02::jch2xyz_ciecam02float ( xx, yy, zz,
ncie->J_p[i][j], ncie_C_p, ncie->h_p[i][j],
xw2, yw2, zw2,
- f2, c2, nc2, gamu, pow1n, nbbj, ncbj, flj, czj, dj, awj);
+ c2, nc2, gamu, pow1n, nbbj, ncbj, flj, czj, dj, awj);
float x = (float)xx * 655.35f;
float y = (float)yy * 655.35f;
float z = (float)zz * 655.35f;
Could you provide me with the PPC log even if this patch resolves your issues? There are a couple of other warnings (mainly due to the unsigned nature of char), I'd like to tackle.
Best,
Fl枚ssie
@Floessie To complete ARM and PPC fix below patch is necessary
I use this patch in OBS
--- rtengine/alignedbuffer.h.orig 2018-01-08 13:51:19.000000000 +0100
+++ rtengine/alignedbuffer.h 2018-01-08 15:00:03.011463821 +0100
@@ -20,6 +20,7 @@
#define _ALIGNEDBUFFER_
#include <cstdlib>
#include <utility>
+#include <cstdint>
inline size_t padToAlignment(size_t size, size_t align = 16) {
return align * ((size + align - 1) / align);
Please add it in next commit.
All ARM and PPC builds compiled with success.
But...I've updated source code (@Beep6581) and now all i586 builds failed.
https://build.opensuse.org/public/build/home:rawtherapee/openSUSE_Leap_42.1/i586/rawtherapee-unstable/_log
I don't know if it is new bug or patch is the reason.
@mbajor This should fix it:
diff --git a/rtengine/color.cc b/rtengine/color.cc
index dbabb217..706d0f36 100644
--- a/rtengine/color.cc
+++ b/rtengine/color.cc
@@ -1786,7 +1786,7 @@ void Color::Lab2XYZ(vfloat L, vfloat a, vfloat b, vfloat &x, vfloat &y, vfloat &
void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b, const float wp[3][3], int width)
{
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
vfloat maxvalfv = F2V(MAXVALF);
vfloat c116v = F2V(116.f);
vfloat c5242d88v = F2V(5242.88f);
@@ -1794,7 +1794,7 @@ void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b,
vfloat c200v = F2V(200.f);
#endif
int i = 0;
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
for(;i < width - 3; i+=4) {
const vfloat rv = LVFU(R[i]);
const vfloat gv = LVFU(G[i]);
@mbajor
Please add it in next commit.
I'll push it tonight. Thanks for the pointer. 馃憤
@mbajor last patch was incomplete. This one is better:
diff --git a/rtengine/color.cc b/rtengine/color.cc
index dbabb217..706d0f36 100644
--- a/rtengine/color.cc
+++ b/rtengine/color.cc
@@ -1786,7 +1786,7 @@ void Color::Lab2XYZ(vfloat L, vfloat a, vfloat b, vfloat &x, vfloat &y, vfloat &
void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b, const float wp[3][3], int width)
{
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
vfloat maxvalfv = F2V(MAXVALF);
vfloat c116v = F2V(116.f);
vfloat c5242d88v = F2V(5242.88f);
@@ -1794,7 +1794,7 @@ void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b,
vfloat c200v = F2V(200.f);
#endif
int i = 0;
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
for(;i < width - 3; i+=4) {
const vfloat rv = LVFU(R[i]);
const vfloat gv = LVFU(G[i]);
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index 7e8e153b..6d885f2f 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -54,7 +54,7 @@ using namespace rtengine;
// begin of helper function for rgbProc()
void shadowToneCurve(const LUTf &shtonecurve, float *rtemp, float *gtemp, float *btemp, int istart, int tH, int jstart, int tW, int tileSize) {
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
vfloat cr = F2V(0.299f);
vfloat cg = F2V(0.587f);
vfloat cb = F2V(0.114f);
@@ -62,7 +62,7 @@ void shadowToneCurve(const LUTf &shtonecurve, float *rtemp, float *gtemp, float
for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0;
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
for (; j < tW - 3; j+=4, tj+=4) {
vfloat rv = LVF(rtemp[ti * tileSize + tj]);
@@ -95,14 +95,14 @@ void shadowToneCurve(const LUTf &shtonecurve, float *rtemp, float *gtemp, float
void highlightToneCurve(const LUTf &hltonecurve, float *rtemp, float *gtemp, float *btemp, int istart, int tH, int jstart, int tW, int tileSize, float exp_scale, float comp, float hlrange) {
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
vfloat threev = F2V(3.f);
vfloat maxvalfv = F2V(MAXVALF);
#endif
for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0;
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
for (; j < tW - 3; j+=4, tj+=4) {
vfloat rv = LVF(rtemp[ti * tileSize + tj]);
@@ -159,7 +159,7 @@ void proPhotoBlue(float *rtemp, float *gtemp, float *btemp, int istart, int tH,
// this is a hack to avoid the blue=>black bug (Issue 2141)
for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0;
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
for (; j < tW - 3; j+=4, tj+=4) {
vfloat rv = LVF(rtemp[ti * tileSize + tj]);
vfloat gv = LVF(gtemp[ti * tileSize + tj]);
@@ -3762,7 +3762,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
} else {
for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0;
-#ifdef __SSE2__
+#if defined( __SSE2__ ) && defined( __x86_64__ )
for (; j < tW - 3; j+=4, tj+=4) {
//brightness/contrast
STVF(rtemp[ti * TS + tj], tonecurve(LVF(rtemp[ti * TS + tj])));
@Floessie Can you include my patch in your next commit, please?
@heckflosse New patch fixed issue. Thanks!
@mbajor Thanks for reporting and testing!
With those patches, Windows 32 builds are again feasible
Most helpful comment
@mbajor Marcin, here's a patch:
Could you provide me with the PPC log even if this patch resolves your issues? There are a couple of other warnings (mainly due to the unsigned nature of
char), I'd like to tackle.Best,
Fl枚ssie