<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Priority</th>
          <td>medium
          </td>
        </tr>

        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - OpenCL support for mandelbulber-opencl"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=82717">82717</a>
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>dri-devel@lists.freedesktop.org
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>OpenCL support for mandelbulber-opencl
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>haagch@frickel.club
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Other
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>git
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Drivers/Gallium/radeonsi
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>Mesa
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Website of the program here: <a href="https://sites.google.com/site/mandelbulber/">https://sites.google.com/site/mandelbulber/</a> (Watch
out, it uses a weird install script)

Start it, go to the OpenCL tab and try to enable OpenCL.

A few things that probably need to be addressed. I applied some workarounds to
see them all and I don't even know if the OpenCL programs would work after
removing all of that stuff.


Problem 1:
OpenCL Build log:
ERROR: Program::build() (-43)

That's because of the build paramater -cl-denorms-are-zero that is hardcoded in
the source code of mandelbulber.

Workarodund 1:
sed -i 's/-cl-denorms-are-zero / /g' src/cl_support.cpp


Problem 2:
OpenCL Build log:       input.cl:34:1: error: OpenCL does not support the
'static' storage class specifier

So that's not valid in OpenCL 1.1, but for the sake of getting it to "just
compile" at least:

Workaround 2:
for i in /usr/share/mandelbulber/cl/*; do sed -i "s/static //g" $i; done


Problem 3:
OpenCL Build log:       input.cl:323:10: error: cannot combine with previous
'type-name' declaration specifier
input.cl:323:15: error: expected identifier or '('
input.cl:324:8: error: expected identifier or '('
input.cl:325:32: error: expected expression


(WTF is random binary data doing here?)

That's a weird one that seems to come from whatever clang does. I think clang
thinks that "half" is already defined in the OpenCL kernels. Not sure if this
is intended.

Workaround 3:
for i in /usr/share/mandelbulber/cl/*; do sed -i "s/half /halfFOO /g" $i; done
for i in /usr/share/mandelbulber/cl/*; do sed -i "s/half)/halfFOO)/g" $i; done


Problem 4:
OpenCL Build log:       �}�
OpenCL program built done
OpenCL kernel opened
OpenCL workgroup size: 256
OpenCL Job size: 480256
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

I don't think the crash itself is the fault of mesa opencl, because the
backtrace looks like this:

#0  0x00007fd1154e2d67 in raise () from /usr/lib/libc.so.6
#1  0x00007fd1154e4118 in abort () from /usr/lib/libc.so.6
#2  0x00007fd115dd81f5 in __gnu_cxx::__verbose_terminate_handler() () from
/usr/lib/libstdc++.so.6
#3  0x00007fd115dd6076 in ?? () from /usr/lib/libstdc++.so.6
#4  0x00007fd115dd60c1 in std::terminate() () from /usr/lib/libstdc++.so.6
#5  0x00007fd115dd62d8 in __cxa_throw () from /usr/lib/libstdc++.so.6
#6  0x00007fd115dd6869 in operator new(unsigned long) () from
/usr/lib/libstdc++.so.6
#7  0x00007fd115dd68c9 in operator new[](unsigned long) () from
/usr/lib/libstdc++.so.6
#8  0x00000000004a3683 in CclSupport::InitFractal (this=0x207e200) at
../src/cl_support.cpp:451
#9  0x000000000042cffb in ChangedOpenClEnabled (widget=0x22bdd60, data=0x0) at
../src/callbacks.cpp:2896
#10 0x00007fd11673b3d8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#11 0x00007fd11674cd5d in ?? () from /usr/lib/libgobject-2.0.so.0

But why is there random binary data in the OpenCL build log?

llvm-svn 215809
libclc-git 165.20140816
opencl-headers12 1:1.2.r26859 (not sure if relevant)
mesa git from today

radeon 7970M pitcairn</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>