Blender V4.5
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 ccl_private ShaderData *sd,
16 ccl_private float *stack,
17 const uint type,
18 const uint inputs_stack_offsets,
19 const uint result_stack_offset)
20{
21 uint vector_stack_offset;
22 uint location_stack_offset;
23 uint rotation_stack_offset;
24 uint scale_stack_offset;
25 svm_unpack_node_uchar4(inputs_stack_offsets,
26 &vector_stack_offset,
27 &location_stack_offset,
28 &rotation_stack_offset,
29 &scale_stack_offset);
30
31 const float3 vector = stack_load_float3(stack, vector_stack_offset);
32 const float3 location = stack_load_float3(stack, location_stack_offset);
33 const float3 rotation = stack_load_float3(stack, rotation_stack_offset);
34 const float3 scale = stack_load_float3(stack, scale_stack_offset);
35
36 const float3 result = svm_mapping((NodeMappingType)type, vector, location, rotation, scale);
37 stack_store_float3(stack, result_stack_offset, result);
38}
39
40/* Texture Mapping */
41
43 ccl_private ShaderData *sd,
44 ccl_private float *stack,
45 const uint vec_offset,
46 const uint out_offset,
47 int offset)
48{
49 const float3 v = stack_load_float3(stack, vec_offset);
50
51 Transform tfm;
52 tfm.x = read_node_float(kg, &offset);
53 tfm.y = read_node_float(kg, &offset);
54 tfm.z = read_node_float(kg, &offset);
55
56 const float3 r = transform_point(&tfm, v);
57 stack_store_float3(stack, out_offset, r);
58 return offset;
59}
60
62 ccl_private ShaderData *sd,
63 ccl_private float *stack,
64 const uint vec_offset,
65 const uint out_offset,
66 int offset)
67{
68 const float3 v = stack_load_float3(stack, vec_offset);
69
70 const float3 mn = make_float3(read_node_float(kg, &offset));
71 const float3 mx = make_float3(read_node_float(kg, &offset));
72
73 const float3 r = min(max(mn, v), mx);
74 stack_store_float3(stack, out_offset, r);
75 return offset;
76}
77
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(KernelGlobals kg, ccl_private ShaderData *sd, 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 ShaderData *sd, ccl_private float *stack, const uint vec_offset, const uint out_offset, int offset)
Definition svm/mapping.h:42
ccl_device_noinline int svm_node_min_max(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint vec_offset, const uint out_offset, int offset)
Definition svm/mapping.h:61
max
Definition text_draw.cc:251
ccl_device_inline float3 transform_point(const ccl_private Transform *t, const float3 a)
Definition transform.h:56