62 int num_corners =
data.y & 0xffff;
64 if (num_corners == 4) {
67 corners[1] =
data.z + 1;
68 corners[2] =
data.z + 2;
69 corners[3] =
data.z + 3;
75 corners[0] =
data.z +
c;
76 corners[1] =
data.z +
mod(
c + 1, num_corners);
78 corners[3] =
data.z +
mod(
c - 1, num_corners);
97 float2 dpdu = uv[1] - uv[0];
98 float2 dpdv = uv[2] - uv[0];
101 float2 p = dpdu * sd->u + dpdv * sd->v + uv[0];
106 # ifdef __RAY_DIFFERENTIALS__
114 float dudx = sd->du.dx;
115 float dvdx = sd->dv.dx;
117 float dsdx = dsdu * dudx + dsdv * dvdx;
118 float dtdx = dtdu * dudx + dtdv * dvdx;
120 *dx = dads * dsdx + dadt * dtdx;
123 float dudy = sd->du.dy;
124 float dvdy = sd->dv.dy;
126 float dsdy = dsdu * dudy + dsdv * dvdy;
127 float dtdy = dtdu * dudy + dtdv * dvdy;
129 *dy = dads * dsdy + dadt * dtdy;
158 f1 = (f1 + f0) * 0.5f;
159 f3 = (f3 + f0) * 0.5f;
162 float a =
mix(
mix(f0, f1, uv[0].
x),
mix(f3, f2, uv[0].
x), uv[0].
y);
163 float b =
mix(
mix(f0, f1, uv[1].
x),
mix(f3, f2, uv[1].
x), uv[1].
y);
164 float c =
mix(
mix(f0, f1, uv[2].
x),
mix(f3, f2, uv[2].
x), uv[2].
y);
166 #ifdef __RAY_DIFFERENTIALS__
168 *dx = sd->du.dx *
b + sd->dv.dx *
c - (sd->du.dx + sd->dv.dx) *
a;
170 *dy = sd->du.dy *
b + sd->dv.dy *
c - (sd->du.dy + sd->dv.dy) *
a;
173 return sd->u *
b + sd->v *
c + (1.0f - sd->u - sd->v) *
a;
188 f1 = (f1 + f0) * 0.5f;
189 f3 = (f3 + f0) * 0.5f;
192 float a =
mix(
mix(f0, f1, uv[0].
x),
mix(f3, f2, uv[0].
x), uv[0].
y);
193 float b =
mix(
mix(f0, f1, uv[1].
x),
mix(f3, f2, uv[1].
x), uv[1].
y);
194 float c =
mix(
mix(f0, f1, uv[2].
x),
mix(f3, f2, uv[2].
x), uv[2].
y);
196 #ifdef __RAY_DIFFERENTIALS__
198 *dx = sd->du.dx *
b + sd->dv.dx *
c - (sd->du.dx + sd->dv.dx) *
a;
200 *dy = sd->du.dy *
b + sd->dv.dy *
c - (sd->du.dy + sd->dv.dy) *
a;
203 return sd->u *
b + sd->v *
c + (1.0f - sd->u - sd->v) *
a;
231 #ifdef __PATCH_EVAL__
236 float2 dpdu = uv[1] - uv[0];
237 float2 dpdv = uv[2] - uv[0];
240 float2 p = dpdu * sd->u + dpdv * sd->v + uv[0];
246 # ifdef __RAY_DIFFERENTIALS__
254 float dudx = sd->du.dx;
255 float dvdx = sd->dv.dx;
257 float dsdx = dsdu * dudx + dsdv * dvdx;
258 float dtdx = dtdu * dudx + dtdv * dvdx;
260 *dx = dads * dsdx + dadt * dtdx;
263 float dudy = sd->du.dy;
264 float dvdy = sd->dv.dy;
266 float dsdy = dsdu * dudy + dsdv * dvdy;
267 float dtdy = dtdu * dudy + dtdv * dvdy;
269 *dy = dads * dsdy + dadt * dtdy;
298 f1 = (f1 + f0) * 0.5f;
299 f3 = (f3 + f0) * 0.5f;
306 #ifdef __RAY_DIFFERENTIALS__
308 *dx = sd->du.dx *
b + sd->dv.dx *
c - (sd->du.dx + sd->dv.dx) *
a;
310 *dy = sd->du.dy *
b + sd->dv.dy *
c - (sd->du.dy + sd->dv.dy) *
a;
313 return sd->u *
b + sd->v *
c + (1.0f - sd->u - sd->v) *
a;
330 f1 = (f1 + f0) * 0.5f;
331 f3 = (f3 + f0) * 0.5f;
338 #ifdef __RAY_DIFFERENTIALS__
340 *dx = sd->du.dx *
b + sd->dv.dx *
c - (sd->du.dx + sd->dv.dx) *
a;
342 *dy = sd->du.dy *
b + sd->dv.dy *
c - (sd->du.dy + sd->dv.dy) *
a;
345 return sd->u *
b + sd->v *
c + (1.0f - sd->u - sd->v) *
a;
373 #ifdef __PATCH_EVAL__
378 float2 dpdu = uv[1] - uv[0];
379 float2 dpdv = uv[2] - uv[0];
382 float2 p = dpdu * sd->u + dpdv * sd->v + uv[0];
387 # ifdef __RAY_DIFFERENTIALS__
395 float dudx = sd->du.dx;
396 float dvdx = sd->dv.dx;
398 float dsdx = dsdu * dudx + dsdv * dvdx;
399 float dtdx = dtdu * dudx + dtdv * dvdx;
401 *dx = dads * dsdx + dadt * dtdx;
404 float dudy = sd->du.dy;
405 float dvdy = sd->dv.dy;
407 float dsdy = dsdu * dudy + dsdv * dvdy;
408 float dtdy = dtdu * dudy + dtdv * dvdy;
410 *dy = dads * dsdy + dadt * dtdy;
439 f1 = (f1 + f0) * 0.5f;
440 f3 = (f3 + f0) * 0.5f;
447 #ifdef __RAY_DIFFERENTIALS__
449 *dx = sd->du.dx *
b + sd->dv.dx *
c - (sd->du.dx + sd->dv.dx) *
a;
451 *dy = sd->du.dy *
b + sd->dv.dy *
c - (sd->du.dy + sd->dv.dy) *
a;
454 return sd->u *
b + sd->v *
c + (1.0f - sd->u - sd->v) *
a;
471 f1 = (f1 + f0) * 0.5f;
472 f3 = (f3 + f0) * 0.5f;
479 #ifdef __RAY_DIFFERENTIALS__
481 *dx = sd->du.dx *
b + sd->dv.dx *
c - (sd->du.dx + sd->dv.dx) *
a;
483 *dy = sd->du.dy *
b + sd->dv.dy *
c - (sd->du.dy + sd->dv.dy) *
a;
486 return sd->u *
b + sd->v *
c + (1.0f - sd->u - sd->v) *
a;
514 #ifdef __PATCH_EVAL__
519 float2 dpdu = uv[1] - uv[0];
520 float2 dpdv = uv[2] - uv[0];
523 float2 p = dpdu * sd->u + dpdv * sd->v + uv[0];
533 # ifdef __RAY_DIFFERENTIALS__
541 float dudx = sd->du.dx;
542 float dvdx = sd->dv.dx;
544 float dsdx = dsdu * dudx + dsdv * dvdx;
545 float dtdx = dtdu * dudx + dtdv * dvdx;
547 *dx = dads * dsdx + dadt * dtdx;
550 float dudy = sd->du.dy;
551 float dvdy = sd->dv.dy;
553 float dsdy = dsdu * dudy + dsdv * dvdy;
554 float dtdy = dtdu * dudy + dtdv * dvdy;
556 *dy = dads * dsdy + dadt * dtdy;
585 f1 = (f1 + f0) * 0.5f;
586 f3 = (f3 + f0) * 0.5f;
593 #ifdef __RAY_DIFFERENTIALS__
595 *dx = sd->du.dx *
b + sd->dv.dx *
c - (sd->du.dx + sd->dv.dx) *
a;
597 *dy = sd->du.dy *
b + sd->dv.dy *
c - (sd->du.dy + sd->dv.dy) *
a;
600 return sd->u *
b + sd->v *
c + (1.0f - sd->u - sd->v) *
a;
629 f1 = (f1 + f0) * 0.5f;
630 f3 = (f3 + f0) * 0.5f;
637 #ifdef __RAY_DIFFERENTIALS__
639 *dx = sd->du.dx *
b + sd->dv.dx *
c - (sd->du.dx + sd->dv.dx) *
a;
641 *dy = sd->du.dy *
b + sd->dv.dy *
c - (sd->du.dy + sd->dv.dy) *
a;
644 return sd->u *
b + sd->v *
c + (1.0f - sd->u - sd->v) *
a;
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
ATTR_WARN_UNUSED_RESULT const BMVert * v
#define ccl_device_inline
#define ccl_device_noinline
#define CCL_NAMESPACE_END
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
ccl_gpu_kernel_postfix int ccl_global int * indices
CCL_NAMESPACE_BEGIN ccl_device_inline uint subd_triangle_patch(KernelGlobals kg, ccl_private const ShaderData *sd)
ccl_device float patch_eval_float(KernelGlobals kg, ccl_private const ShaderData *sd, int offset, int patch, float u, float v, int channel, ccl_private float *du, ccl_private float *dv)
ccl_device float2 patch_eval_float2(KernelGlobals kg, ccl_private const ShaderData *sd, int offset, int patch, float u, float v, int channel, ccl_private float2 *du, ccl_private float2 *dv)
ccl_device float3 patch_eval_float3(KernelGlobals kg, ccl_private const ShaderData *sd, int offset, int patch, float u, float v, int channel, ccl_private float3 *du, ccl_private float3 *dv)
ccl_device float4 patch_eval_float4(KernelGlobals kg, ccl_private const ShaderData *sd, int offset, int patch, float u, float v, int channel, ccl_private float4 *du, ccl_private float4 *dv)
ccl_device float4 patch_eval_uchar4(KernelGlobals kg, ccl_private const ShaderData *sd, int offset, int patch, float u, float v, int channel, ccl_private float4 *du, ccl_private float4 *dv)
@ ATTR_ELEMENT_CORNER_BYTE
@ ATTR_ELEMENT_VERTEX_MOTION
ccl_device_inline float4 zero_float4()
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
ccl_device_noinline float3 subd_triangle_attribute_float3(KernelGlobals kg, ccl_private const ShaderData *sd, const AttributeDescriptor desc, ccl_private float3 *dx, ccl_private float3 *dy)
ccl_device_noinline float4 subd_triangle_attribute_float4(KernelGlobals kg, ccl_private const ShaderData *sd, const AttributeDescriptor desc, ccl_private float4 *dx, ccl_private float4 *dy)
ccl_device_inline uint subd_triangle_patch_num_corners(KernelGlobals kg, int patch)
ccl_device_inline uint subd_triangle_patch_face(KernelGlobals kg, int patch)
ccl_device_noinline float subd_triangle_attribute_float(KernelGlobals kg, ccl_private const ShaderData *sd, const AttributeDescriptor desc, ccl_private float *dx, ccl_private float *dy)
ccl_device_inline void subd_triangle_patch_corners(KernelGlobals kg, int patch, int corners[4])
ccl_device_inline uint4 subd_triangle_patch_indices(KernelGlobals kg, int patch)
ccl_device_noinline float2 subd_triangle_attribute_float2(KernelGlobals kg, ccl_private const ShaderData *sd, const AttributeDescriptor desc, ccl_private float2 *dx, ccl_private float2 *dy)
CCL_NAMESPACE_BEGIN ccl_device_inline void subd_triangle_patch_uv(KernelGlobals kg, ccl_private const ShaderData *sd, float2 uv[3])
ccl_device_inline float4 color_uchar4_to_float4(uchar4 c)
ccl_device float4 color_srgb_to_linear_v4(float4 c)
ccl_device_inline int mod(int x, int m)