1 // 2 // Copyright 2013 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // copyvertex.h: Defines vertex buffer copying and conversion functions 8 9 #ifndef LIBANGLE_RENDERER_COPYVERTEX_H_ 10 #define LIBANGLE_RENDERER_COPYVERTEX_H_ 11 12 #include "common/mathutil.h" 13 14 namespace rx 15 { 16 17 using VertexCopyFunction = void (*)(const uint8_t *input, 18 size_t stride, 19 size_t count, 20 uint8_t *output); 21 22 // 'alphaDefaultValueBits' gives the default value for the alpha channel (4th component) 23 template <typename T, 24 size_t inputComponentCount, 25 size_t outputComponentCount, 26 uint32_t alphaDefaultValueBits> 27 void CopyNativeVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 28 29 template <size_t inputComponentCount, size_t outputComponentCount> 30 void Copy8SintTo16SintVertexData(const uint8_t *input, 31 size_t stride, 32 size_t count, 33 uint8_t *output); 34 35 template <size_t componentCount> 36 void Copy8SnormTo16SnormVertexData(const uint8_t *input, 37 size_t stride, 38 size_t count, 39 uint8_t *output); 40 41 template <size_t inputComponentCount, size_t outputComponentCount> 42 void Copy32FixedTo32FVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 43 44 template <typename T, size_t inputComponentCount, size_t outputComponentCount, bool normalized> 45 void CopyTo32FVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output); 46 47 template <bool isSigned, bool normalized, bool toFloat> 48 void CopyXYZ10W2ToXYZW32FVertexData(const uint8_t *input, 49 size_t stride, 50 size_t count, 51 uint8_t *output); 52 53 template <bool isSigned, bool normalized> 54 void CopyXYZ10ToXYZW32FVertexData(const uint8_t *input, 55 size_t stride, 56 size_t count, 57 uint8_t *output); 58 59 template <bool isSigned, bool normalized> 60 void CopyW2XYZ10ToXYZW32FVertexData(const uint8_t *input, 61 size_t stride, 62 size_t count, 63 uint8_t *output); 64 65 } // namespace rx 66 67 #include "copyvertex.inc.h" 68 69 #endif // LIBANGLE_RENDERER_COPYVERTEX_H_ 70