/* * Copyright (c) 2026 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Radoslaw Kujawa. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef RLVEC_H #define RLVEC_H #include typedef void rlvec_xform_points3_fn(float *to, const float m[16], const float *from, int from_stride, int count); typedef uint32_t rlvec_outcode5_fn(uint8_t *oc, uint32_t *and_out, const float *clip, int count); typedef void rlvec_project_fn(float *out9, const float *clip, const float *attr, const float k[8], int count); typedef uint32_t *rlvec_emit_tris_fn(uint32_t *dst, const float *verts9, const uint8_t *idx, int ntris, uint32_t hdr); struct rlvec_ops { rlvec_xform_points3_fn *xform_points3; rlvec_outcode5_fn *outcode5; rlvec_project_fn *project; rlvec_emit_tris_fn *emit_tris; }; extern struct rlvec_ops rlvec; /* active table */ extern const struct rlvec_ops rlvec_c; /* portable reference */ #ifdef RLVEC_PPC extern const struct rlvec_ops rlvec_ppc; /* rlvec_ppc.S */ #endif void rlvec_init(void); #endif /* RLVEC_H */