Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/svm/svm_sepcomb_hsv.h
| Show All 10 Lines | |||||
| * distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | ||||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| ccl_device void svm_node_combine_hsv(KernelGlobals *kg, | ccl_device_noinline int svm_node_combine_hsv(const KernelGlobals *kg, | ||||
| ShaderData *sd, | ShaderData *sd, | ||||
| float *stack, | float *stack, | ||||
| uint hue_in, | uint hue_in, | ||||
| uint saturation_in, | uint saturation_in, | ||||
| uint value_in, | uint value_in, | ||||
| int *offset) | int offset) | ||||
| { | { | ||||
| uint4 node1 = read_node(kg, offset); | uint4 node1 = read_node(kg, &offset); | ||||
| uint color_out = node1.y; | uint color_out = node1.y; | ||||
| float hue = stack_load_float(stack, hue_in); | float hue = stack_load_float(stack, hue_in); | ||||
| float saturation = stack_load_float(stack, saturation_in); | float saturation = stack_load_float(stack, saturation_in); | ||||
| float value = stack_load_float(stack, value_in); | float value = stack_load_float(stack, value_in); | ||||
| /* Combine, and convert back to RGB */ | /* Combine, and convert back to RGB */ | ||||
| float3 color = hsv_to_rgb(make_float3(hue, saturation, value)); | float3 color = hsv_to_rgb(make_float3(hue, saturation, value)); | ||||
| if (stack_valid(color_out)) | if (stack_valid(color_out)) | ||||
| stack_store_float3(stack, color_out, color); | stack_store_float3(stack, color_out, color); | ||||
| return offset; | |||||
| } | } | ||||
| ccl_device void svm_node_separate_hsv(KernelGlobals *kg, | ccl_device_noinline int svm_node_separate_hsv(const KernelGlobals *kg, | ||||
| ShaderData *sd, | ShaderData *sd, | ||||
| float *stack, | float *stack, | ||||
| uint color_in, | uint color_in, | ||||
| uint hue_out, | uint hue_out, | ||||
| uint saturation_out, | uint saturation_out, | ||||
| int *offset) | int offset) | ||||
| { | { | ||||
| uint4 node1 = read_node(kg, offset); | uint4 node1 = read_node(kg, &offset); | ||||
| uint value_out = node1.y; | uint value_out = node1.y; | ||||
| float3 color = stack_load_float3(stack, color_in); | float3 color = stack_load_float3(stack, color_in); | ||||
| /* Convert to HSV */ | /* Convert to HSV */ | ||||
| color = rgb_to_hsv(color); | color = rgb_to_hsv(color); | ||||
| if (stack_valid(hue_out)) | if (stack_valid(hue_out)) | ||||
| stack_store_float(stack, hue_out, color.x); | stack_store_float(stack, hue_out, color.x); | ||||
| if (stack_valid(saturation_out)) | if (stack_valid(saturation_out)) | ||||
| stack_store_float(stack, saturation_out, color.y); | stack_store_float(stack, saturation_out, color.y); | ||||
| if (stack_valid(value_out)) | if (stack_valid(value_out)) | ||||
| stack_store_float(stack, value_out, color.z); | stack_store_float(stack, value_out, color.z); | ||||
| return offset; | |||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||