Blender  V3.3
sepcomb_vector.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
4 #pragma once
5 
7 
8 /* Vector combine / separate, used for the RGB and XYZ nodes */
9 
11  ccl_private float *stack,
12  uint in_offset,
13  uint vector_index,
14  uint out_offset)
15 {
16  float vector = stack_load_float(stack, in_offset);
17 
18  if (stack_valid(out_offset))
19  stack_store_float(stack, out_offset + vector_index, vector);
20 }
21 
23  ccl_private float *stack,
24  uint ivector_offset,
25  uint vector_index,
26  uint out_offset)
27 {
28  float3 vector = stack_load_float3(stack, ivector_offset);
29 
30  if (stack_valid(out_offset)) {
31  if (vector_index == 0)
32  stack_store_float(stack, out_offset, vector.x);
33  else if (vector_index == 1)
34  stack_store_float(stack, out_offset, vector.y);
35  else
36  stack_store_float(stack, out_offset, vector.z);
37  }
38 }
39 
unsigned int uint
Definition: BLI_sys_types.h:67
#define ccl_device
Definition: cuda/compat.h:32
#define ccl_private
Definition: cuda/compat.h:48
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(ccl_private float *stack, uint a)
ccl_device_inline void stack_store_float(ccl_private float *stack, uint a, float f)
ccl_device_inline float stack_load_float(ccl_private float *stack, uint a)
ccl_device_inline bool stack_valid(uint a)
ShaderData
Definition: kernel/types.h:925
CCL_NAMESPACE_BEGIN ccl_device void svm_node_combine_vector(ccl_private ShaderData *sd, ccl_private float *stack, uint in_offset, uint vector_index, uint out_offset)
ccl_device void svm_node_separate_vector(ccl_private ShaderData *sd, ccl_private float *stack, uint ivector_offset, uint vector_index, uint out_offset)