So I tried to investigate why exactly Cycles does not work on GCN1 cards.
With the latest drivers I can get Blender to compile the kernels successfully, it does however require setting the
GPU_FORCE_64BIT_PTR environment variable to 1 - without this the
amdgpu-pro OpenCL driver does not return any memory info.
Upon loading all kernels Blender crashes with a divide-by-zero in
DeviceSplitKernel::max_elements_for_max_buffer_size(), since the call to
state_buffer_size(kg, data, 1024) returns 0.
state_buffer_size() loads the
kernel_state_buffer_size.cl kernel onto the device and then returns the size as set by the kernel (
*size = split_data_buffer_size((KernelGlobals*)kg, num_threads);).
Does anyone have any ideas why it would return
0 under GCN1?
I tried changing the returned value to
*size = 2048;) just to check - and to my surprise
size_buffer.copy_from_device(0, 1, 1); size_t size = size_buffer;
which is supposed to get the
size back from the device - still returns 0;
Could this be a bug with
copy_from_device/device_copy_from/OpenCLDevice::mem_copy_from under GCN1?
I would be glad to debug this further if anyone could give ideas as to where to look at next.