Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a183cb5e authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 26897 into eclair

* changes:
  Removed last bits of predefined element types from native code.  Predefined types are now constructed at the java layer from standard building blocks.
parents e31c0b56 b6f2b131
Loading
Loading
Loading
Loading
+0 −26
Original line number Diff line number Diff line
@@ -90,32 +90,6 @@ enum RsDataKind {
    RS_KIND_POINT_SIZE
};

enum RsElementPredefined {
    RS_ELEMENT_USER_U8,
    RS_ELEMENT_USER_I8,
    RS_ELEMENT_USER_U16,
    RS_ELEMENT_USER_I16,
    RS_ELEMENT_USER_U32,
    RS_ELEMENT_USER_I32,
    RS_ELEMENT_USER_FLOAT,

    RS_ELEMENT_A_8,          // 7
    RS_ELEMENT_RGB_565,      // 8
    RS_ELEMENT_RGBA_5551,    // 9
    RS_ELEMENT_RGBA_4444,    // 10
    RS_ELEMENT_RGB_888,      // 11
    RS_ELEMENT_RGBA_8888,    // 12

    RS_ELEMENT_INDEX_16, //13
    RS_ELEMENT_INDEX_32,
    RS_ELEMENT_XY_F32,
    RS_ELEMENT_XYZ_F32,
    RS_ELEMENT_ST_XY_F32,
    RS_ELEMENT_ST_XYZ_F32,
    RS_ELEMENT_NORM_XYZ_F32,
    RS_ELEMENT_NORM_ST_XYZ_F32,
};

enum RsSamplerParam {
    RS_SAMPLER_MIN_FILTER,
    RS_SAMPLER_MAG_FILTER,
+0 −17
Original line number Diff line number Diff line
@@ -55,11 +55,6 @@ ElementCreate {
	ret RsElement
	}

ElementGetPredefined {
	param RsElementPredefined predef
	ret RsElement
	}

TypeBegin {
	param RsElement type
	}
@@ -78,24 +73,12 @@ AllocationCreateTyped {
	ret RsAllocation
	}

AllocationCreatePredefSized {
	param RsElementPredefined predef
	param size_t count
	ret RsAllocation
	}

AllocationCreateSized {
	param RsElement e
	param size_t count
	ret RsAllocation
	}

AllocationCreateFromFile {
	param const char *file
	param bool genMips
	ret RsAllocation
	}

AllocationCreateFromBitmap {
	param uint32_t width
	param uint32_t height
+0 −116
Original line number Diff line number Diff line
@@ -191,12 +191,6 @@ RsAllocation rsi_AllocationCreateTyped(Context *rsc, RsType vtype)
    return alloc;
}

RsAllocation rsi_AllocationCreatePredefSized(Context *rsc, RsElementPredefined t, size_t count)
{
    RsElement e = rsi_ElementGetPredefined(rsc, t);
    return rsi_AllocationCreateSized(rsc, e, count);
}

RsAllocation rsi_AllocationCreateSized(Context *rsc, RsElement e, size_t count)
{
    Type * type = new Type();
@@ -421,116 +415,6 @@ RsAllocation rsi_AllocationCreateFromBitmapBoxed(Context *rsc, uint32_t w, uint3

}


RsAllocation rsi_AllocationCreateFromFile(Context *rsc, const char *file, bool genMips)
{
    bool use32bpp = false;

    typedef struct _Win3xBitmapHeader
    {
       uint16_t type;
       uint32_t totalSize;
       uint32_t reserved;
       uint32_t offset;
       int32_t hdrSize;            /* Size of this header in bytes */
       int32_t width;           /* Image width in pixels */
       int32_t height;          /* Image height in pixels */
       int16_t planes;          /* Number of color planes */
       int16_t bpp;             /* Number of bits per pixel */
       /* Fields added for Windows 3.x follow this line */
       int32_t compression;     /* Compression methods used */
       int32_t sizeOfBitmap;    /* Size of bitmap in bytes */
       int32_t horzResolution;  /* Horizontal resolution in pixels per meter */
       int32_t vertResolution;  /* Vertical resolution in pixels per meter */
       int32_t colorsUsed;      /* Number of colors in the image */
       int32_t colorsImportant; /* Minimum number of important colors */
    } __attribute__((__packed__)) WIN3XBITMAPHEADER;

    _Win3xBitmapHeader hdr;

    FILE *f = fopen(file, "rb");
    if (f == NULL) {
        LOGE("rsAllocationCreateFromBitmap failed to open file %s", file);
        return NULL;
    }
    memset(&hdr, 0, sizeof(hdr));
    fread(&hdr, sizeof(hdr), 1, f);

    if (hdr.bpp != 24) {
        LOGE("Unsuported BMP type");
        fclose(f);
        return NULL;
    }

    int32_t texWidth = rsHigherPow2(hdr.width);
    int32_t texHeight = rsHigherPow2(hdr.height);

    if (use32bpp) {
        rsi_TypeBegin(rsc, rsi_ElementGetPredefined(rsc, RS_ELEMENT_RGBA_8888));
    } else {
        rsi_TypeBegin(rsc, rsi_ElementGetPredefined(rsc, RS_ELEMENT_RGB_565));
    }
    rsi_TypeAdd(rsc, RS_DIMENSION_X, texWidth);
    rsi_TypeAdd(rsc, RS_DIMENSION_Y, texHeight);
    if (genMips) {
        rsi_TypeAdd(rsc, RS_DIMENSION_LOD, 1);
    }
    RsType type = rsi_TypeCreate(rsc);

    RsAllocation vTexAlloc = rsi_AllocationCreateTyped(rsc, type);
    Allocation *texAlloc = static_cast<Allocation *>(vTexAlloc);
    texAlloc->incUserRef();
    if (texAlloc == NULL) {
        LOGE("Memory allocation failure");
        fclose(f);
        return NULL;
    }

    // offset to letterbox if height is not pow2
    Adapter2D adapt(texAlloc);
    uint8_t * fileInBuf = new uint8_t[texWidth * 3];
    uint32_t yOffset = (hdr.width - hdr.height) / 2;

    if (use32bpp) {
        uint8_t *tmp = static_cast<uint8_t *>(adapt.getElement(0, yOffset));
        for (int y=0; y < hdr.height; y++) {
            fseek(f, hdr.offset + (y*hdr.width*3), SEEK_SET);
            fread(fileInBuf, 1, hdr.width * 3, f);
            for(int x=0; x < hdr.width; x++) {
                tmp[0] = fileInBuf[x*3 + 2];
                tmp[1] = fileInBuf[x*3 + 1];
                tmp[2] = fileInBuf[x*3];
                tmp[3] = 0xff;
                tmp += 4;
            }
        }
    } else {
        uint16_t *tmp = static_cast<uint16_t *>(adapt.getElement(0, yOffset));
        for (int y=0; y < hdr.height; y++) {
            fseek(f, hdr.offset + (y*hdr.width*3), SEEK_SET);
            fread(fileInBuf, 1, hdr.width * 3, f);
            for(int x=0; x < hdr.width; x++) {
                *tmp = rs888to565(fileInBuf[x*3 + 2], fileInBuf[x*3 + 1], fileInBuf[x*3]);
                tmp++;
            }
        }
    }

    fclose(f);
    delete [] fileInBuf;

    if (genMips) {
        Adapter2D adapt2(texAlloc);
        for(uint32_t lod=0; lod < (texAlloc->getType()->getLODCount() -1); lod++) {
            adapt.setLOD(lod);
            adapt2.setLOD(lod + 1);
            mip(adapt2, adapt);
        }
    }

    return texAlloc;
}

void rsi_AllocationData(Context *rsc, RsAllocation va, const void *data, uint32_t sizeBytes)
{
    Allocation *a = static_cast<Allocation *>(va);
+0 −197
Original line number Diff line number Diff line
@@ -21,170 +21,6 @@
using namespace android;
using namespace android::renderscript;

void ElementState::initPredefined()
{
    Component * u_8  = new Component(Component::USER,   Component::UNSIGNED,  true,  8, 0);
    Component * i_8  = new Component(Component::USER,   Component::SIGNED,    true,  8, 0);
    Component * u_16 = new Component(Component::USER,   Component::UNSIGNED,  true,  16, 0);
    Component * i_16 = new Component(Component::USER,   Component::SIGNED,    true,  16, 0);
    Component * u_32 = new Component(Component::USER,   Component::UNSIGNED,  true,  32, 0);
    Component * i_32 = new Component(Component::USER,   Component::SIGNED,    true,  32, 0);
    Component * f_32 = new Component(Component::USER,   Component::FLOAT,     true,  32, 0);


    Component * r_4  = new Component(Component::RED,    Component::UNSIGNED,  true,  4, 0);
    Component * r_5  = new Component(Component::RED,    Component::UNSIGNED,  true,  5, 0);
    Component * r_8  = new Component(Component::RED,    Component::UNSIGNED,  true,  8, 0);

    Component * g_4  = new Component(Component::GREEN,  Component::UNSIGNED,  true,  4, 0);
    Component * g_5  = new Component(Component::GREEN,  Component::UNSIGNED,  true,  5, 0);
    Component * g_6  = new Component(Component::GREEN,  Component::UNSIGNED,  true,  6, 0);
    Component * g_8  = new Component(Component::GREEN,  Component::UNSIGNED,  true,  8, 0);

    Component * b_4  = new Component(Component::BLUE,   Component::UNSIGNED,  true,  4, 0);
    Component * b_5  = new Component(Component::BLUE,   Component::UNSIGNED,  true,  5, 0);
    Component * b_8  = new Component(Component::BLUE,   Component::UNSIGNED,  true,  8, 0);

    Component * a_1  = new Component(Component::ALPHA,  Component::UNSIGNED,  true,  1, 0);
    Component * a_4  = new Component(Component::ALPHA,  Component::UNSIGNED,  true,  4, 0);
    Component * a_8  = new Component(Component::ALPHA,  Component::UNSIGNED,  true,  8, 0);

    Component * idx_16 = new Component(Component::INDEX,  Component::UNSIGNED,  false, 16, 0);
    Component * idx_32 = new Component(Component::INDEX,  Component::UNSIGNED,  false, 32, 0);

    Component * x    = new Component(Component::X,      Component::FLOAT,     false, 32, 0);
    Component * y    = new Component(Component::Y,      Component::FLOAT,     false, 32, 0);
    Component * z    = new Component(Component::Z,      Component::FLOAT,     false, 32, 0);

    Component * nx   = new Component(Component::NX,     Component::FLOAT,     false, 32, 0);
    Component * ny   = new Component(Component::NY,     Component::FLOAT,     false, 32, 0);
    Component * nz   = new Component(Component::NZ,     Component::FLOAT,     false, 32, 0);

    Component * s    = new Component(Component::S,      Component::FLOAT,     false, 32, 0);
    Component * t    = new Component(Component::T,      Component::FLOAT,     false, 32, 0);

    Element * e;

    e = new Element(1);
    e->setComponent(0, u_8);
    mPredefinedList.add(Predefined(RS_ELEMENT_USER_U8, e));

    e = new Element(1);
    e->setComponent(0, i_8);
    mPredefinedList.add(Predefined(RS_ELEMENT_USER_I8, e));

    e = new Element(1);
    e->setComponent(0, u_16);
    mPredefinedList.add(Predefined(RS_ELEMENT_USER_U16, e));

    e = new Element(1);
    e->setComponent(0, i_16);
    mPredefinedList.add(Predefined(RS_ELEMENT_USER_I16, e));

    e = new Element(1);
    e->setComponent(0, u_32);
    mPredefinedList.add(Predefined(RS_ELEMENT_USER_U32, e));

    e = new Element(1);
    e->setComponent(0, i_32);
    mPredefinedList.add(Predefined(RS_ELEMENT_USER_I32, e));

    e = new Element(1);
    e->setComponent(0, f_32);
    mPredefinedList.add(Predefined(RS_ELEMENT_USER_FLOAT, e));

    e = new Element(1);
    e->setComponent(0, a_8);
    mPredefinedList.add(Predefined(RS_ELEMENT_A_8, e));

    e = new Element(3);
    e->setComponent(0, r_5);
    e->setComponent(1, g_6);
    e->setComponent(2, b_5);
    mPredefinedList.add(Predefined(RS_ELEMENT_RGB_565, e));

    e = new Element(4);
    e->setComponent(0, r_5);
    e->setComponent(1, g_5);
    e->setComponent(2, b_5);
    e->setComponent(3, a_1);
    mPredefinedList.add(Predefined(RS_ELEMENT_RGBA_5551, e));

    e = new Element(4);
    e->setComponent(0, r_4);
    e->setComponent(1, g_4);
    e->setComponent(2, b_4);
    e->setComponent(3, a_4);
    mPredefinedList.add(Predefined(RS_ELEMENT_RGBA_4444, e));

    e = new Element(3);
    e->setComponent(0, r_8);
    e->setComponent(1, g_8);
    e->setComponent(2, b_8);
    mPredefinedList.add(Predefined(RS_ELEMENT_RGB_888, e));

    e = new Element(4);
    e->setComponent(0, r_8);
    e->setComponent(1, g_8);
    e->setComponent(2, b_8);
    e->setComponent(3, a_8);
    mPredefinedList.add(Predefined(RS_ELEMENT_RGBA_8888, e));

    e = new Element(1);
    e->setComponent(0, idx_16);
    mPredefinedList.add(Predefined(RS_ELEMENT_INDEX_16, e));

    e = new Element(1);
    e->setComponent(0, idx_32);
    mPredefinedList.add(Predefined(RS_ELEMENT_INDEX_32, e));

    e = new Element(2);
    e->setComponent(0, x);
    e->setComponent(1, y);
    mPredefinedList.add(Predefined(RS_ELEMENT_XY_F32, e));

    e = new Element(3);
    e->setComponent(0, x);
    e->setComponent(1, y);
    e->setComponent(2, z);
    mPredefinedList.add(Predefined(RS_ELEMENT_XYZ_F32, e));

    e = new Element(4);
    e->setComponent(0, s);
    e->setComponent(1, t);
    e->setComponent(2, x);
    e->setComponent(3, y);
    mPredefinedList.add(Predefined(RS_ELEMENT_ST_XY_F32, e));

    e = new Element(5);
    e->setComponent(0, s);
    e->setComponent(1, t);
    e->setComponent(2, x);
    e->setComponent(3, y);
    e->setComponent(4, z);
    mPredefinedList.add(Predefined(RS_ELEMENT_ST_XYZ_F32, e));

    e = new Element(6);
    e->setComponent(0, nx);
    e->setComponent(1, ny);
    e->setComponent(2, nz);
    e->setComponent(3, x);
    e->setComponent(4, y);
    e->setComponent(5, z);
    mPredefinedList.add(Predefined(RS_ELEMENT_NORM_XYZ_F32, e));

    e = new Element(8);
    e->setComponent(0, nx);
    e->setComponent(1, ny);
    e->setComponent(2, nz);
    e->setComponent(3, s);
    e->setComponent(4, t);
    e->setComponent(5, x);
    e->setComponent(6, y);
    e->setComponent(7, z);
    mPredefinedList.add(Predefined(RS_ELEMENT_NORM_ST_XYZ_F32, e));
}


Element::Element()
{
@@ -358,39 +194,6 @@ void rsi_ElementBegin(Context *rsc)
    rsc->mStateElement.mComponentBuildList.clear();
}

void rsi_ElementAddPredefined(Context *rsc, RsElementPredefined predef)
{
    ElementState * sec = &rsc->mStateElement;

    RsElement ve = rsi_ElementGetPredefined(rsc, predef);
    const Element *e = static_cast<const Element *>(ve);

    for(size_t ct = 0; ct < sec->mPredefinedList[predef].mElement->getComponentCount(); ct++) {
        sec->mComponentBuildList.add(sec->mPredefinedList[predef].mElement->getComponent(ct));
    }
}

RsElement rsi_ElementGetPredefined(Context *rsc, RsElementPredefined predef)
{
    ElementState * sec = &rsc->mStateElement;

    if (!sec->mPredefinedList.size()) {
        sec->initPredefined();
    }

    if ((predef < 0) ||
        (static_cast<uint32_t>(predef) >= sec->mPredefinedList.size())) {
        LOGE("rsElementGetPredefined: Request for bad predefined type");
        // error
        return NULL;
    }

    rsAssert(sec->mPredefinedList[predef].mEnum == predef);
    Element * e = sec->mPredefinedList[predef].mElement;
    e->incUserRef();
    return e;
}

void rsi_ElementAdd(Context *rsc, RsDataKind dk, RsDataType dt, bool isNormalized, size_t bits, const char *name)
{
    ElementState * sec = &rsc->mStateElement;
+0 −18
Original line number Diff line number Diff line
@@ -69,24 +69,6 @@ public:
    ~ElementState();

    Vector<Component *> mComponentBuildList;



    struct Predefined {
        Predefined() {
            mElement = NULL;
        }
        Predefined(RsElementPredefined en, Element *e) {
            mEnum = en;
            mElement = e;
        }
        RsElementPredefined mEnum;
        Element * mElement;
    };
    Vector<Predefined> mPredefinedList;

    void initPredefined();

};


Loading