diff options
author | Thomas Dinges <blender@dingto.org> | 2016-05-19 13:47:41 +0300 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2016-05-19 14:14:37 +0300 |
commit | c9f1ed1e4c22728b1f711656ab4de56c11c65e35 (patch) | |
tree | d64b736497f386827ef327d8b35fd5d9ce91588a /intern/cycles/kernel/kernel_textures.h | |
parent | 03f846ea12ba38d4686edfeef01a571329bd9385 (diff) |
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
Diffstat (limited to 'intern/cycles/kernel/kernel_textures.h')
-rw-r--r-- | intern/cycles/kernel/kernel_textures.h | 68 |
1 files changed, 8 insertions, 60 deletions
diff --git a/intern/cycles/kernel/kernel_textures.h b/intern/cycles/kernel/kernel_textures.h index 62b0a6f2923..245d236ff97 100644 --- a/intern/cycles/kernel/kernel_textures.h +++ b/intern/cycles/kernel/kernel_textures.h @@ -72,6 +72,8 @@ KERNEL_TEX(float, texture_float, __lookup_table) /* sobol */ KERNEL_TEX(uint, texture_uint, __sobol_directions) +#ifdef __KERNEL_CUDA__ +# if __CUDA_ARCH__ < 300 /* full-float image */ KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float4_000) KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float4_001) @@ -174,66 +176,12 @@ KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_089) KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_090) KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_091) KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_092) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_093) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_094) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_095) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_096) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_097) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_098) - -/* Kepler and above */ -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_099) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_100) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_101) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_102) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_103) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_104) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_105) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_106) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_107) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_108) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_109) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_110) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_111) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_112) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_113) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_114) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_115) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_116) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_117) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_118) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_119) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_120) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_121) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_122) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_123) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_124) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_125) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_126) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_127) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_128) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_129) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_130) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_131) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_132) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_133) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_134) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_135) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_136) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_137) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_138) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_139) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_140) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_141) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_142) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_143) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_144) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_145) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_146) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_147) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_148) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_149) -KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_byte4_150) + +# else +/* bindless textures */ +KERNEL_TEX(uint, texture_uint, __bindless_mapping) +# endif +#endif /* packed image (opencl) */ KERNEL_TEX(uchar4, texture_uchar4, __tex_image_byte4_packed) |