10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/*
20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project
30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License.
60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at
70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software
110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and
140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License.
150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef ANDROID_RS_MATRIX_2x2_H
180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define ANDROID_RS_MATRIX_2x2_H
190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsType.h"
210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ---------------------------------------------------------------------------
240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android {
250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript {
260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstruct Matrix2x2 : public rs_matrix2x2 {
280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    inline float get(uint32_t x, uint32_t y) const {
290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        return m[x*2 + y];
300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    }
310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    inline void set(uint32_t x, uint32_t y, float v) {
330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        m[x*2 + y] = v;
340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    }
350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void loadIdentity();
370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void load(const float *);
380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void load(const rs_matrix2x2 *);
390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void loadMultiply(const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs);
410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void transpose();
430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void multiply(const rs_matrix2x2 *rhs) {
450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        Matrix2x2 tmp;
460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        tmp.loadMultiply(this, rhs);
470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        load(&tmp);
480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    }
490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines};
500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif  // ANDROID_RS_MATRIX_2x2_H
55