Blender V4.5
convert.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
7#include "kernel/svm/util.h"
8
10
12
13/* Conversion Nodes */
14
16 ccl_private ShaderData *sd,
17 ccl_private float *stack,
18 const uint type,
19 const uint from,
20 const uint to)
21{
22 switch ((NodeConvert)type) {
23 case NODE_CONVERT_FI: {
24 const float f = stack_load_float(stack, from);
25 stack_store_int(stack, to, float_to_int(f));
26 break;
27 }
28 case NODE_CONVERT_FV: {
29 const float f = stack_load_float(stack, from);
30 stack_store_float3(stack, to, make_float3(f, f, f));
31 break;
32 }
33 case NODE_CONVERT_CF: {
34 const float3 f = stack_load_float3(stack, from);
35 const float g = linear_rgb_to_gray(kg, f);
36 stack_store_float(stack, to, g);
37 break;
38 }
39 case NODE_CONVERT_CI: {
40 const float3 f = stack_load_float3(stack, from);
41 const int i = (int)linear_rgb_to_gray(kg, f);
42 stack_store_int(stack, to, i);
43 break;
44 }
45 case NODE_CONVERT_VF: {
46 const float3 f = stack_load_float3(stack, from);
47 const float g = average(f);
48 stack_store_float(stack, to, g);
49 break;
50 }
51 case NODE_CONVERT_VI: {
52 const float3 f = stack_load_float3(stack, from);
53 const int i = (int)average(f);
54 stack_store_int(stack, to, i);
55 break;
56 }
57 case NODE_CONVERT_IF: {
58 const float f = (float)stack_load_int(stack, from);
59 stack_store_float(stack, to, f);
60 break;
61 }
62 case NODE_CONVERT_IV: {
63 const float f = (float)stack_load_int(stack, from);
64 stack_store_float3(stack, to, make_float3(f, f, f));
65 break;
66 }
67 }
68}
69
unsigned int uint
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_convert(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint type, const uint from, const uint to)
Definition convert.h:15
ccl_device_inline float stack_load_float(const ccl_private float *stack, const uint a)
ccl_device_inline void stack_store_float(ccl_private float *stack, const uint a, const float f)
ccl_device_inline int stack_load_int(const ccl_private float *stack, const uint a)
ccl_device_inline void stack_store_float3(ccl_private float *stack, const uint a, const float3 f)
ccl_device_inline void stack_store_int(ccl_private float *stack, const uint a, const int i)
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)
NodeConvert
@ NODE_CONVERT_IF
@ NODE_CONVERT_CI
@ NODE_CONVERT_CF
@ NODE_CONVERT_VF
@ NODE_CONVERT_VI
@ NODE_CONVERT_FI
@ NODE_CONVERT_IV
@ NODE_CONVERT_FV
ccl_device float linear_rgb_to_gray(KernelGlobals kg, const float3 c)
ccl_device_inline int float_to_int(const float f)
Definition math_base.h:407
ccl_device_inline float average(const float2 a)
i
Definition text_draw.cc:230