Blender V4.3
svm/mapping.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
8
10
11/* Mapping Node */
12
15 ccl_private float *stack,
16 uint type,
17 uint inputs_stack_offsets,
18 uint result_stack_offset)
19{
20 uint vector_stack_offset, location_stack_offset, rotation_stack_offset, scale_stack_offset;
21 svm_unpack_node_uchar4(inputs_stack_offsets,
22 &vector_stack_offset,
23 &location_stack_offset,
24 &rotation_stack_offset,
25 &scale_stack_offset);
26
27 float3 vector = stack_load_float3(stack, vector_stack_offset);
28 float3 location = stack_load_float3(stack, location_stack_offset);
29 float3 rotation = stack_load_float3(stack, rotation_stack_offset);
30 float3 scale = stack_load_float3(stack, scale_stack_offset);
31
32 float3 result = svm_mapping((NodeMappingType)type, vector, location, rotation, scale);
33 stack_store_float3(stack, result_stack_offset, result);
34}
35
36/* Texture Mapping */
37
40 ccl_private float *stack,
41 uint vec_offset,
42 uint out_offset,
43 int offset)
44{
45 float3 v = stack_load_float3(stack, vec_offset);
46
47 Transform tfm;
48 tfm.x = read_node_float(kg, &offset);
49 tfm.y = read_node_float(kg, &offset);
50 tfm.z = read_node_float(kg, &offset);
51
52 float3 r = transform_point(&tfm, v);
53 stack_store_float3(stack, out_offset, r);
54 return offset;
55}
56
59 ccl_private float *stack,
60 uint vec_offset,
61 uint out_offset,
62 int offset)
63{
64 float3 v = stack_load_float3(stack, vec_offset);
65
66 float3 mn = float4_to_float3(read_node_float(kg, &offset));
67 float3 mx = float4_to_float3(read_node_float(kg, &offset));
68
69 float3 r = min(max(mn, v), mx);
70 stack_store_float3(stack, out_offset, r);
71 return offset;
72}
73
unsigned int uint
ATTR_WARN_UNUSED_RESULT const BMVert * v
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define ccl_private
#define ccl_device_noinline
#define CCL_NAMESPACE_END
ccl_device_inline float4 read_node_float(KernelGlobals kg, ccl_private int *offset)
ccl_device_inline void stack_store_float3(ccl_private float *stack, uint a, float3 f)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(ccl_private float *stack, uint a)
ccl_device_forceinline void svm_unpack_node_uchar4(uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z, ccl_private uint *w)
NodeMappingType
ShaderData
CCL_NAMESPACE_BEGIN ccl_device float3 svm_mapping(NodeMappingType type, float3 vector, float3 location, float3 rotation, float3 scale)
#define min(a, b)
Definition sort.c:32
float4 y
Definition transform.h:24
float4 x
Definition transform.h:24
float4 z
Definition transform.h:24
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_mapping(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, uint type, uint inputs_stack_offsets, uint result_stack_offset)
Definition svm/mapping.h:13
ccl_device_noinline int svm_node_texture_mapping(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, uint vec_offset, uint out_offset, int offset)
Definition svm/mapping.h:38
ccl_device_noinline int svm_node_min_max(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, uint vec_offset, uint out_offset, int offset)
Definition svm/mapping.h:57
CCL_NAMESPACE_END CCL_NAMESPACE_BEGIN ccl_device_inline float3 transform_point(ccl_private const Transform *t, const float3 a)
Definition transform.h:63
float max
ccl_device_inline float3 float4_to_float3(const float4 a)
Definition util/math.h:535