qbhf2's picture
added NvidiaWarp and GarmentCode repos
66c9c8a
/** Copyright (c) 2022 NVIDIA CORPORATION. All rights reserved.
* NVIDIA CORPORATION and its licensors retain all intellectual property
* and proprietary rights in and to this software, related documentation
* and any modifications thereto. Any use, reproduction, disclosure or
* distribution of this software and related documentation without an express
* license agreement from NVIDIA CORPORATION is strictly prohibited.
*/
#pragma once
#include "builtin.h"
namespace wp
{
//----------------------------------------------------------------
// Generated adjoint for closest_point_edge_edge.
// See intersect.h for forward mode and comments.
static CUDA_CALLABLE void adj_closest_point_edge_edge(vec3 var_p1,
vec3 var_q1,
vec3 var_p2,
vec3 var_q2,
float32 var_epsilon,
vec3 & adj_p1,
vec3 & adj_q1,
vec3 & adj_p2,
vec3 & adj_q2,
float32 & adj_epsilon,
vec3 & adj_ret)
{
//---------
// primal vars
vec3 var_0;
vec3 var_1;
vec3 var_2;
float32 var_3;
float32 var_4;
float32 var_5;
const float32 var_6 = 0.0;
float32 var_7;
float32 var_8;
vec3 var_9;
float32 var_10;
bool var_11;
bool var_12;
bool var_13;
// vec3 var_14;
bool var_15;
float32 var_16;
float32 var_17;
float32 var_18;
float32 var_19;
float32 var_20;
float32 var_21;
bool var_22;
float32 var_23;
float32 var_24;
const float32 var_25 = 1.0;
float32 var_26;
float32 var_27;
float32 var_28;
float32 var_29;
float32 var_30;
float32 var_31;
float32 var_32;
float32 var_33;
bool var_34;
float32 var_35;
float32 var_36;
float32 var_37;
float32 var_38;
float32 var_39;
float32 var_40;
float32 var_41;
float32 var_42;
float32 var_43;
float32 var_44;
bool var_45;
float32 var_46;
float32 var_47;
float32 var_48;
float32 var_49;
float32 var_50;
bool var_51;
float32 var_52;
float32 var_53;
float32 var_54;
float32 var_55;
float32 var_56;
float32 var_57;
float32 var_58;
float32 var_59;
float32 var_60;
float32 var_61;
float32 var_62;
vec3 var_63;
vec3 var_64;
vec3 var_65;
vec3 var_66;
vec3 var_67;
vec3 var_68;
vec3 var_69;
float32 var_70;
// vec3 var_71;
//---------
// dual vars
vec3 adj_0 = 0;
vec3 adj_1 = 0;
vec3 adj_2 = 0;
float32 adj_3 = 0;
float32 adj_4 = 0;
float32 adj_5 = 0;
float32 adj_6 = 0;
float32 adj_7 = 0;
float32 adj_8 = 0;
vec3 adj_9 = 0;
float32 adj_10 = 0;
//bool adj_11 = 0;
//bool adj_12 = 0;
//bool adj_13 = 0;
vec3 adj_14 = 0;
bool adj_15 = 0;
float32 adj_16 = 0;
float32 adj_17 = 0;
float32 adj_18 = 0;
float32 adj_19 = 0;
float32 adj_20 = 0;
float32 adj_21 = 0;
bool adj_22 = 0;
float32 adj_23 = 0;
float32 adj_24 = 0;
float32 adj_25 = 0;
float32 adj_26 = 0;
float32 adj_27 = 0;
float32 adj_28 = 0;
float32 adj_29 = 0;
float32 adj_30 = 0;
float32 adj_31 = 0;
float32 adj_32 = 0;
float32 adj_33 = 0;
bool adj_34 = 0;
float32 adj_35 = 0;
float32 adj_36 = 0;
float32 adj_37 = 0;
float32 adj_38 = 0;
float32 adj_39 = 0;
float32 adj_40 = 0;
float32 adj_41 = 0;
float32 adj_42 = 0;
float32 adj_43 = 0;
float32 adj_44 = 0;
bool adj_45 = 0;
float32 adj_46 = 0;
float32 adj_47 = 0;
float32 adj_48 = 0;
float32 adj_49 = 0;
float32 adj_50 = 0;
bool adj_51 = 0;
float32 adj_52 = 0;
float32 adj_53 = 0;
float32 adj_54 = 0;
float32 adj_55 = 0;
float32 adj_56 = 0;
float32 adj_57 = 0;
float32 adj_58 = 0;
float32 adj_59 = 0;
float32 adj_60 = 0;
float32 adj_61 = 0;
float32 adj_62 = 0;
vec3 adj_63 = 0;
vec3 adj_64 = 0;
vec3 adj_65 = 0;
vec3 adj_66 = 0;
vec3 adj_67 = 0;
vec3 adj_68 = 0;
vec3 adj_69 = 0;
float32 adj_70 = 0;
vec3 adj_71 = 0;
//---------
// forward
var_0 = wp::sub(var_q1, var_p1);
var_1 = wp::sub(var_q2, var_p2);
var_2 = wp::sub(var_p1, var_p2);
var_3 = wp::dot(var_0, var_0);
var_4 = wp::dot(var_1, var_1);
var_5 = wp::dot(var_1, var_2);
var_7 = wp::cast_float(var_6);
var_8 = wp::cast_float(var_6);
var_9 = wp::sub(var_p2, var_p1);
var_10 = wp::length(var_9);
var_11 = (var_3 <= var_epsilon);
var_12 = (var_4 <= var_epsilon);
var_13 = var_11 && var_12;
if (var_13) {
// var_14 = wp::vec3(var_7, var_8, var_10);
goto label0;
}
var_15 = (var_3 <= var_epsilon);
if (var_15) {
var_16 = wp::cast_float(var_6);
var_17 = wp::div(var_5, var_4);
var_18 = wp::cast_float(var_17);
}
var_19 = wp::select(var_15, var_7, var_16);
var_20 = wp::select(var_15, var_8, var_18);
if (!var_15) {
var_21 = wp::dot(var_0, var_2);
var_22 = (var_4 <= var_epsilon);
if (var_22) {
var_23 = wp::neg(var_21);
var_24 = wp::div(var_23, var_3);
var_26 = wp::clamp(var_24, var_6, var_25);
var_27 = wp::cast_float(var_6);
}
var_28 = wp::select(var_22, var_19, var_26);
var_29 = wp::select(var_22, var_20, var_27);
if (!var_22) {
var_30 = wp::dot(var_0, var_1);
var_31 = wp::mul(var_3, var_4);
var_32 = wp::mul(var_30, var_30);
var_33 = wp::sub(var_31, var_32);
var_34 = (var_33 != var_6);
if (var_34) {
var_35 = wp::mul(var_30, var_5);
var_36 = wp::mul(var_21, var_4);
var_37 = wp::sub(var_35, var_36);
var_38 = wp::div(var_37, var_33);
var_39 = wp::clamp(var_38, var_6, var_25);
}
var_40 = wp::select(var_34, var_28, var_39);
if (!var_34) {
}
var_41 = wp::select(var_34, var_6, var_40);
var_42 = wp::mul(var_30, var_41);
var_43 = wp::add(var_42, var_5);
var_44 = wp::div(var_43, var_4);
var_45 = (var_44 < var_6);
if (var_45) {
var_46 = wp::neg(var_21);
var_47 = wp::div(var_46, var_3);
var_48 = wp::clamp(var_47, var_6, var_25);
}
var_49 = wp::select(var_45, var_41, var_48);
var_50 = wp::select(var_45, var_44, var_6);
if (!var_45) {
var_51 = (var_50 > var_25);
if (var_51) {
var_52 = wp::sub(var_30, var_21);
var_53 = wp::div(var_52, var_3);
var_54 = wp::clamp(var_53, var_6, var_25);
}
var_55 = wp::select(var_51, var_49, var_54);
var_56 = wp::select(var_51, var_50, var_25);
}
var_57 = wp::select(var_45, var_55, var_49);
var_58 = wp::select(var_45, var_56, var_50);
}
var_59 = wp::select(var_22, var_57, var_28);
var_60 = wp::select(var_22, var_58, var_29);
}
var_61 = wp::select(var_15, var_59, var_19);
var_62 = wp::select(var_15, var_60, var_20);
var_63 = wp::sub(var_q1, var_p1);
var_64 = wp::mul(var_63, var_61);
var_65 = wp::add(var_p1, var_64);
var_66 = wp::sub(var_q2, var_p2);
var_67 = wp::mul(var_66, var_62);
var_68 = wp::add(var_p2, var_67);
var_69 = wp::sub(var_68, var_65);
var_70 = wp::length(var_69);
// var_71 = wp::vec3(var_61, var_62, var_70);
goto label1;
//---------
// reverse
label1:;
adj_71 += adj_ret;
wp::adj_vec3(var_61, var_62, var_70, adj_61, adj_62, adj_70, adj_71);
wp::adj_length(var_69, var_70, adj_69, adj_70);
wp::adj_sub(var_68, var_65, adj_68, adj_65, adj_69);
wp::adj_add(var_p2, var_67, adj_p2, adj_67, adj_68);
wp::adj_mul(var_66, var_62, adj_66, adj_62, adj_67);
wp::adj_sub(var_q2, var_p2, adj_q2, adj_p2, adj_66);
wp::adj_add(var_p1, var_64, adj_p1, adj_64, adj_65);
wp::adj_mul(var_63, var_61, adj_63, adj_61, adj_64);
wp::adj_sub(var_q1, var_p1, adj_q1, adj_p1, adj_63);
wp::adj_select(var_15, var_60, var_20, adj_15, adj_60, adj_20, adj_62);
wp::adj_select(var_15, var_59, var_19, adj_15, adj_59, adj_19, adj_61);
if (!var_15) {
wp::adj_select(var_22, var_58, var_29, adj_22, adj_58, adj_29, adj_60);
wp::adj_select(var_22, var_57, var_28, adj_22, adj_57, adj_28, adj_59);
if (!var_22) {
wp::adj_select(var_45, var_56, var_50, adj_45, adj_56, adj_50, adj_58);
wp::adj_select(var_45, var_55, var_49, adj_45, adj_55, adj_49, adj_57);
if (!var_45) {
wp::adj_select(var_51, var_50, var_25, adj_51, adj_50, adj_25, adj_56);
wp::adj_select(var_51, var_49, var_54, adj_51, adj_49, adj_54, adj_55);
if (var_51) {
wp::adj_clamp(var_53, var_6, var_25, adj_53, adj_6, adj_25, adj_54);
wp::adj_div(var_52, var_3, var_53, adj_52, adj_3, adj_53);
wp::adj_sub(var_30, var_21, adj_30, adj_21, adj_52);
}
}
wp::adj_select(var_45, var_44, var_6, adj_45, adj_44, adj_6, adj_50);
wp::adj_select(var_45, var_41, var_48, adj_45, adj_41, adj_48, adj_49);
if (var_45) {
wp::adj_clamp(var_47, var_6, var_25, adj_47, adj_6, adj_25, adj_48);
wp::adj_div(var_46, var_3, var_47, adj_46, adj_3, adj_47);
wp::adj_neg(var_21, adj_21, adj_46);
}
wp::adj_div(var_43, var_4, var_44, adj_43, adj_4, adj_44);
wp::adj_add(var_42, var_5, adj_42, adj_5, adj_43);
wp::adj_mul(var_30, var_41, adj_30, adj_41, adj_42);
wp::adj_select(var_34, var_6, var_40, adj_34, adj_6, adj_40, adj_41);
if (!var_34) {
}
wp::adj_select(var_34, var_28, var_39, adj_34, adj_28, adj_39, adj_40);
if (var_34) {
wp::adj_clamp(var_38, var_6, var_25, adj_38, adj_6, adj_25, adj_39);
wp::adj_div(var_37, var_33, var_38, adj_37, adj_33, adj_38);
wp::adj_sub(var_35, var_36, adj_35, adj_36, adj_37);
wp::adj_mul(var_21, var_4, adj_21, adj_4, adj_36);
wp::adj_mul(var_30, var_5, adj_30, adj_5, adj_35);
}
wp::adj_sub(var_31, var_32, adj_31, adj_32, adj_33);
wp::adj_mul(var_30, var_30, adj_30, adj_30, adj_32);
wp::adj_mul(var_3, var_4, adj_3, adj_4, adj_31);
wp::adj_dot(var_0, var_1, adj_0, adj_1, adj_30);
}
wp::adj_select(var_22, var_20, var_27, adj_22, adj_20, adj_27, adj_29);
wp::adj_select(var_22, var_19, var_26, adj_22, adj_19, adj_26, adj_28);
if (var_22) {
wp::adj_cast_float(var_6, adj_6, adj_27);
wp::adj_clamp(var_24, var_6, var_25, adj_24, adj_6, adj_25, adj_26);
wp::adj_div(var_23, var_3, var_24, adj_23, adj_3, adj_24);
wp::adj_neg(var_21, adj_21, adj_23);
}
wp::adj_dot(var_0, var_2, adj_0, adj_2, adj_21);
}
wp::adj_select(var_15, var_8, var_18, adj_15, adj_8, adj_18, adj_20);
wp::adj_select(var_15, var_7, var_16, adj_15, adj_7, adj_16, adj_19);
if (var_15) {
wp::adj_cast_float(var_17, adj_17, adj_18);
wp::adj_div(var_5, var_4, var_17, adj_5, adj_4, adj_17);
wp::adj_cast_float(var_6, adj_6, adj_16);
}
if (var_13) {
label0:;
adj_14 += adj_ret;
wp::adj_vec3(var_7, var_8, var_10, adj_7, adj_8, adj_10, adj_14);
}
wp::adj_length(var_9, var_10, adj_9, adj_10);
wp::adj_sub(var_p2, var_p1, adj_p2, adj_p1, adj_9);
wp::adj_cast_float(var_6, adj_6, adj_8);
wp::adj_cast_float(var_6, adj_6, adj_7);
wp::adj_dot(var_1, var_2, adj_1, adj_2, adj_5);
wp::adj_dot(var_1, var_1, adj_1, adj_1, adj_4);
wp::adj_dot(var_0, var_0, adj_0, adj_0, adj_3);
wp::adj_sub(var_p1, var_p2, adj_p1, adj_p2, adj_2);
wp::adj_sub(var_q2, var_p2, adj_q2, adj_p2, adj_1);
wp::adj_sub(var_q1, var_p1, adj_q1, adj_p1, adj_0);
return;
}
} // namespace wp