1221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams/*
269cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams * Copyright (C) 2012 The Android Open Source Project
3221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
4221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * you may not use this file except in compliance with the License.
6221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * You may obtain a copy of the License at
7221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
8221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
10221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Unless required by applicable law or agreed to in writing, software
11221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * See the License for the specific language governing permissions and
14221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * limitations under the License.
15221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams */
16221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
17221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <malloc.h>
18221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <string.h>
19221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
20221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include "RenderScript.h"
21eeaf7142d7e06efb3e0ddc7ef542884ab1d527dcTim Murray#include "rsCppInternal.h"
22221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
23cf067b8c4d1e53bc4768fbad239851c579717f2cMiao Wang// From system/graphics.h
24eb4426dfb63983559cf903b2ea984569e990c4fdTim Murrayenum {
25cf067b8c4d1e53bc4768fbad239851c579717f2cMiao Wang    HAL_PIXEL_FORMAT_YV12               = 0x32315659, // YCrCb 4:2:0 Planar
26cf067b8c4d1e53bc4768fbad239851c579717f2cMiao Wang    HAL_PIXEL_FORMAT_YCrCb_420_SP       = 0x11,       // NV21
27eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray};
28eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray
29dfcfabfccad8a8f2f42f83081638c7e5c9bfb4b9Chih-Hung Hsiehusing android::RSC::Element;
30dfcfabfccad8a8f2f42f83081638c7e5c9bfb4b9Chih-Hung Hsiehusing android::RSC::RS;
31dfcfabfccad8a8f2f42f83081638c7e5c9bfb4b9Chih-Hung Hsiehusing android::RSC::Type;
32dfcfabfccad8a8f2f42f83081638c7e5c9bfb4b9Chih-Hung Hsiehusing android::RSC::sp;
3369cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams
34221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::calcElementCount() {
35221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool hasLod = hasMipmaps();
36221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t x = getX();
37221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t y = getY();
38221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t z = getZ();
39221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t faces = 1;
40221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if (hasFaces()) {
41221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        faces = 6;
42221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
43221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if (x == 0) {
44221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        x = 1;
45221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
46221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if (y == 0) {
47221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        y = 1;
48221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
49221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if (z == 0) {
50221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        z = 1;
51221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
52221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
53221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t count = x * y * z * faces;
54221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    while (hasLod && ((x > 1) || (y > 1) || (z > 1))) {
55221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        if(x > 1) {
56221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams            x >>= 1;
57221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        }
58221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        if(y > 1) {
59221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams            y >>= 1;
60221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        }
61221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        if(z > 1) {
62221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams            z >>= 1;
63221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        }
64221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
65221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        count += x * y * z * faces;
66221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
67221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mElementCount = count;
68221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
69221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
70221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
7184bf2b877024aaa154b66e0f2338d54bdabd855aTim MurrayType::Type(void *id, sp<RS> rs) : BaseObj(id, rs) {
72221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimX = 0;
73221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimY = 0;
74221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimZ = 0;
75221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimMipmaps = false;
76221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimFaces = false;
7744bef6fba6244292b751387f3d6c31cca96c28adChris Wailes    mElement = nullptr;
78eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    mYuvFormat = RS_YUV_NONE;
79221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
80221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
81221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::updateFromNative() {
8270d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang    BaseObj::updateFromNative();
83221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
84221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    /*
8570d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang     * We have 6 integers / pointers (uintptr_t) to obtain from the return buffer:
8670d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang     * mDimX     (buffer[0]);
8770d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang     * mDimY     (buffer[1]);
8870d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang     * mDimZ     (buffer[2]);
8970d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang     * mDimLOD   (buffer[3]);
9070d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang     * mDimFaces (buffer[4]);
9170d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang     * mElement  (buffer[5]);
9270d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang     */
9370d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang    uintptr_t dataBuffer[6];
9470d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang    RS::dispatch->TypeGetNativeData(mRS->getContext(), getID(), dataBuffer, 6);
95221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
9670d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang    mDimX = (uint32_t)dataBuffer[0];
9770d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang    mDimY = (uint32_t)dataBuffer[1];
9870d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang    mDimZ = (uint32_t)dataBuffer[2];
99221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimMipmaps = dataBuffer[3] == 1 ? true : false;
100221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimFaces = dataBuffer[4] == 1 ? true : false;
101221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
10270d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang    uintptr_t elementID = dataBuffer[5];
103221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if(elementID != 0) {
10470d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang        // Just create a new Element and update it from native.
10570d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang        sp<Element> e = new Element((void *)elementID, mRS);
10670d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang        e->updateFromNative();
10770d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang        mElement = e;
108221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
109221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    calcElementCount();
110221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
111221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
11245768e1663714702c0c2b7adf14fdbd80dae71f5Chih-Hung Hsiehsp<const Type> Type::create(const sp<RS>& rs, const sp<const Element>& e, uint32_t dimX, uint32_t dimY, uint32_t dimZ) {
113a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray    void * id = RS::dispatch->TypeCreate(rs->getContext(), e->getID(), dimX, dimY, dimZ, false, false, 0);
11496267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    Type *t = new Type(id, rs);
11596267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray
11696267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    t->mElement = e;
11796267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    t->mDimX = dimX;
11896267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    t->mDimY = dimY;
11996267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    t->mDimZ = dimZ;
12096267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    t->mDimMipmaps = false;
12196267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    t->mDimFaces = false;
122dafeee0fdd890d5110f8dcc8cabc01c7979eacddMiao Wang    t->mYuvFormat = RS_YUV_NONE;
12396267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray
12496267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    t->calcElementCount();
12596267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray
12696267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray    return t;
12796267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray}
12896267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray
12984bf2b877024aaa154b66e0f2338d54bdabd855aTim MurrayType::Builder::Builder(sp<RS> rs, sp<const Element> e) {
1303560907fa9b1624eefbd6db5e9c3ccc25ab23b92Tim Murray    mRS = rs.get();
131221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mElement = e;
132221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimX = 0;
133221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimY = 0;
134221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimZ = 0;
135221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimMipmaps = false;
136221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimFaces = false;
137dafeee0fdd890d5110f8dcc8cabc01c7979eacddMiao Wang    mYuvFormat = RS_YUV_NONE;
138221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
139221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
140221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::Builder::setX(uint32_t value) {
141221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if(value < 1) {
142221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        ALOGE("Values of less than 1 for Dimension X are not valid.");
143221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
144221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimX = value;
145221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
146221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
1477d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hinesvoid Type::Builder::setY(uint32_t value) {
148221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if(value < 1) {
149221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        ALOGE("Values of less than 1 for Dimension Y are not valid.");
150221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
151221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimY = value;
152221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
153221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
154eb4426dfb63983559cf903b2ea984569e990c4fdTim Murrayvoid Type::Builder::setZ(uint32_t value) {
155eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    if(value < 1) {
156eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray        ALOGE("Values of less than 1 for Dimension Z are not valid.");
157eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    }
158eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    mDimZ = value;
159eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray}
160eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray
161c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainarvoid Type::Builder::setYuvFormat(RsYuvFormat format) {
162eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    if (format != RS_YUV_NONE && !(mElement->isCompatible(Element::YUV(mRS)))) {
163eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray        ALOGE("Invalid element for use with YUV.");
164eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray        return;
165eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    }
166eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray
167c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar    if (format != RS_YUV_NONE &&
168c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar        format != RS_YUV_YV12 &&
169c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar        format != RS_YUV_NV21 &&
170c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar        format != RS_YUV_420_888) {
171eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray        ALOGE("Invalid YUV format.");
172eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray        return;
173eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    }
174eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    mYuvFormat = format;
175eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray}
176eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray
177eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray
178221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::Builder::setMipmaps(bool value) {
179221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimMipmaps = value;
180221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
181221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
182221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::Builder::setFaces(bool value) {
183221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    mDimFaces = value;
184221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
185221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
18669cccdf0659a193d6a75420ec745421fb5c436e6Jason Samssp<const Type> Type::Builder::create() {
187221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if (mDimZ > 0) {
188221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        if ((mDimX < 1) || (mDimY < 1)) {
189221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams            ALOGE("Both X and Y dimension required when Z is present.");
19043a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang            return nullptr;
191221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        }
192221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        if (mDimFaces) {
193221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams            ALOGE("Cube maps not supported with 3D types.");
19443a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang            return nullptr;
195221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        }
196221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
197221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if (mDimY > 0) {
198221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        if (mDimX < 1) {
199221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams            ALOGE("X dimension required when Y is present.");
20043a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang            return nullptr;
201221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        }
202221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
203221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    if (mDimFaces) {
204221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        if (mDimY < 1) {
205221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams            ALOGE("Cube maps require 2D Types.");
20643a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang            return nullptr;
20743a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang        }
20843a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang    }
20943a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang
210c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar    if (mYuvFormat != RS_YUV_NONE) {
21143a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang        if (mDimZ || mDimFaces || mDimMipmaps) {
21243a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang            ALOGE("YUV only supports basic 2D.");
21343a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang            return nullptr;
214221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        }
215221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
216221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
217c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar    if (mYuvFormat == RS_YUV_420_888) {
218c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar        ALOGE("YUV_420_888 not supported.");
219c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar        return nullptr;
220eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray    }
221eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray
222a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray    void * id = RS::dispatch->TypeCreate(mRS->getContext(), mElement->getID(), mDimX, mDimY, mDimZ,
223c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar                                         mDimMipmaps, mDimFaces, mYuvFormat);
224221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    Type *t = new Type(id, mRS);
225221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    t->mElement = mElement;
226221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    t->mDimX = mDimX;
227221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    t->mDimY = mDimY;
228221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    t->mDimZ = mDimZ;
229221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    t->mDimMipmaps = mDimMipmaps;
230221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    t->mDimFaces = mDimFaces;
23143a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang    t->mYuvFormat = mYuvFormat;
232221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
233221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    t->calcElementCount();
234221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    return t;
235221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}
236221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
237