Blender V5.0
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#include "kernel/svm/util.h"
9
11
12/* Mapping Node */
13
15 const uint type,
16 const uint inputs_stack_offsets,
17 const uint result_stack_offset)
18{
19 uint vector_stack_offset;
20 uint location_stack_offset;
21 uint rotation_stack_offset;
22 uint scale_stack_offset;
23 svm_unpack_node_uchar4(inputs_stack_offsets,
24 &vector_stack_offset,
25 &location_stack_offset,
26 &rotation_stack_offset,
27 &scale_stack_offset);
28
29 const float3 vector = stack_load_float3(stack, vector_stack_offset);
30 const float3 location = stack_load_float3(stack, location_stack_offset);
31 const float3 rotation = stack_load_float3(stack, rotation_stack_offset);
32 const float3 scale = stack_load_float3(stack, scale_stack_offset);
33
34 const float3 result = svm_mapping((NodeMappingType)type, vector, location, rotation, scale);
35 stack_store_float3(stack, result_stack_offset, result);
36}
37
38/* Texture Mapping */
39
41 ccl_private float *stack,
42 const uint vec_offset,
43 const uint out_offset,
44 int offset)
45{
46 const float3 v = stack_load_float3(stack, vec_offset);
47
48 Transform tfm;
49 tfm.x = read_node_float(kg, &offset);
50 tfm.y = read_node_float(kg, &offset);
51 tfm.z = read_node_float(kg, &offset);
52
53 const float3 r = transform_point(&tfm, v);
54 stack_store_float3(stack, out_offset, r);
55 return offset;
56}
57
59 ccl_private float *stack,
60 const uint vec_offset,
61 const uint out_offset,
62 int offset)
63{
64 const float3 v = stack_load_float3(stack, vec_offset);
65
66 const float3 mn = make_float3(read_node_float(kg, &offset));
67 const float3 mx = make_float3(read_node_float(kg, &offset));
68
69 const 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
ccl_device_inline float4 read_node_float(KernelGlobals kg, ccl_private int *const offset)
ccl_device_inline void stack_store_float3(ccl_private float *stack, const uint a, const float3 f)
ccl_device_forceinline void svm_unpack_node_uchar4(const uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z, ccl_private uint *w)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(const ccl_private float *stack, const uint a)
#define ccl_private
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_noinline
#define CCL_NAMESPACE_END
ccl_device_forceinline float3 make_float3(const float x, const float y, const float z)
NodeMappingType
CCL_NAMESPACE_BEGIN ccl_device float3 svm_mapping(NodeMappingType type, const float3 vector, const float3 location, const float3 rotation, const float3 scale)
#define min(a, b)
Definition sort.cc:36
float4 y
Definition transform.h:23
float4 x
Definition transform.h:23
float4 z
Definition transform.h:23
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_mapping(ccl_private float *stack, const uint type, const uint inputs_stack_offsets, const uint result_stack_offset)
Definition svm/mapping.h:14
ccl_device_noinline int svm_node_texture_mapping(KernelGlobals kg, ccl_private float *stack, const uint vec_offset, const uint out_offset, int offset)
Definition svm/mapping.h:40
ccl_device_noinline int svm_node_min_max(KernelGlobals kg, ccl_private float *stack, const uint vec_offset, const uint out_offset, int offset)
Definition svm/mapping.h:58
max
Definition text_draw.cc:251
ccl_device_inline float3 transform_point(const ccl_private Transform *t, const float3 a)
Definition transform.h:56