[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46604] trunk/blender/intern/cycles: Cycles: OpenCL image texture support, fix an attribute node issue and refactor
Brecht Van Lommel
brechtvanlommel at pandora.be
Sun May 13 14:32:45 CEST 2012
Revision: 46604
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46604
Author: blendix
Date: 2012-05-13 12:32:44 +0000 (Sun, 13 May 2012)
Log Message:
-----------
Cycles: OpenCL image texture support, fix an attribute node issue and refactor
feature enabling #defines a bit.
Modified Paths:
--------------
trunk/blender/intern/cycles/device/device.h
trunk/blender/intern/cycles/device/device_cpu.cpp
trunk/blender/intern/cycles/device/device_cuda.cpp
trunk/blender/intern/cycles/device/device_multi.cpp
trunk/blender/intern/cycles/device/device_opencl.cpp
trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h
trunk/blender/intern/cycles/kernel/kernel_compat_cuda.h
trunk/blender/intern/cycles/kernel/kernel_light.h
trunk/blender/intern/cycles/kernel/kernel_textures.h
trunk/blender/intern/cycles/kernel/kernel_types.h
trunk/blender/intern/cycles/kernel/svm/svm.h
trunk/blender/intern/cycles/kernel/svm/svm_attribute.h
trunk/blender/intern/cycles/kernel/svm/svm_image.h
trunk/blender/intern/cycles/render/image.cpp
trunk/blender/intern/cycles/render/image.h
trunk/blender/intern/cycles/render/mesh.cpp
trunk/blender/intern/cycles/render/scene.cpp
trunk/blender/intern/cycles/render/scene.h
trunk/blender/intern/cycles/util/util_math.h
Modified: trunk/blender/intern/cycles/device/device.h
===================================================================
--- trunk/blender/intern/cycles/device/device.h 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device.h 2012-05-13 12:32:44 UTC (rev 46604)
@@ -53,6 +53,7 @@
int num;
bool display_device;
bool advanced_shading;
+ bool pack_images;
vector<DeviceInfo> multi_devices;
DeviceInfo()
@@ -62,6 +63,7 @@
num = 0;
display_device = false;
advanced_shading = true;
+ pack_images = false;
}
};
Modified: trunk/blender/intern/cycles/device/device_cpu.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cpu.cpp 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device_cpu.cpp 2012-05-13 12:32:44 UTC (rev 46604)
@@ -260,6 +260,7 @@
info.id = "CPU";
info.num = 0;
info.advanced_shading = true;
+ info.pack_images = false;
devices.insert(devices.begin(), info);
}
Modified: trunk/blender/intern/cycles/device/device_cuda.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cuda.cpp 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device_cuda.cpp 2012-05-13 12:32:44 UTC (rev 46604)
@@ -877,6 +877,7 @@
int major, minor;
cuDeviceComputeCapability(&major, &minor, num);
info.advanced_shading = (major >= 2);
+ info.pack_images = false;
/* if device has a kernel timeout, assume it is used for display */
if(cuDeviceGetAttribute(&attr, CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT, num) == CUDA_SUCCESS && attr == 1) {
Modified: trunk/blender/intern/cycles/device/device_multi.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_multi.cpp 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device_multi.cpp 2012-05-13 12:32:44 UTC (rev 46604)
@@ -304,6 +304,7 @@
int num_added = 0, num_display = 0;
info.advanced_shading = with_advanced_shading;
+ info.pack_images = false;
foreach(DeviceInfo& subinfo, devices) {
if(subinfo.type == type) {
@@ -326,6 +327,7 @@
info.multi_devices.push_back(subinfo);
if(subinfo.display_device)
info.display_device = true;
+ info.pack_images = info.pack_images || subinfo.pack_images;
num_added++;
}
}
Modified: trunk/blender/intern/cycles/device/device_opencl.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_opencl.cpp 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device_opencl.cpp 2012-05-13 12:32:44 UTC (rev 46604)
@@ -212,7 +212,7 @@
{
char version[256];
- int major, minor, req_major = 1, req_minor = 1;
+ int major, minor, req_major = 1, req_minor = 0;
clGetPlatformInfo(cpPlatform, CL_PLATFORM_VERSION, sizeof(version), &version, NULL);
@@ -300,15 +300,15 @@
/* Multi Closure for nVidia cards */
if(platform_name == "NVIDIA CUDA")
- build_options += "-D__KERNEL_SHADING__ -D__MULTI_CLOSURE__ -cl-nv-maxrregcount=24 -cl-nv-verbose ";
+ build_options += "-D__KERNEL_SHADING__ -D__KERNEL_OPENCL_NVIDIA__ -cl-nv-maxrregcount=24 -cl-nv-verbose ";
/* No Float3 for Apple */
else if(platform_name == "Apple")
- build_options += "-D__CL_NO_FLOAT3__ ";
+ build_options += "-D__CL_NO_FLOAT3__ -D__KERNEL_OPENCL_APPLE__ ";
/* Basic shading for AMD cards (non Apple) */
else if(platform_name == "AMD Accelerated Parallel Processing")
- build_options += "-D__KERNEL_SHADING__ -D__CL_NO_FLOAT3__ ";
+ build_options += "-D__CL_NO_FLOAT3__ -D__KERNEL_OPENCL_AMD__ ";
return build_options;
}
@@ -743,6 +743,7 @@
/* we don't know if it's used for display, but assume it is */
info.display_device = true;
info.advanced_shading = false;
+ info.pack_images = true;
devices.push_back(info);
}
Modified: trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h 2012-05-13 12:32:44 UTC (rev 46604)
@@ -146,6 +146,7 @@
typedef texture<uint> texture_uint;
typedef texture<int> texture_int;
typedef texture<uint4> texture_uint4;
+typedef texture<uchar4> texture_uchar4;
typedef texture_image<float4> texture_image_float4;
typedef texture_image<uchar4> texture_image_uchar4;
Modified: trunk/blender/intern/cycles/kernel/kernel_compat_cuda.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_compat_cuda.h 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_compat_cuda.h 2012-05-13 12:32:44 UTC (rev 46604)
@@ -50,6 +50,7 @@
typedef texture<uint, 1> texture_uint;
typedef texture<int, 1> texture_int;
typedef texture<uint4, 1> texture_uint4;
+typedef texture<uchar4, 1> texture_uchar4;
typedef texture<float4, 2> texture_image_float4;
typedef texture<uchar4, 2, cudaReadModeNormalizedFloat> texture_image_uchar4;
Modified: trunk/blender/intern/cycles/kernel/kernel_light.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_light.h 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_light.h 2012-05-13 12:32:44 UTC (rev 46604)
@@ -59,6 +59,7 @@
return axisu*randu + axisv*randv;
}
+#ifdef __BACKGROUND_MIS__
__device float3 background_light_sample(KernelGlobals *kg, float randu, float randv, float *pdf)
{
/* for the following, the CDF values are actually a pair of floats, with the
@@ -165,6 +166,7 @@
return pdf * kernel_data.integrator.pdf_lights;
}
+#endif
__device void regular_light_sample(KernelGlobals *kg, int point,
float randu, float randv, float3 P, LightSample *ls, float *pdf)
Modified: trunk/blender/intern/cycles/kernel/kernel_textures.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_textures.h 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_textures.h 2012-05-13 12:32:44 UTC (rev 46604)
@@ -7,7 +7,6 @@
#define KERNEL_IMAGE_TEX(type, ttype, name)
#endif
-
/* bvh */
KERNEL_TEX(float4, texture_float4, __bvh_nodes)
KERNEL_TEX(float4, texture_float4, __tri_woop)
@@ -151,6 +150,10 @@
KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_098)
KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_099)
+/* packed image (opencl) */
+KERNEL_TEX(uchar4, texture_uchar4, __tex_image_packed)
+KERNEL_TEX(uint4, texture_uint4, __tex_image_packed_info)
+
#undef KERNEL_TEX
#undef KERNEL_IMAGE_TEX
Modified: trunk/blender/intern/cycles/kernel/kernel_types.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_types.h 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_types.h 2012-05-13 12:32:44 UTC (rev 46604)
@@ -49,10 +49,32 @@
#endif
#ifdef __KERNEL_OPENCL__
-//#define __KERNEL_SHADING__
-//#define __KERNEL_ADV_SHADING__
+
+#ifdef __KERNEL_OPENCL_NVIDIA__
+#define __KERNEL_SHADING__
+#define __MULTI_CLOSURE__
#endif
+#ifdef __KERNEL_OPENCL_APPLE__
+//#define __SVM__
+//#define __EMISSION__
+//#define __IMAGE_TEXTURES__
+//#define __HOLDOUT__
+//#define __PROCEDURAL_TEXTURES__
+//#define __EXTRA_NODES__
+#endif
+
+#ifdef __KERNEL_OPENCL_AMD__
+#define __SVM__
+#define __EMISSION__
+#define __IMAGE_TEXTURES__
+#define __HOLDOUT__
+#define __PROCEDURAL_TEXTURES__
+#define __EXTRA_NODES__
+#endif
+
+#endif
+
/* kernel features */
#define __SOBOL__
#define __INSTANCING__
@@ -69,7 +91,9 @@
#ifdef __KERNEL_SHADING__
#define __SVM__
#define __EMISSION__
-#define __TEXTURES__
+#define __PROCEDURAL_TEXTURES__
+#define __IMAGE_TEXTURES__
+#define __EXTRA_NODES__
#define __HOLDOUT__
#endif
@@ -85,7 +109,6 @@
//#define __MULTI_LIGHT__
//#define __OSL__
//#define __SOBOL_FULL_SCREEN__
-//#define __MODIFY_TP__
//#define __QBVH__
/* Shader Evaluation */
Modified: trunk/blender/intern/cycles/kernel/svm/svm.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm.h 2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/svm/svm.h 2012-05-13 12:32:44 UTC (rev 46604)
@@ -216,13 +216,15 @@
case NODE_JUMP:
offset = node.y;
break;
-#ifdef __TEXTURES__
+#ifdef __IMAGE_TEXTURES__
case NODE_TEX_IMAGE:
svm_node_tex_image(kg, sd, stack, node);
break;
case NODE_TEX_ENVIRONMENT:
svm_node_tex_environment(kg, sd, stack, node);
break;
+#endif
+#ifdef __PROCEDURAL_TEXTURES__
case NODE_TEX_SKY:
svm_node_tex_sky(kg, sd, stack, node.y, node.z);
break;
@@ -254,6 +256,7 @@
case NODE_GEOMETRY:
svm_node_geometry(sd, stack, node.y, node.z);
break;
+#ifdef __EXTRA_NODES__
case NODE_GEOMETRY_BUMP_DX:
svm_node_geometry_bump_dx(sd, stack, node.y, node.z);
break;
@@ -263,6 +266,7 @@
case NODE_LIGHT_PATH:
svm_node_light_path(sd, stack, node.y, node.z, path_flag);
break;
+#endif
case NODE_CONVERT:
svm_node_convert(sd, stack, node.y, node.z, node.w);
break;
@@ -272,6 +276,7 @@
case NODE_VALUE_V:
svm_node_value_v(kg, sd, stack, node.y, &offset);
break;
+#ifdef __EXTRA_NODES__
case NODE_INVERT:
svm_node_invert(sd, stack, node.y, node.z, node.w);
break;
@@ -293,21 +298,25 @@
case NODE_HSV:
svm_node_hsv(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
+#endif
case NODE_ATTR:
svm_node_attr(kg, sd, stack, node);
break;
+#ifdef __EXTRA_NODES__
case NODE_ATTR_BUMP_DX:
svm_node_attr_bump_dx(kg, sd, stack, node);
break;
case NODE_ATTR_BUMP_DY:
svm_node_attr_bump_dy(kg, sd, stack, node);
break;
+#endif
case NODE_FRESNEL:
svm_node_fresnel(sd, stack, node.y, node.z, node.w);
break;
case NODE_LAYER_WEIGHT:
svm_node_layer_weight(sd, stack, node);
break;
+#ifdef __EXTRA_NODES__
case NODE_SET_DISPLACEMENT:
svm_node_set_displacement(sd, stack, node.y);
break;
@@ -323,6 +332,7 @@
case NODE_NORMAL:
svm_node_normal(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
+#endif
case NODE_MAPPING:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list