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

Commit 8cb39de0 authored by Jason Sams's avatar Jason Sams
Browse files

Remove RS_KIND from vertex arrays types.

Legacy vertex programs now bind by name just like the user programs.
This removes the need for two different ways of declairing the same
information.

Change-Id: I0178c0962842a1bbffb6726984ae1b8f5bb7529c
parent c9d0a87d
Loading
Loading
Loading
Loading
+76 −138
Original line number Diff line number Diff line
@@ -91,109 +91,109 @@ public class Element extends BaseObj {
        }
    }

    public static Element USER_U8(RenderScript rs) {
        if(rs.mElement_USER_U8 == null) {
            rs.mElement_USER_U8 = createUser(rs, DataType.UNSIGNED_8);
    public static Element U8(RenderScript rs) {
        if(rs.mElement_U8 == null) {
            rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8);
        }
        return rs.mElement_USER_U8;
        return rs.mElement_U8;
    }

    public static Element USER_I8(RenderScript rs) {
        if(rs.mElement_USER_I8 == null) {
            rs.mElement_USER_I8 = createUser(rs, DataType.SIGNED_8);
    public static Element I8(RenderScript rs) {
        if(rs.mElement_I8 == null) {
            rs.mElement_I8 = createUser(rs, DataType.SIGNED_8);
        }
        return rs.mElement_USER_I8;
        return rs.mElement_I8;
    }

    public static Element USER_U32(RenderScript rs) {
        if(rs.mElement_USER_U32 == null) {
            rs.mElement_USER_U32 = createUser(rs, DataType.UNSIGNED_32);
    public static Element U32(RenderScript rs) {
        if(rs.mElement_U32 == null) {
            rs.mElement_U32 = createUser(rs, DataType.UNSIGNED_32);
        }
        return rs.mElement_USER_U32;
        return rs.mElement_U32;
    }

    public static Element USER_I32(RenderScript rs) {
        if(rs.mElement_USER_I32 == null) {
            rs.mElement_USER_I32 = createUser(rs, DataType.SIGNED_32);
    public static Element I32(RenderScript rs) {
        if(rs.mElement_I32 == null) {
            rs.mElement_I32 = createUser(rs, DataType.SIGNED_32);
        }
        return rs.mElement_USER_I32;
        return rs.mElement_I32;
    }

    public static Element USER_F32(RenderScript rs) {
        if(rs.mElement_USER_F32 == null) {
            rs.mElement_USER_F32 = createUser(rs, DataType.FLOAT_32);
    public static Element F32(RenderScript rs) {
        if(rs.mElement_F32 == null) {
            rs.mElement_F32 = createUser(rs, DataType.FLOAT_32);
        }
        return rs.mElement_USER_F32;
        return rs.mElement_F32;
    }

    public static Element USER_ELEMENT(RenderScript rs) {
        if(rs.mElement_USER_ELEMENT == null) {
            rs.mElement_USER_ELEMENT = createUser(rs, DataType.RS_ELEMENT);
    public static Element ELEMENT(RenderScript rs) {
        if(rs.mElement_ELEMENT == null) {
            rs.mElement_ELEMENT = createUser(rs, DataType.RS_ELEMENT);
        }
        return rs.mElement_USER_ELEMENT;
        return rs.mElement_ELEMENT;
    }

    public static Element USER_TYPE(RenderScript rs) {
        if(rs.mElement_USER_TYPE == null) {
            rs.mElement_USER_TYPE = createUser(rs, DataType.RS_TYPE);
    public static Element TYPE(RenderScript rs) {
        if(rs.mElement_TYPE == null) {
            rs.mElement_TYPE = createUser(rs, DataType.RS_TYPE);
        }
        return rs.mElement_USER_TYPE;
        return rs.mElement_TYPE;
    }

    public static Element USER_ALLOCATION(RenderScript rs) {
        if(rs.mElement_USER_ALLOCATION == null) {
            rs.mElement_USER_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION);
    public static Element ALLOCATION(RenderScript rs) {
        if(rs.mElement_ALLOCATION == null) {
            rs.mElement_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION);
        }
        return rs.mElement_USER_ALLOCATION;
        return rs.mElement_ALLOCATION;
    }

    public static Element USER_SAMPLER(RenderScript rs) {
        if(rs.mElement_USER_SAMPLER == null) {
            rs.mElement_USER_SAMPLER = createUser(rs, DataType.RS_SAMPLER);
    public static Element SAMPLER(RenderScript rs) {
        if(rs.mElement_SAMPLER == null) {
            rs.mElement_SAMPLER = createUser(rs, DataType.RS_SAMPLER);
        }
        return rs.mElement_USER_SAMPLER;
        return rs.mElement_SAMPLER;
    }

    public static Element USER_SCRIPT(RenderScript rs) {
        if(rs.mElement_USER_SCRIPT == null) {
            rs.mElement_USER_SCRIPT = createUser(rs, DataType.RS_SCRIPT);
    public static Element SCRIPT(RenderScript rs) {
        if(rs.mElement_SCRIPT == null) {
            rs.mElement_SCRIPT = createUser(rs, DataType.RS_SCRIPT);
        }
        return rs.mElement_USER_SCRIPT;
        return rs.mElement_SCRIPT;
    }

    public static Element USER_MESH(RenderScript rs) {
        if(rs.mElement_USER_MESH == null) {
            rs.mElement_USER_MESH = createUser(rs, DataType.RS_MESH);
    public static Element MESH(RenderScript rs) {
        if(rs.mElement_MESH == null) {
            rs.mElement_MESH = createUser(rs, DataType.RS_MESH);
        }
        return rs.mElement_USER_MESH;
        return rs.mElement_MESH;
    }

    public static Element USER_PROGRAM_FRAGMENT(RenderScript rs) {
        if(rs.mElement_USER_PROGRAM_FRAGMENT == null) {
            rs.mElement_USER_PROGRAM_FRAGMENT = createUser(rs, DataType.RS_PROGRAM_FRAGMENT);
    public static Element PROGRAM_FRAGMENT(RenderScript rs) {
        if(rs.mElement_PROGRAM_FRAGMENT == null) {
            rs.mElement_PROGRAM_FRAGMENT = createUser(rs, DataType.RS_PROGRAM_FRAGMENT);
        }
        return rs.mElement_USER_PROGRAM_FRAGMENT;
        return rs.mElement_PROGRAM_FRAGMENT;
    }

    public static Element USER_PROGRAM_VERTEX(RenderScript rs) {
        if(rs.mElement_USER_PROGRAM_VERTEX == null) {
            rs.mElement_USER_PROGRAM_VERTEX = createUser(rs, DataType.RS_PROGRAM_VERTEX);
    public static Element PROGRAM_VERTEX(RenderScript rs) {
        if(rs.mElement_PROGRAM_VERTEX == null) {
            rs.mElement_PROGRAM_VERTEX = createUser(rs, DataType.RS_PROGRAM_VERTEX);
        }
        return rs.mElement_USER_PROGRAM_VERTEX;
        return rs.mElement_PROGRAM_VERTEX;
    }

    public static Element USER_PROGRAM_RASTER(RenderScript rs) {
        if(rs.mElement_USER_PROGRAM_RASTER == null) {
            rs.mElement_USER_PROGRAM_RASTER = createUser(rs, DataType.RS_PROGRAM_RASTER);
    public static Element PROGRAM_RASTER(RenderScript rs) {
        if(rs.mElement_PROGRAM_RASTER == null) {
            rs.mElement_PROGRAM_RASTER = createUser(rs, DataType.RS_PROGRAM_RASTER);
        }
        return rs.mElement_USER_PROGRAM_RASTER;
        return rs.mElement_PROGRAM_RASTER;
    }

    public static Element USER_PROGRAM_STORE(RenderScript rs) {
        if(rs.mElement_USER_PROGRAM_STORE == null) {
            rs.mElement_USER_PROGRAM_STORE = createUser(rs, DataType.RS_PROGRAM_STORE);
    public static Element PROGRAM_STORE(RenderScript rs) {
        if(rs.mElement_PROGRAM_STORE == null) {
            rs.mElement_PROGRAM_STORE = createUser(rs, DataType.RS_PROGRAM_STORE);
        }
        return rs.mElement_USER_PROGRAM_STORE;
        return rs.mElement_PROGRAM_STORE;
    }


@@ -246,47 +246,34 @@ public class Element extends BaseObj {
        return rs.mElement_INDEX_16;
    }

    public static Element ATTRIB_POSITION_2(RenderScript rs) {
        if(rs.mElement_POSITION_2 == null) {
            rs.mElement_POSITION_2 = createAttrib(rs, DataType.FLOAT_32, DataKind.POSITION, 2);
    public static Element F32_2(RenderScript rs) {
        if(rs.mElement_FLOAT_2 == null) {
            rs.mElement_FLOAT_2 = createVector(rs, DataType.FLOAT_32, 2);
        }
        return rs.mElement_POSITION_2;
        return rs.mElement_FLOAT_2;
    }

    public static Element ATTRIB_POSITION_3(RenderScript rs) {
        if(rs.mElement_POSITION_3 == null) {
            rs.mElement_POSITION_3 = createAttrib(rs, DataType.FLOAT_32, DataKind.POSITION, 3);
    public static Element F32_3(RenderScript rs) {
        if(rs.mElement_FLOAT_3 == null) {
            rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_32, 3);
        }
        return rs.mElement_POSITION_3;
        return rs.mElement_FLOAT_3;
    }

    public static Element ATTRIB_TEXTURE_2(RenderScript rs) {
        if(rs.mElement_TEXTURE_2 == null) {
            rs.mElement_TEXTURE_2 = createAttrib(rs, DataType.FLOAT_32, DataKind.TEXTURE, 2);
    public static Element F32_4(RenderScript rs) {
        if(rs.mElement_FLOAT_4 == null) {
            rs.mElement_FLOAT_4 = createVector(rs, DataType.FLOAT_32, 4);
        }
        return rs.mElement_TEXTURE_2;
        return rs.mElement_FLOAT_4;
    }

    public static Element ATTRIB_NORMAL_3(RenderScript rs) {
        if(rs.mElement_NORMAL_3 == null) {
            rs.mElement_NORMAL_3 = createAttrib(rs, DataType.FLOAT_32, DataKind.NORMAL, 3);
    public static Element U8_4(RenderScript rs) {
        if(rs.mElement_UCHAR_4 == null) {
            rs.mElement_UCHAR_4 = createVector(rs, DataType.UNSIGNED_8, 4);
        }
        return rs.mElement_NORMAL_3;
        return rs.mElement_UCHAR_4;
    }

    public static Element ATTRIB_COLOR_U8_4(RenderScript rs) {
        if(rs.mElement_COLOR_U8_4 == null) {
            rs.mElement_COLOR_U8_4 = createAttrib(rs, DataType.UNSIGNED_8, DataKind.COLOR, 4);
        }
        return rs.mElement_COLOR_U8_4;
    }

    public static Element ATTRIB_COLOR_F32_4(RenderScript rs) {
        if(rs.mElement_COLOR_F32_4 == null) {
            rs.mElement_COLOR_F32_4 = createAttrib(rs, DataType.FLOAT_32, DataKind.COLOR, 4);
        }
        return rs.mElement_COLOR_F32_4;
    }

    Element(RenderScript rs, Element[] e, String[] n) {
        super(rs);
@@ -331,55 +318,6 @@ public class Element extends BaseObj {
        return new Element(rs, DataType.UNSIGNED_16, DataKind.INDEX, false, 1);
    }

    public static Element createAttrib(RenderScript rs, DataType dt, DataKind dk, int size) {
        if (!(dt == DataType.FLOAT_32 ||
              dt == DataType.UNSIGNED_8 ||
              dt == DataType.UNSIGNED_16 ||
              dt == DataType.UNSIGNED_32 ||
              dt == DataType.SIGNED_8 ||
              dt == DataType.SIGNED_16 ||
              dt == DataType.SIGNED_32)) {
            throw new IllegalArgumentException("Unsupported DataType");
        }

        if (!(dk == DataKind.COLOR ||
              dk == DataKind.POSITION ||
              dk == DataKind.TEXTURE ||
              dk == DataKind.NORMAL ||
              dk == DataKind.POINT_SIZE ||
              dk == DataKind.USER)) {
            throw new IllegalArgumentException("Unsupported DataKind");
        }

        if (dk == DataKind.COLOR &&
            ((dt != DataType.FLOAT_32 && dt != DataType.UNSIGNED_8) ||
             size < 3 || size > 4)) {
            throw new IllegalArgumentException("Bad combo");
        }
        if (dk == DataKind.POSITION && (size < 1 || size > 4)) {
            throw new IllegalArgumentException("Bad combo");
        }
        if (dk == DataKind.TEXTURE &&
            (dt != DataType.FLOAT_32 || size < 1 || size > 4)) {
            throw new IllegalArgumentException("Bad combo");
        }
        if (dk == DataKind.NORMAL &&
            (dt != DataType.FLOAT_32 || size != 3)) {
            throw new IllegalArgumentException("Bad combo");
        }
        if (dk == DataKind.POINT_SIZE &&
            (dt != DataType.FLOAT_32 || size != 1)) {
            throw new IllegalArgumentException("Bad combo");
        }

        boolean norm = false;
        if (dk == DataKind.COLOR && dt == DataType.UNSIGNED_8) {
            norm = true;
        }

        return new Element(rs, dt, dk, norm, size);
    }

    public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) {
        if (!(dk == DataKind.PIXEL_L ||
              dk == DataKind.PIXEL_A ||
+22 −24
Original line number Diff line number Diff line
@@ -192,24 +192,24 @@ public class RenderScript {
    @SuppressWarnings({"FieldCanBeLocal"})
    protected MessageThread mMessageThread;

    Element mElement_USER_U8;
    Element mElement_USER_I8;
    Element mElement_USER_U16;
    Element mElement_USER_I16;
    Element mElement_USER_U32;
    Element mElement_USER_I32;
    Element mElement_USER_F32;

    Element mElement_USER_ELEMENT;
    Element mElement_USER_TYPE;
    Element mElement_USER_ALLOCATION;
    Element mElement_USER_SAMPLER;
    Element mElement_USER_SCRIPT;
    Element mElement_USER_MESH;
    Element mElement_USER_PROGRAM_FRAGMENT;
    Element mElement_USER_PROGRAM_VERTEX;
    Element mElement_USER_PROGRAM_RASTER;
    Element mElement_USER_PROGRAM_STORE;
    Element mElement_U8;
    Element mElement_I8;
    Element mElement_U16;
    Element mElement_I16;
    Element mElement_U32;
    Element mElement_I32;
    Element mElement_F32;

    Element mElement_ELEMENT;
    Element mElement_TYPE;
    Element mElement_ALLOCATION;
    Element mElement_SAMPLER;
    Element mElement_SCRIPT;
    Element mElement_MESH;
    Element mElement_PROGRAM_FRAGMENT;
    Element mElement_PROGRAM_VERTEX;
    Element mElement_PROGRAM_RASTER;
    Element mElement_PROGRAM_STORE;

    Element mElement_A_8;
    Element mElement_RGB_565;
@@ -219,12 +219,10 @@ public class RenderScript {
    Element mElement_RGBA_8888;

    Element mElement_INDEX_16;
    Element mElement_POSITION_2;
    Element mElement_POSITION_3;
    Element mElement_TEXTURE_2;
    Element mElement_NORMAL_3;
    Element mElement_COLOR_U8_4;
    Element mElement_COLOR_F32_4;
    Element mElement_FLOAT_2;
    Element mElement_FLOAT_3;
    Element mElement_FLOAT_4;
    Element mElement_UCHAR_4;

    Sampler mSampler_CLAMP_NEAREST;
    Sampler mSampler_CLAMP_LINEAR;
+4 −14
Original line number Diff line number Diff line
@@ -313,30 +313,20 @@ public class SimpleMesh extends BaseObj {
        public SimpleMesh create() {
            Element.Builder b = new Element.Builder(mRS);
            int floatCount = mVtxSize;
            b.add(Element.createAttrib(mRS,
            b.add(Element.createVector(mRS,
                                       Element.DataType.FLOAT_32,
                                       Element.DataKind.POSITION,
                                       mVtxSize), "position");
            if ((mFlags & COLOR) != 0) {
                floatCount += 4;
                b.add(Element.createAttrib(mRS,
                                           Element.DataType.FLOAT_32,
                                           Element.DataKind.COLOR,
                                           4), "color");
                b.add(Element.F32_4(mRS), "color");
            }
            if ((mFlags & TEXTURE_0) != 0) {
                floatCount += 2;
                b.add(Element.createAttrib(mRS,
                                           Element.DataType.FLOAT_32,
                                           Element.DataKind.TEXTURE,
                                           2), "texture");
                b.add(Element.F32_2(mRS), "texture0");
            }
            if ((mFlags & NORMAL) != 0) {
                floatCount += 3;
                b.add(Element.createAttrib(mRS,
                                           Element.DataType.FLOAT_32,
                                           Element.DataKind.NORMAL,
                                           3), "normal");
                b.add(Element.F32_3(mRS), "normal");
            }
            mElement = b.create();

+16 −1
Original line number Diff line number Diff line
@@ -40,6 +40,18 @@ int root() {
    return 1;
}

// Putting the overloadable attribute on this function breaks rendering
// appears to be a bug.
static uchar4 /*__attribute__((overloadable))*/ pack(float r, float g, float b)
{
    uchar4 c;
    c.x = (uchar)(r * 255.f);
    c.y = (uchar)(g * 255.f);
    c.z = (uchar)(b * 255.f);
    c.w = 255;
    return c;
}

void addParticles(int rate, int x, int y)
{
    //rsDebug("partColor", partColor);
@@ -51,7 +63,10 @@ void addParticles(int rate, int x, int y)
    float rMax = ((float)rate) * 0.005f;
    int size = rsAllocationGetDimX(rsGetAllocation(point));

    uchar4 c = rsPackColorTo8888(partColor.x, partColor.y, partColor.z);
    //uchar4 c = rsPackColorTo8888(partColor.x, partColor.y, partColor.z);
    uchar4 c = pack(partColor.x, partColor.y, partColor.z);
    c.x = 255;
    c.w = 255;

    //rsDebug("color ", ((int *)&c)[0]);
    Point_t * np = &point[newPart];
Loading