187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams/*
2411f5996bccf88d5d2f8d1f003d39a8d76365244Stephen Hines * Copyright (C) 2011-2012 The Android Open Source Project
387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * you may not use this file except in compliance with the License.
687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * You may obtain a copy of the License at
787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
1087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Unless required by applicable law or agreed to in writing, software
1187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * See the License for the specific language governing permissions and
1487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * limitations under the License.
1587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams */
1687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
1787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#ifndef ANDROID_RS_MATRIX_2x2_H
1887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#define ANDROID_RS_MATRIX_2x2_H
1987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsType.h"
2187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// ---------------------------------------------------------------------------
2487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsnamespace android {
2587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsnamespace renderscript {
2687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstruct Matrix2x2 : public rs_matrix2x2 {
28411f5996bccf88d5d2f8d1f003d39a8d76365244Stephen Hines    inline float get(uint32_t x, uint32_t y) const {
29411f5996bccf88d5d2f8d1f003d39a8d76365244Stephen Hines        return m[x*2 + y];
3087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32411f5996bccf88d5d2f8d1f003d39a8d76365244Stephen Hines    inline void set(uint32_t x, uint32_t y, float v) {
33411f5996bccf88d5d2f8d1f003d39a8d76365244Stephen Hines        m[x*2 + y] = v;
3487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
3587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    void loadIdentity();
3787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    void load(const float *);
3887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    void load(const rs_matrix2x2 *);
3987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    void loadMultiply(const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs);
4187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    void transpose();
4387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    void multiply(const rs_matrix2x2 *rhs) {
4587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        Matrix2x2 tmp;
4687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        tmp.loadMultiply(this, rhs);
4787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        load(&tmp);
4887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
4987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams};
5087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
5187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
5287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
5387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
54411f5996bccf88d5d2f8d1f003d39a8d76365244Stephen Hines#endif  // ANDROID_RS_MATRIX_2x2_H
55