Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_geometry.h
| Show All 12 Lines | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| /* Geometry Node */ | /* Geometry Node */ | ||||
| ccl_device_inline void svm_node_geometry( | ccl_device_noinline void svm_node_geometry( | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | const KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | ||||
| { | { | ||||
| float3 data; | float3 data; | ||||
| switch (type) { | switch (type) { | ||||
| case NODE_GEOM_P: | case NODE_GEOM_P: | ||||
| data = sd->P; | data = sd->P; | ||||
| break; | break; | ||||
| case NODE_GEOM_N: | case NODE_GEOM_N: | ||||
| Show All 15 Lines | case NODE_GEOM_uv: | ||||
| break; | break; | ||||
| default: | default: | ||||
| data = make_float3(0.0f, 0.0f, 0.0f); | data = make_float3(0.0f, 0.0f, 0.0f); | ||||
| } | } | ||||
| stack_store_float3(stack, out_offset, data); | stack_store_float3(stack, out_offset, data); | ||||
| } | } | ||||
| ccl_device void svm_node_geometry_bump_dx( | ccl_device_noinline void svm_node_geometry_bump_dx( | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | const KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | ||||
| { | { | ||||
| #ifdef __RAY_DIFFERENTIALS__ | #ifdef __RAY_DIFFERENTIALS__ | ||||
| float3 data; | float3 data; | ||||
| switch (type) { | switch (type) { | ||||
| case NODE_GEOM_P: | case NODE_GEOM_P: | ||||
| data = sd->P + sd->dP.dx; | data = sd->P + sd->dP.dx; | ||||
| break; | break; | ||||
| case NODE_GEOM_uv: | case NODE_GEOM_uv: | ||||
| data = make_float3(sd->u + sd->du.dx, sd->v + sd->dv.dx, 0.0f); | data = make_float3(sd->u + sd->du.dx, sd->v + sd->dv.dx, 0.0f); | ||||
| break; | break; | ||||
| default: | default: | ||||
| svm_node_geometry(kg, sd, stack, type, out_offset); | svm_node_geometry(kg, sd, stack, type, out_offset); | ||||
| return; | return; | ||||
| } | } | ||||
| stack_store_float3(stack, out_offset, data); | stack_store_float3(stack, out_offset, data); | ||||
| #else | #else | ||||
| svm_node_geometry(kg, sd, stack, type, out_offset); | svm_node_geometry(kg, sd, stack, type, out_offset); | ||||
| #endif | #endif | ||||
| } | } | ||||
| ccl_device void svm_node_geometry_bump_dy( | ccl_device_noinline void svm_node_geometry_bump_dy( | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | const KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | ||||
| { | { | ||||
| #ifdef __RAY_DIFFERENTIALS__ | #ifdef __RAY_DIFFERENTIALS__ | ||||
| float3 data; | float3 data; | ||||
| switch (type) { | switch (type) { | ||||
| case NODE_GEOM_P: | case NODE_GEOM_P: | ||||
| data = sd->P + sd->dP.dy; | data = sd->P + sd->dP.dy; | ||||
| break; | break; | ||||
| case NODE_GEOM_uv: | case NODE_GEOM_uv: | ||||
| data = make_float3(sd->u + sd->du.dy, sd->v + sd->dv.dy, 0.0f); | data = make_float3(sd->u + sd->du.dy, sd->v + sd->dv.dy, 0.0f); | ||||
| break; | break; | ||||
| default: | default: | ||||
| svm_node_geometry(kg, sd, stack, type, out_offset); | svm_node_geometry(kg, sd, stack, type, out_offset); | ||||
| return; | return; | ||||
| } | } | ||||
| stack_store_float3(stack, out_offset, data); | stack_store_float3(stack, out_offset, data); | ||||
| #else | #else | ||||
| svm_node_geometry(kg, sd, stack, type, out_offset); | svm_node_geometry(kg, sd, stack, type, out_offset); | ||||
| #endif | #endif | ||||
| } | } | ||||
| /* Object Info */ | /* Object Info */ | ||||
| ccl_device void svm_node_object_info( | ccl_device_noinline void svm_node_object_info( | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | const KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | ||||
| { | { | ||||
| float data; | float data; | ||||
| switch (type) { | switch (type) { | ||||
| case NODE_INFO_OB_LOCATION: { | case NODE_INFO_OB_LOCATION: { | ||||
| stack_store_float3(stack, out_offset, object_location(kg, sd)); | stack_store_float3(stack, out_offset, object_location(kg, sd)); | ||||
| return; | return; | ||||
| } | } | ||||
| Show All 21 Lines | default: | ||||
| break; | break; | ||||
| } | } | ||||
| stack_store_float(stack, out_offset, data); | stack_store_float(stack, out_offset, data); | ||||
| } | } | ||||
| /* Particle Info */ | /* Particle Info */ | ||||
| ccl_device void svm_node_particle_info( | ccl_device_noinline void svm_node_particle_info( | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | const KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | ||||
| { | { | ||||
| switch (type) { | switch (type) { | ||||
| case NODE_INFO_PAR_INDEX: { | case NODE_INFO_PAR_INDEX: { | ||||
| int particle_id = object_particle_id(kg, sd->object); | int particle_id = object_particle_id(kg, sd->object); | ||||
| stack_store_float(stack, out_offset, particle_index(kg, particle_id)); | stack_store_float(stack, out_offset, particle_index(kg, particle_id)); | ||||
| break; | break; | ||||
| } | } | ||||
| case NODE_INFO_PAR_RANDOM: { | case NODE_INFO_PAR_RANDOM: { | ||||
| ▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | #endif | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| #ifdef __HAIR__ | #ifdef __HAIR__ | ||||
| /* Hair Info */ | /* Hair Info */ | ||||
| ccl_device void svm_node_hair_info( | ccl_device_noinline void svm_node_hair_info( | ||||
| KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | const KernelGlobals *kg, ShaderData *sd, float *stack, uint type, uint out_offset) | ||||
| { | { | ||||
| float data; | float data; | ||||
| float3 data3; | float3 data3; | ||||
| switch (type) { | switch (type) { | ||||
| case NODE_INFO_CURVE_IS_STRAND: { | case NODE_INFO_CURVE_IS_STRAND: { | ||||
| data = (sd->type & PRIMITIVE_ALL_CURVE) != 0; | data = (sd->type & PRIMITIVE_ALL_CURVE) != 0; | ||||
| stack_store_float(stack, out_offset, data); | stack_store_float(stack, out_offset, data); | ||||
| Show All 28 Lines | |||||