On Fri, 10 Mar 2017 10:47:37 +0900 Michel Dänzer <mic...@daenzer.net> wrote:
>> https://bugs.freedesktop.org/show_bug.cgi?id=99856#c24 > > That's a different issue from the one this bug report is about. It > would have to be reported against the libclc-amdgcn package. That's a bug report (now with patch) filed against Mesa, entitled "unsupported call to function get_local_size", which is one of the things that the Debian bug submitter was complaining about, when he filed this bug against the Debian Mesa package. The recommended solution from the Mesa maintainers, which I quoted, is that distributions apply the patch locally. It turns out that this is the ONLY Mesa problem that the Debian bug submitter was complaining about -- all the other problems are Blender bugs, found in the upstream Blender build that he was using, and therefore not Debian-specific: error: invalid argument type 'ShaderClosure *' (aka 'struct ShaderClosure *') to unary expression error: invalid argument type 'MicrofacetExtra *' (aka 'struct MicrofacetExtra *') to unary expression I have attached a patch to solve these Blender openCL errors. Perhaps the bug submitter could confirm that it fixes these openCL compile errors, and if so, submit a bug report to Blender, upstream. Of course, I would prefer to be given credit for the patch. -- Ian Bruce
--- blender/scripts/addons/cycles/kernel/closure/alloc.h.orig 2016-10-25 02:55:07.000000000 -0700 +++ blender/scripts/addons/cycles/kernel/closure/alloc.h 2017-03-10 00:59:12.191241611 -0800 @@ -62,7 +62,7 @@ { ShaderClosure *sc = closure_alloc(sd, size, CLOSURE_NONE_ID, weight); - if(!sc) + if(sc == 0) return NULL; float sample_weight = fabsf(average(weight)); --- blender/scripts/addons/cycles/kernel/closure/bsdf_microfacet.h.orig 2016-10-25 05:09:56.000000000 -0700 +++ blender/scripts/addons/cycles/kernel/closure/bsdf_microfacet.h 2017-03-10 00:58:32.140963906 -0800 @@ -266,7 +266,7 @@ (bsdf_a->alpha_y == bsdf_b->alpha_y) && (isequal_float3(bsdf_a->T, bsdf_b->T)) && (bsdf_a->ior == bsdf_b->ior) && - ((!bsdf_a->extra && !bsdf_b->extra) || + ((bsdf_a->extra == 0 && bsdf_b->extra == 0) || ((bsdf_a->extra && bsdf_b->extra) && (isequal_float3(bsdf_a->extra->color, bsdf_b->extra->color)))); }