Welcome to mirror list, hosted at ThFree Co, Russian Federation.

sepcomb_color.h « svm « kernel « cycles « intern - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d186e7f163bfe888f08c3d0441ac9042261de4d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* SPDX-License-Identifier: Apache-2.0
 * Copyright 2011-2022 Blender Foundation */

#pragma once

CCL_NAMESPACE_BEGIN

ccl_device_noinline void svm_node_combine_color(KernelGlobals kg,
                                                ccl_private ShaderData *sd,
                                                ccl_private float *stack,
                                                uint color_type,
                                                uint inputs_stack_offsets,
                                                uint result_stack_offset)
{
  uint red_stack_offset, green_stack_offset, blue_stack_offset;
  svm_unpack_node_uchar3(
      inputs_stack_offsets, &red_stack_offset, &green_stack_offset, &blue_stack_offset);

  float r = stack_load_float(stack, red_stack_offset);
  float g = stack_load_float(stack, green_stack_offset);
  float b = stack_load_float(stack, blue_stack_offset);

  /* Combine, and convert back to RGB */
  float3 color = svm_combine_color((NodeCombSepColorType)color_type, make_float3(r, g, b));

  if (stack_valid(result_stack_offset))
    stack_store_float3(stack, result_stack_offset, color);
}

ccl_device_noinline void svm_node_separate_color(KernelGlobals kg,
                                                 ccl_private ShaderData *sd,
                                                 ccl_private float *stack,
                                                 uint color_type,
                                                 uint input_stack_offset,
                                                 uint results_stack_offsets)
{
  float3 color = stack_load_float3(stack, input_stack_offset);

  /* Convert color space */
  color = svm_separate_color((NodeCombSepColorType)color_type, color);

  uint red_stack_offset, green_stack_offset, blue_stack_offset;
  svm_unpack_node_uchar3(
      results_stack_offsets, &red_stack_offset, &green_stack_offset, &blue_stack_offset);

  if (stack_valid(red_stack_offset))
    stack_store_float(stack, red_stack_offset, color.x);
  if (stack_valid(green_stack_offset))
    stack_store_float(stack, green_stack_offset, color.y);
  if (stack_valid(blue_stack_offset))
    stack_store_float(stack, blue_stack_offset, color.z);
}

CCL_NAMESPACE_END