Add direct copy when output and input vertex formats are matching.
This commit is contained in:
		| @ -71,6 +71,20 @@ struct alignas(4) rk_output_row { | ||||
|     } | ||||
| }; | ||||
|  | ||||
| template<typename _output, unsigned _cols, bool _signed, bool _normalized> | ||||
| struct alignas(4) rk_output_row<_output, _output, _cols, _signed, _normalized> { | ||||
|     rk_output<_output, _output, _signed, _normalized> output_col[_cols]; | ||||
|  | ||||
|     [[RK_FAST]] | ||||
|     inline void convert( | ||||
|         rk_input_row<_output, _cols> const & __restrict src) { | ||||
|         static_assert(sizeof(output_col) == sizeof(src.input_col)); | ||||
|         rk_output<_output, _output, _signed, _normalized> const * const input_col = | ||||
|             reinterpret_cast<rk_output<_output, _output, _signed, _normalized> const *>(src.input_col); | ||||
|         *output_col = *input_col; | ||||
|     } | ||||
| }; | ||||
|  | ||||
| template<typename _input, unsigned _cols, bool _signed, bool _normalized> | ||||
| struct alignas(4) rk_output_row<rk_packed<_signed, _cols>, _input, _cols, _signed, _normalized> { | ||||
|     rk_output<rk_packed<_signed, _cols>, _input, _signed, _normalized> output_cols; | ||||
| @ -100,6 +114,20 @@ struct alignas(4) rk_output_format { | ||||
|     } | ||||
| }; | ||||
|  | ||||
| template<typename _output, unsigned _cols, unsigned _rows, bool _signed, bool _normalized> | ||||
| struct alignas(4) rk_output_format<_output, _output, _cols, _rows, _signed, _normalized> { | ||||
|     rk_output_row<_output, _output, _cols, _signed, _normalized> output_row[_rows]; | ||||
|  | ||||
|     [[RK_FAST]] | ||||
|     inline void convert( | ||||
|         rk_input_format<_output, _cols, _rows> const & __restrict src) { | ||||
|         static_assert(sizeof(output_row) == sizeof(src.input_row)); | ||||
|         rk_output_row<_output, _output, _cols, _signed, _normalized> const * const input_row = | ||||
|             reinterpret_cast<rk_output_row<_output, _output, _cols, _signed, _normalized> const *>(src.input_row); | ||||
|         *output_row = *input_row; | ||||
|     } | ||||
| }; | ||||
|  | ||||
| template<typename _input, bool _signed, bool _normalized> | ||||
| struct alignas(alignof(rk_packed<_signed, 3>)) rk_output<rk_packed<_signed, 3>, _input, _signed, _normalized> { | ||||
|     rk_packed<_signed, 3> output; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user