Cycles: Add support for bindless textures.
authorThomas Dinges <blender@dingto.org>
Thu, 19 May 2016 10:47:41 +0000 (12:47 +0200)
committerThomas Dinges <blender@dingto.org>
Thu, 19 May 2016 11:14:37 +0000 (13:14 +0200)
commitc9f1ed1e4c22728b1f711656ab4de56c11c65e35
treed64b736497f386827ef327d8b35fd5d9ce91588a
parent03f846ea12ba38d4686edfeef01a571329bd9385
Cycles: Add support for bindless textures.

This adds support for CUDA Texture objects (also known as Bindless textures) for Kepler GPUs (Geforce 6xx and above).
This is used for all 2D/3D textures, data still uses arrays as before.

User benefits:
* No more limits of image textures on Kepler.
 We had 5 float4 and 145 byte4 slots there before, now we have 1024 float4 and 1024 byte4.
 This can be extended further if we need to (just change the define).

* Single channel textures slots (byte and float) are now supported on Kepler as well (1024 slots for each type).

ToDo / Issues:
* 3D textures don't work yet, at least don't show up during render. I have no idea whats wrong yet.
* Dynamically allocate bindless_mapping array?

I hope Fermi still works fine, but that should be tested on a Fermi card before pushing to master.

Part of my GSoC 2016.

Reviewers: sergey, #cycles, brecht

Subscribers: swerner, jtheninja, brecht, sergey

Differential Revision: https://developer.blender.org/D1999
intern/cycles/device/device.h
intern/cycles/device/device_cuda.cpp
intern/cycles/device/device_multi.cpp
intern/cycles/kernel/geom/geom_volume.h
intern/cycles/kernel/kernel_compat_cuda.h
intern/cycles/kernel/kernel_textures.h
intern/cycles/kernel/svm/svm_image.h
intern/cycles/kernel/svm/svm_voxel.h
intern/cycles/render/image.cpp
intern/cycles/util/util_texture.h