80 int num_corners =
data.y & 0xffff;
82 if (num_corners == 4) {
85 corners[1] =
data.z + 1;
86 corners[2] =
data.z + 2;
87 corners[3] =
data.z + 3;
93 corners[0] =
data.z +
c;
94 corners[1] =
data.z +
mod(
c + 1, num_corners);
96 corners[3] =
data.z +
mod(
c - 1, num_corners);
107 #ifdef __PATCH_EVAL__
112 float2 dpdu = uv[0] - uv[2];
113 float2 dpdv = uv[1] - uv[2];
116 float2 p = dpdu * sd->u + dpdv * sd->v + uv[2];
121 # ifdef __RAY_DIFFERENTIALS__
129 float dudx = sd->du.dx;
130 float dvdx = sd->dv.dx;
132 float dsdx = dsdu * dudx + dsdv * dvdx;
133 float dtdx = dtdu * dudx + dtdv * dvdx;
135 *dx = dads * dsdx + dadt * dtdx;
138 float dudy = sd->du.dy;
139 float dvdy = sd->dv.dy;
141 float dsdy = dsdu * dudy + dsdv * dvdy;
142 float dtdy = dtdu * dudy + dtdv * dvdy;
144 *dy = dads * dsdy + dadt * dtdy;
173 f1 = (f1 + f0) * 0.5f;
174 f3 = (f3 + f0) * 0.5f;
177 float a =
mix(
mix(f0, f1, uv[0].
x),
mix(f3, f2, uv[0].
x), uv[0].
y);
178 float b =
mix(
mix(f0, f1, uv[1].
x),
mix(f3, f2, uv[1].
x), uv[1].
y);
179 float c =
mix(
mix(f0, f1, uv[2].
x),
mix(f3, f2, uv[2].
x), uv[2].
y);
181 #ifdef __RAY_DIFFERENTIALS__
183 *dx = sd->du.dx *
a + sd->dv.dx * b - (sd->du.dx + sd->dv.dx) *
c;
185 *dy = sd->du.dy *
a + sd->dv.dy * b - (sd->du.dy + sd->dv.dy) *
c;
188 return sd->u *
a + sd->v * b + (1.0f - sd->u - sd->v) *
c;
203 f1 = (f1 + f0) * 0.5f;
204 f3 = (f3 + f0) * 0.5f;
207 float a =
mix(
mix(f0, f1, uv[0].
x),
mix(f3, f2, uv[0].
x), uv[0].
y);
208 float b =
mix(
mix(f0, f1, uv[1].
x),
mix(f3, f2, uv[1].
x), uv[1].
y);
209 float c =
mix(
mix(f0, f1, uv[2].
x),
mix(f3, f2, uv[2].
x), uv[2].
y);
211 #ifdef __RAY_DIFFERENTIALS__
213 *dx = sd->du.dx *
a + sd->dv.dx * b - (sd->du.dx + sd->dv.dx) *
c;
215 *dy = sd->du.dy *
a + sd->dv.dy * b - (sd->du.dy + sd->dv.dy) *
c;
218 return sd->u *
a + sd->v * b + (1.0f - sd->u - sd->v) *
c;
246 #ifdef __PATCH_EVAL__
251 float2 dpdu = uv[0] - uv[2];
252 float2 dpdv = uv[1] - uv[2];
255 float2 p = dpdu * sd->u + dpdv * sd->v + uv[2];
261 # ifdef __RAY_DIFFERENTIALS__
269 float dudx = sd->du.dx;
270 float dvdx = sd->dv.dx;
272 float dsdx = dsdu * dudx + dsdv * dvdx;
273 float dtdx = dtdu * dudx + dtdv * dvdx;
275 *dx = dads * dsdx + dadt * dtdx;
278 float dudy = sd->du.dy;
279 float dvdy = sd->dv.dy;
281 float dsdy = dsdu * dudy + dsdv * dvdy;
282 float dtdy = dtdu * dudy + dtdv * dvdy;
284 *dy = dads * dsdy + dadt * dtdy;
314 f1 = (f1 + f0) * 0.5f;
315 f3 = (f3 + f0) * 0.5f;
322 #ifdef __RAY_DIFFERENTIALS__
324 *dx = sd->du.dx *
a + sd->dv.dx * b - (sd->du.dx + sd->dv.dx) *
c;
326 *dy = sd->du.dy *
a + sd->dv.dy * b - (sd->du.dy + sd->dv.dy) *
c;
329 return sd->u *
a + sd->v * b + (1.0f - sd->u - sd->v) *
c;
346 f1 = (f1 + f0) * 0.5f;
347 f3 = (f3 + f0) * 0.5f;
354 #ifdef __RAY_DIFFERENTIALS__
356 *dx = sd->du.dx *
a + sd->dv.dx * b - (sd->du.dx + sd->dv.dx) *
c;
358 *dy = sd->du.dy *
a + sd->dv.dy * b - (sd->du.dy + sd->dv.dy) *
c;
361 return sd->u *
a + sd->v * b + (1.0f - sd->u - sd->v) *
c;
389 #ifdef __PATCH_EVAL__
394 float2 dpdu = uv[0] - uv[2];
395 float2 dpdv = uv[1] - uv[2];
398 float2 p = dpdu * sd->u + dpdv * sd->v + uv[2];
403 # ifdef __RAY_DIFFERENTIALS__
411 float dudx = sd->du.dx;
412 float dvdx = sd->dv.dx;
414 float dsdx = dsdu * dudx + dsdv * dvdx;
415 float dtdx = dtdu * dudx + dtdv * dvdx;
417 *dx = dads * dsdx + dadt * dtdx;
420 float dudy = sd->du.dy;
421 float dvdy = sd->dv.dy;
423 float dsdy = dsdu * dudy + dsdv * dvdy;
424 float dtdy = dtdu * dudy + dtdv * dvdy;
426 *dy = dads * dsdy + dadt * dtdy;
456 f1 = (f1 + f0) * 0.5f;
457 f3 = (f3 + f0) * 0.5f;
464 #ifdef __RAY_DIFFERENTIALS__
466 *dx = sd->du.dx *
a + sd->dv.dx * b - (sd->du.dx + sd->dv.dx) *
c;
468 *dy = sd->du.dy *
a + sd->dv.dy * b - (sd->du.dy + sd->dv.dy) *
c;
471 return sd->u *
a + sd->v * b + (1.0f - sd->u - sd->v) *
c;
488 f1 = (f1 + f0) * 0.5f;
489 f3 = (f3 + f0) * 0.5f;
496 #ifdef __RAY_DIFFERENTIALS__
498 *dx = sd->du.dx *
a + sd->dv.dx * b - (sd->du.dx + sd->dv.dx) *
c;
500 *dy = sd->du.dy *
a + sd->dv.dy * b - (sd->du.dy + sd->dv.dy) *
c;
503 return sd->u *
a + sd->v * b + (1.0f - sd->u - sd->v) *
c;
531 #ifdef __PATCH_EVAL__
536 float2 dpdu = uv[0] - uv[2];
537 float2 dpdv = uv[1] - uv[2];
540 float2 p = dpdu * sd->u + dpdv * sd->v + uv[2];
542 float4
a, dads, dadt;
550 # ifdef __RAY_DIFFERENTIALS__
558 float dudx = sd->du.dx;
559 float dvdx = sd->dv.dx;
561 float dsdx = dsdu * dudx + dsdv * dvdx;
562 float dtdx = dtdu * dudx + dtdv * dvdx;
564 *dx = dads * dsdx + dadt * dtdx;
567 float dudy = sd->du.dy;
568 float dvdy = sd->dv.dy;
570 float dsdy = dsdu * dudy + dsdv * dvdy;
571 float dtdy = dtdu * dudy + dtdv * dvdy;
573 *dy = dads * dsdy + dadt * dtdy;
603 f1 = (f1 + f0) * 0.5f;
604 f3 = (f3 + f0) * 0.5f;
607 float4
a =
mix(
mix(f0, f1, uv[0].
x),
mix(f3, f2, uv[0].
x), uv[0].
y);
608 float4 b =
mix(
mix(f0, f1, uv[1].
x),
mix(f3, f2, uv[1].
x), uv[1].
y);
609 float4
c =
mix(
mix(f0, f1, uv[2].
x),
mix(f3, f2, uv[2].
x), uv[2].
y);
611 #ifdef __RAY_DIFFERENTIALS__
613 *dx = sd->du.dx *
a + sd->dv.dx * b - (sd->du.dx + sd->dv.dx) *
c;
615 *dy = sd->du.dy *
a + sd->dv.dy * b - (sd->du.dy + sd->dv.dy) *
c;
618 return sd->u *
a + sd->v * b + (1.0f - sd->u - sd->v) *
c;
627 float4 f0, f1, f2, f3;
647 f1 = (f1 + f0) * 0.5f;
648 f3 = (f3 + f0) * 0.5f;
651 float4
a =
mix(
mix(f0, f1, uv[0].
x),
mix(f3, f2, uv[0].
x), uv[0].
y);
652 float4 b =
mix(
mix(f0, f1, uv[1].
x),
mix(f3, f2, uv[1].
x), uv[1].
y);
653 float4
c =
mix(
mix(f0, f1, uv[2].
x),
mix(f3, f2, uv[2].
x), uv[2].
y);
655 #ifdef __RAY_DIFFERENTIALS__
657 *dx = sd->du.dx *
a + sd->dv.dx * b - (sd->du.dx + sd->dv.dx) *
c;
659 *dy = sd->du.dy *
a + sd->dv.dy * b - (sd->du.dy + sd->dv.dy) *
c;
662 return sd->u *
a + sd->v * b + (1.0f - sd->u - sd->v) *
c;
_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
ccl_device float patch_eval_float(KernelGlobals *kg, const ShaderData *sd, int offset, int patch, float u, float v, int channel, float *du, float *dv)
ccl_device float4 patch_eval_uchar4(KernelGlobals *kg, const ShaderData *sd, int offset, int patch, float u, float v, int channel, float4 *du, float4 *dv)
ccl_device float4 patch_eval_float4(KernelGlobals *kg, const ShaderData *sd, int offset, int patch, float u, float v, int channel, float4 *du, float4 *dv)
ccl_device float3 patch_eval_float3(KernelGlobals *kg, const ShaderData *sd, int offset, int patch, float u, float v, int channel, float3 *du, float3 *dv)
ccl_device float2 patch_eval_float2(KernelGlobals *kg, const ShaderData *sd, int offset, int patch, float u, float v, int channel, float2 *du, float2 *dv)
ccl_device_inline void subd_triangle_patch_uv(KernelGlobals *kg, const ShaderData *sd, float2 uv[3])
ccl_device_noinline float2 subd_triangle_attribute_float2(KernelGlobals *kg, const ShaderData *sd, const AttributeDescriptor desc, float2 *dx, float2 *dy)
CCL_NAMESPACE_BEGIN ccl_device_inline uint subd_triangle_patch(KernelGlobals *kg, const ShaderData *sd)
ccl_device_inline void subd_triangle_patch_corners(KernelGlobals *kg, int patch, int corners[4])
ccl_device_inline uint subd_triangle_patch_face(KernelGlobals *kg, int patch)
ccl_device_noinline float subd_triangle_attribute_float(KernelGlobals *kg, const ShaderData *sd, const AttributeDescriptor desc, float *dx, float *dy)
ccl_device_noinline float3 subd_triangle_attribute_float3(KernelGlobals *kg, const ShaderData *sd, const AttributeDescriptor desc, float3 *dx, float3 *dy)
ccl_device_inline uint4 subd_triangle_patch_indices(KernelGlobals *kg, int patch)
ccl_device_noinline float4 subd_triangle_attribute_float4(KernelGlobals *kg, const ShaderData *sd, const AttributeDescriptor desc, float4 *dx, float4 *dy)
ccl_device_inline uint subd_triangle_patch_num_corners(KernelGlobals *kg, int patch)
#define kernel_tex_fetch(tex, index)
#define ccl_device_inline
#define ccl_device_noinline
#define CCL_NAMESPACE_END
#define make_float2(x, y)
#define make_float4(x, y, z, w)
#define make_float3(x, y, z)
@ ATTR_ELEMENT_CORNER_BYTE
@ ATTR_ELEMENT_VERTEX_MOTION
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)
ccl_device_inline float3 float4_to_float3(const float4 a)