nir/spirv/glsl450: Implement Cross built-in.

This commit is contained in:
Kenneth Graunke 2015-12-28 23:39:14 -08:00
parent 083fd6ec2a
commit 6a0fa2d758
1 changed files with 11 additions and 1 deletions

View File

@ -165,6 +165,17 @@ handle_glsl450_alu(struct vtn_builder *b, enum GLSLstd450 entrypoint,
val->ssa->def = nir_imin(nb, nir_imax(nb, src[0], src[1]), src[2]);
return;
case GLSLstd450Cross: {
unsigned yzx[4] = { 1, 2, 0, 0 };
unsigned zxy[4] = { 2, 0, 1, 0 };
val->ssa->def =
nir_fsub(nb, nir_fmul(nb, nir_swizzle(nb, src[0], yzx, 3, true),
nir_swizzle(nb, src[1], zxy, 3, true)),
nir_fmul(nb, nir_swizzle(nb, src[0], zxy, 3, true),
nir_swizzle(nb, src[1], yzx, 3, true)));
return;
}
case GLSLstd450Asin:
case GLSLstd450Acos:
case GLSLstd450Atan:
@ -179,7 +190,6 @@ handle_glsl450_alu(struct vtn_builder *b, enum GLSLstd450 entrypoint,
case GLSLstd450Frexp:
case GLSLstd450PackDouble2x32:
case GLSLstd450UnpackDouble2x32:
case GLSLstd450Cross:
case GLSLstd450FaceForward:
case GLSLstd450Reflect:
case GLSLstd450Refract: