You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1177 lines
44 KiB
1177 lines
44 KiB
/* |
|
* Copyright (C) 2017 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
package android.hardware.renderscript@1.0; |
|
|
|
import android.hardware.renderscript@1.0::types; |
|
|
|
// TODO: is there any way to keep this documentation in sync with the |
|
// corresponding Java doc? |
|
// |
|
// TODO: Some of the documentation was taken from Java docs, whereas others were |
|
// undocumented. Because of this, there's somewhat two different styles of |
|
// comments. Look into having a consistent convention. |
|
// |
|
// TODO: There was some confusion as to why some paramters use vec<> and others |
|
// use Ptr/Size. The convention is that vec<> is used whenever the paramter is |
|
// only an input parameter. HIDL is not supposed to include any output |
|
// parameters, so a more explicit Ptr/Size is used. |
|
|
|
interface IContext { |
|
|
|
/** |
|
* TODO: Do we need to define "selectors"? It may be a property of the |
|
* "adapted allocation" that's returned. |
|
* |
|
* Creates an arbitrary window into the base allocation. The type describes |
|
* the shape of the window. Any dimensions present in the type must be |
|
* equal to or smaller than the dimensions in the source allocation. A |
|
* dimension present in the allocation that is not present in the type must |
|
* be constrained away with the selectors. If a dimension is present in |
|
* both the type and allocation, one of two things must happen. If the type |
|
* is smaller than the allocation, a window must be created, the selected |
|
* value in the adapter for that dimension must act as the base address, |
|
* and the type must describe the size of the view starting at that point. |
|
* If the type and allocation dimension are of the same size, then setting |
|
* the selector for the dimension must be an error. |
|
* |
|
* @param type Type describing data layout |
|
* @param baseAlloc Allocation |
|
* @return subAlloc AllocationAdapter |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationAdapterCreate(Type type, Allocation baseAlloc) |
|
generates (AllocationAdapter subAlloc); |
|
|
|
/** |
|
* TODO: Need to relate "offset" back to the terminology in |
|
* allocationAdapterCreate() -- the latter uses the terms "selector" and |
|
* "selected value". Can we use consistent terminology? Are "offset" and |
|
* "selector" actually two different things? |
|
* |
|
* TODO: Explain the flattened layout in the offsets vec |
|
* |
|
* Sets the offsets for an Allocation Adapter. |
|
* |
|
* @param alloc AllocationAdapter |
|
* @param offsets Collection of offsets |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationAdapterOffset(AllocationAdapter alloc, vec<uint32_t> offsets); |
|
|
|
/** |
|
* TODO: add more explanation here. |
|
* |
|
* Returns the Type of the Allocation. |
|
* |
|
* @param allocation Allocation |
|
* @return type Allocation's Type |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationGetType(Allocation allocation) generates (Type type); |
|
|
|
/** |
|
* TODO: more clarification needed describing if the pointer can be aliased |
|
* or if the data can outlive the allocation. |
|
* |
|
* Creates an Allocation for use by scripts with a given Type and a backing |
|
* pointer. For use with ALLOCATION_USAGE_SHARED. |
|
* |
|
* @param type Type describing data layout |
|
* @param mips AllocationMipmapControl specifies desired mipmap behavior for |
|
* the allocation |
|
* @param usage Bit field specifying how the Allocation is utilized |
|
* @param ptr Pointer to client-side data |
|
* @return allocation Created Allocation |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationCreateTyped(Type type, AllocationMipmapControl mips, |
|
bitfield<AllocationUsageType> usage, Ptr ptr) |
|
generates (Allocation allocation); |
|
|
|
/** |
|
* Creates an Allocation from a Bitmap. |
|
* |
|
* @param type Type describing data layout |
|
* @param mips AllocationMipmapControl specifies desired mipmap behavior for |
|
* the allocation |
|
* @param bitmap Bitmap source for the allocation data |
|
* @param usage Bit field specifying how the Allocation is utilized |
|
* @return allocation Created Allocation containing bitmap data |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationCreateFromBitmap(Type type, AllocationMipmapControl mips, |
|
vec<uint8_t> bitmap, |
|
bitfield<AllocationUsageType> usage) |
|
generates (Allocation allocation); |
|
|
|
/** |
|
* Creates a Cubemapped Allocation from a Bitmap. |
|
* |
|
* @param type Type describing data layout |
|
* @param mips AllocationMipmapControl specifies desired mipmap behavior |
|
* for the allocation |
|
* @param bitmap Bitmap with cubemap faces layed out in the following |
|
* format: right, left, top, bottom, front, back |
|
* @param usage Bit field specifying how the Allocation is used |
|
* @return allocation Created Allocation containing cubemap data |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationCubeCreateFromBitmap(Type type, AllocationMipmapControl mips, |
|
vec<uint8_t> bitmap, |
|
bitfield<AllocationUsageType> usage) |
|
generates (Allocation allocation); |
|
|
|
/** |
|
* Returns the handle to a raw buffer that is being managed by the screen |
|
* compositor. This operation is only valid for Allocations with |
|
* USAGE_IO_INPUT. |
|
* |
|
* @param allocation Allocation |
|
* @return nativeWindow NativeWindow object associated with allocation |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationGetNativeWindow(Allocation allocation) |
|
generates (NativeWindow nativeWindow); |
|
|
|
/** |
|
* TODO: more clarification needed |
|
* |
|
* Sets the NativeWindow of an Allocation. This operation is only valid |
|
* for Allocations with USAGE_IO_INPUT. |
|
* |
|
* @param allocation Allocation to be modified |
|
* @pram nativeWindow NativeWindow to associate with allocation |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationSetNativeWindow(Allocation allocation, NativeWindow nativewindow); |
|
|
|
/** |
|
* Initialize BufferQueue with specified max number of buffers. |
|
* |
|
* @param alloc Allocation |
|
* @param numBuffer Maximum number of buffers |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationSetupBufferQueue(Allocation alloc, uint32_t numBuffer); |
|
|
|
/** |
|
* TODO: clearly define baseAlloc vs subAlloc |
|
* |
|
* Shares the BufferQueue with another Allocation. Both must be |
|
* USAGE_IO_INPUT Allocations. |
|
* |
|
* @param baseAlloc Base Allocation |
|
* @param subAlloc Allocation to use the same buffer queue as the Base |
|
* Allocation |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationShareBufferQueue(Allocation baseAlloc, Allocation subAlloc); |
|
|
|
/** |
|
* Copies from the Allocation into a Bitmap. The bitmap must match the |
|
* dimensions of the Allocation. |
|
* |
|
* HIDL is always running in Passthrough mode for RenderScript, so the |
|
* buffer is modified directly by the driver. |
|
* |
|
* @param allocation Allocation |
|
* @param data Buffer to be copied into |
|
* @param sizeBytes Size of the buffer pointed to by "data" |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationCopyToBitmap(Allocation allocation, Ptr data, Size sizeBytes); |
|
|
|
/** |
|
* TODO: should we consolidate all [123]DWrite functions or [123]DRead |
|
* functions into the same API call? Our current plan is to be very similar |
|
* to the dispatch table API. How much should we deviate from the original |
|
* API? |
|
* TODO: better description on Vec3/Vec4 and padding. |
|
* |
|
* Copies data into a 1D region of this Allocation. |
|
* |
|
* When this HAL entry is executed, all Vec3 elements have been explicitly |
|
* padded as Vec4 elements. |
|
* |
|
* The size of the region is: count * Element's size. |
|
* |
|
* @param allocation Allocation to be modified |
|
* @param offset The offset of the first element to be copied |
|
* @param lod Selected mipmap level of detail |
|
* @param count Number of elements to be copied |
|
* @param data Source data to be copied to Allocation |
|
*/ |
|
@callflow(next={"*"}) |
|
allocation1DWrite(Allocation allocation, uint32_t offset, uint32_t lod, |
|
uint32_t count, vec<uint8_t> data); |
|
|
|
/** |
|
* Copies a value into a single sub-Element of this Allocation. |
|
* |
|
* @param allocation Allocation to be updated |
|
* @param x X position of the first element in the Allocation to be updated |
|
* @param y Y position of the first element in the Allocation to be |
|
* updated; for a 1D Allocation, this value must be 0 |
|
* @param z Z position of the first element in the Allocation to be |
|
* updated; for a 1D or 2D Allocation, this value must be 0 |
|
* @param lod Selected mipmap level of detail |
|
* @param data Data to be copied from |
|
* @param compIdx Component number to identify which sub-Element is updated |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationElementWrite(Allocation allocation, uint32_t x, uint32_t y, |
|
uint32_t z, uint32_t lod, vec<uint8_t> data, |
|
Size compIdx); |
|
|
|
/** |
|
* Copies from an array into a rectangular region in this Allocation. |
|
* |
|
* When this HAL entry is executed, all Vec3 elements have been explicitly |
|
* padded as Vec4 elements. |
|
* |
|
* The size of the region is: w * h * Element's size. |
|
* |
|
* @param allocation Allocation to be modified |
|
* @param xoff X offset of the region to update in this Allocation |
|
* @param yoff Y offset of the region to update in this Allocation |
|
* @param lod Selected mipmap level of detail |
|
* @param face AllocationCubemapFace |
|
* @param w Width of the region to update |
|
* @param h Height of the region to update |
|
* @param data Data to be placed into the Allocation |
|
* @param stride For 1D Allocation, the stride must be the number of bytes |
|
* of this Allocation. For 2D and 3D Allocations, the stride |
|
* must be the stride in X dimension measuring in bytes. |
|
*/ |
|
@callflow(next={"*"}) |
|
allocation2DWrite(Allocation allocation, uint32_t xoff, uint32_t yoff, |
|
uint32_t lod, AllocationCubemapFace face, uint32_t w, |
|
uint32_t h, vec<uint8_t> data, Size stride); |
|
|
|
/** |
|
* Copies from an array into a 3D region in this Allocation. |
|
* |
|
* When this HAL entry is executed, all Vec3 elements have been explicitly |
|
* padded as Vec4 elements. |
|
* |
|
* The size of the region is: w * h * d * Element's size. |
|
* |
|
* @param allocation Allocation to be modified |
|
* @param xoff X offset of the region to update in this Allocation |
|
* @param yoff Y offset of the region to update in this Allocation |
|
* @param zoff Z offset of the region to update in this Allocation |
|
* @param lod Selected mipmap level of detail |
|
* @param w Width of the region to update |
|
* @param h Height of the region to update |
|
* @param d Depth of the region to update |
|
* @param data Data to be placed in the Allocation |
|
* @param stride For 1D Allocation, the stride must be the number of bytes |
|
* of this Allocation. For 2D and 3D Allocations, the stride |
|
* must be the stride in X dimension measuring in bytes. |
|
*/ |
|
@callflow(next={"*"}) |
|
allocation3DWrite(Allocation allocation, uint32_t xoff, uint32_t yoff, |
|
uint32_t zoff, uint32_t lod, uint32_t w, uint32_t h, |
|
uint32_t d, vec<uint8_t> data, Size stride); |
|
|
|
/** |
|
* Generates a mipmap chain. This is only valid if the Type of the |
|
* Allocation includes mipmaps. |
|
* |
|
* This function generates a complete set of mipmaps from the top level |
|
* LOD. |
|
* |
|
* If the Allocation is also using other memory spaces, a call to |
|
* allocationSyncAll(context, allocation, usage) is required. |
|
* |
|
* @param allocation Allocation which has its top LOD read and lower LOD |
|
* written to |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationGenerateMipmaps(Allocation allocation); |
|
|
|
/** |
|
* Copies all of an Allocation's data into an array. |
|
* |
|
* All Vec3 elements of an Allocation are padded to be Vec4, so the data |
|
* returned by this function automatically includes padding. |
|
* |
|
* HIDL is always running in Passthrough mode for RenderScript, so the |
|
* buffer is modified directly by the driver. |
|
* |
|
* @param allocation Allocation to be read |
|
* @param data Buffer to be copied into |
|
* @param sizeBytes Size of the buffer pointed to by "data" |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationRead(Allocation allocation, Ptr data, Size sizeBytes); |
|
|
|
/** |
|
* Copies a 1D region of this Allocation into an array. |
|
* |
|
* All Vec3 elements of an Allocation are padded to be Vec4, so the data |
|
* returned by this function automatically includes padding. |
|
* |
|
* The size of the region is: count * Element's size. |
|
* |
|
* HIDL is always running in Passthrough mode for RenderScript, so the |
|
* buffer is modified directly by the driver. |
|
* |
|
* @param allocation Allocation to be read |
|
* @param xoff X offset of the first element to be copied |
|
* @param lod Mipmap level of detail |
|
* @param count The number of elements to be copied |
|
* @param data Buffer to be copied into |
|
* @param sizeBytes Size of the buffer pointed to by "data" |
|
*/ |
|
@callflow(next={"*"}) |
|
allocation1DRead(Allocation allocation, uint32_t xoff, uint32_t lod, |
|
uint32_t count, Ptr data, Size sizeBytes); |
|
|
|
/** |
|
* Returns the value of a single sub-Element of this Allocation. |
|
* |
|
* HIDL is always running in Passthrough mode for RenderScript, so the |
|
* buffer is modified directly by the driver. |
|
* |
|
* @param allocation Allocation to be read |
|
* @param x X position of the first element in the Allocation to be read |
|
* @param y Y position of the first element in the Allocation to be read |
|
* @param z Z position of the first element in the Allocation to be read |
|
* @param lod Mipmap level of detail |
|
* @param data Buffer to be copied into |
|
* @param sizeBytes Size of the buffer pointed to by "data" |
|
* @param compIdx Component number to identify which sub-Element is updated |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationElementRead(Allocation allocation, uint32_t x, uint32_t y, |
|
uint32_t z, uint32_t lod, Ptr data, Size sizeBytes, |
|
Size compIdx); |
|
|
|
/** |
|
* Copies from a rectangular region in this Allocation to an array. |
|
* |
|
* All Vec3 elements of an Allocation are padded to be Vec4, so the data |
|
* returned by this function automatically includes padding. |
|
* |
|
* The size of the region is: w * h * Element's size. |
|
* |
|
* HIDL is always running in Passthrough mode for RenderScript, so the |
|
* buffer is modified directly by the driver. |
|
* |
|
* @param allocation Allocation to be read |
|
* @param xoff X offset of the region to copy in this array |
|
* @param yoff Y offset of the region to copy in this array |
|
* @param lod Mipmap level of detail |
|
* @param face AllocationCubemapFace |
|
* @param w Width of the region to copy |
|
* @param h Height of the region to copy |
|
* @param data Buffer to be copied into |
|
* @param sizeBytes Size of the buffer pointed to by "data" |
|
* @param stride For 1D Allocation, the stride must be the number of bytes |
|
* of this Allocation. For 2D and 3D Allocations, the stride |
|
* must be the stride in X dimension measuring in bytes. |
|
*/ |
|
@callflow(next={"*"}) |
|
allocation2DRead(Allocation allocation, uint32_t xoff, uint32_t yoff, |
|
uint32_t lod, AllocationCubemapFace face, uint32_t w, |
|
uint32_t h, Ptr data, Size sizeBytes, Size stride); |
|
|
|
/** |
|
* Copies from a rectangular cuboid region in this Allocation to an array. |
|
* |
|
* All Vec3 elements of an Allocation are padded to be Vec4, so the data |
|
* returned by this function automatically includes padding. |
|
* |
|
* The size of the region is: w * h * d * Element's size. |
|
* |
|
* HIDL is always running in Passthrough mode for RenderScript, so the |
|
* buffer is modified directly by the driver. |
|
* |
|
* @param allocation Allocation to be read |
|
* @param xoff X offset of the region to copy in this array |
|
* @param yoff Y offset of the region to copy in this array |
|
* @param zoff Z offset of the region to copy in this array |
|
* @param lod Mipmap level of detail |
|
* @param w Width of the region to copy |
|
* @param h Height of the region to copy |
|
* @param d Depth of the region to copy |
|
* @param data Buffer to be copied into |
|
* @param sizeBytes Size of the buffer pointed to by "data" |
|
* @param stride For 1D Allocation, the stride must be the number of bytes |
|
* of this Allocation. For 2D and 3D Allocations, the stride |
|
* must be the stride in X dimension measuring in bytes. |
|
*/ |
|
@callflow(next={"*"}) |
|
allocation3DRead(Allocation allocation, uint32_t xoff, uint32_t yoff, |
|
uint32_t zoff, uint32_t lod, uint32_t w, uint32_t h, |
|
uint32_t d, Ptr data, Size sizeBytes, Size stride); |
|
|
|
/** |
|
* Propagates changes from one usage of the Allocation to the other usages |
|
* of the Allocation. |
|
* |
|
* @param allocation First usage of the Allocation |
|
* @param usageType Allocation usage type |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationSyncAll(Allocation allocation, AllocationUsageType usageType); |
|
|
|
/** |
|
* TODO: describe the functionality of resize1D better |
|
* TODO: original Java Doc description seems to contradict itself ("with |
|
* null contents and the region is otherwise undefined") |
|
* TODO: should "new elements" be "new cells"? |
|
* TODO: what does "objects are created" mean? |
|
* TODO: what does "new dimension" mean? IS the type of the resized |
|
* allocation different than the type before resizing? |
|
* |
|
* Resizes a 1D allocation. The contents of the allocation are preserved. |
|
* If new elements are allocated, objects are created with null contents |
|
* and the new region is otherwise undefined. |
|
* |
|
* If the new region is smaller, the references of any object outside the |
|
* new region must be released. |
|
* |
|
* A new type must be created with the new dimension. |
|
* |
|
* @param allocation Allocation to be resized |
|
* @param dimX New size along the x dimension of the Allocation |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationResize1D(Allocation allocation, uint32_t dimX); |
|
|
|
/** |
|
* TODO: There are allocationCopy2DRange and 3DRange, but no 1DRange. Should |
|
* the interface be cleaned up more? |
|
* |
|
* Copies a rectangular region from an Allocation into a rectangular region |
|
* in this Allocation. |
|
* |
|
* @param dstAlloc Allocation to be updated |
|
* @param dstXoff X offset of the region to update |
|
* @param dstYoff Y offset of the region to update |
|
* @param dstMip Selected mipmap level of the Allocation to update |
|
* @param dstFace Destination AllocationCubemapFace |
|
* @param width Width of the region to update |
|
* @param height Height of the region to update |
|
* @param srcAlloc Source Allocation, to be read |
|
* @param srcXoff X offset of the region in the source Allocation |
|
* @param srcYoff Y offset of the region in the source Allocation |
|
* @param srcMip Selected mipmap level of the source Allocation |
|
* @param srcFace Source AllocationCubemapFace |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationCopy2DRange(Allocation dstAlloc, uint32_t dstXoff, |
|
uint32_t dstYoff, uint32_t dstMip, |
|
AllocationCubemapFace dstFace, uint32_t width, |
|
uint32_t height, Allocation srcAlloc, |
|
uint32_t srcXoff, uint32_t srcYoff, uint32_t srcMip, |
|
AllocationCubemapFace srcFace); |
|
|
|
/** |
|
* Copies a rectangular cuboid region into the allocation from another |
|
* Allocation. |
|
* |
|
* @param dstAlloc Allocation to be updated |
|
* @param dstXoff X offset of the region to update |
|
* @param dstYoff Y offset of the region to update |
|
* @param dstZoff Z offset of the region to update |
|
* @param dstMip Selected mipmap level of the Allocation to update |
|
* @param width Width of the region to update |
|
* @param height Height of the region to update |
|
* @param depth Depth of the region to update |
|
* @param srcAlloc Source Allocation, to be read |
|
* @param srcXoff Source X offset of the region in the source Allocation |
|
* @param srcYoff Source Y offset of the region in the source Allocation |
|
* @param srcZoff Source Z offset of the region in the souce Allocation |
|
* @param srcMip Selected mipmap level of the Allocation to read |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationCopy3DRange(Allocation dstAlloc, uint32_t dstXoff, |
|
uint32_t dstYoff, uint32_t dstZoff, uint32_t dstMip, |
|
uint32_t width, uint32_t height, uint32_t depth, |
|
Allocation srcAlloc, uint32_t srcXoff, |
|
uint32_t srcYoff, uint32_t srcZoff, uint32_t srcMip); |
|
|
|
/** |
|
* TODO: define buffer and output stream |
|
* |
|
* Sends a buffer to the output stream. The contents of the Allocation may |
|
* be undefined after this operation. This operation is only valid if |
|
* USAGE_IO_OUTPUT is set on the Allocation. |
|
* |
|
* @param allocation Allocation to be sent |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationIoSend(Allocation allocation); |
|
|
|
/** |
|
* Receives the latest input into the Allocation. This operation is only |
|
* valid if USAGE_IO_INPUT is set on the Allocation, otherwise an error |
|
* must be reported and no operations may be executed. |
|
* |
|
* @param allocation Allocation to be updated |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationIoReceive(Allocation allocation); |
|
|
|
/** |
|
* TODO: describe default values for lod, face, and z better. |
|
* TODO: what cases can invalidate the pointer? Resize? It should be |
|
* clarified that this method should always return a valid pointer, but the |
|
* returned pointer might become invalid later. |
|
* |
|
* Retrieves the pointer to the actual data an Allocation contains as well |
|
* as the data's stride. |
|
* |
|
* If Allocation lacks the corresponding dimension for lod, face, or z, an |
|
* error message must be sent to the message queue and nullptr must be |
|
* returned for dataPtr and 0 for stride. All missing values must be 0 or |
|
* NONE in the corresponding enum. |
|
* |
|
* @param allocation Allocation |
|
* @param lod Mipmap level of detail |
|
* @param face AllocationCubemapFace |
|
* @param z Z position |
|
* @return pointer Pointer to the server-side data; if this points to an |
|
* invalid location in memory (because the buffer was |
|
* freed), this may result in undefined behavior |
|
* @return stride For 1D Allocation, the stride must be the number of bytes |
|
* of this Allocation. For 2D and 3D Allocations, the stride |
|
* must be the stride in X dimension measuring in bytes. |
|
*/ |
|
@callflow(next={"*"}) |
|
allocationGetPointer(Allocation allocation, uint32_t lod, |
|
AllocationCubemapFace face, uint32_t z) |
|
generates (Ptr dataPtr, Size stride); |
|
|
|
/** |
|
* Retrieves an Element's metadata from native code. |
|
* |
|
* @param element Element to be read |
|
* @return elemData Element data |
|
*/ |
|
@callflow(next={"*"}) |
|
elementGetNativeMetadata(Element element) |
|
generates (vec<uint32_t> elemData); |
|
|
|
/** |
|
* TODO: define Sub-Element handles better. |
|
* |
|
* Retrieves an Element's sub Elements, specifically their identifiers, |
|
* names, and sizes. |
|
* |
|
* @param element Element to be read |
|
* @param numSubElem Number of sub-Elements |
|
* @return ids Sub-Element handles |
|
* @return names Sub-Element Names |
|
* @return arraySizes Sizes of sub-Element arrays |
|
*/ |
|
@callflow(next={"*"}) |
|
elementGetSubElements(Element element, Size numSubElem) |
|
generates (vec<Element> ids, vec<string> names, |
|
vec<Size> arraySizes); |
|
|
|
/** |
|
* TODO: can normalization flag be removed? |
|
* |
|
* Creates an Element. |
|
* |
|
* @param dt Data type |
|
* @param dk Data kind |
|
* @param norm Flag for normalization |
|
* @param size Vector length, with scalar = 1 |
|
* @return element Created Element |
|
*/ |
|
@callflow(next={"*"}) |
|
elementCreate(DataType dt, DataKind dk, bool norm, uint32_t size) |
|
generates (Element element); |
|
|
|
/** |
|
* Creates a complex Element. |
|
* |
|
* @param einsPtr Container of input Elements |
|
* @param namesPtr Container of input names |
|
* @param arraySizesPtr Container of array sizes |
|
* @return element Created Element |
|
*/ |
|
@callflow(next={"*"}) |
|
elementComplexCreate(vec<Element> einsPtr, vec<string> names, |
|
vec<Size> arraySizesPtr) |
|
generates (Element element); |
|
|
|
/** |
|
* Retrives a Type's metadata from native code. |
|
* |
|
* @param type Type describing data layout |
|
* @return metadata Type's native metadata |
|
*/ |
|
@callflow(next={"*"}) |
|
typeGetNativeMetadata(Type type) generates (vec<OpaqueHandle> metadata); |
|
|
|
/** |
|
* Creates a new Type. |
|
* |
|
* If Type is 1D, Y and Z must be 0. If Type is 2D, Z must be 0. |
|
* |
|
* @param element Element of the Type |
|
* @param dimX X dimension |
|
* @param dimY Y dimension |
|
* @param dimZ Z dimension |
|
* @param mipmaps Flag indicating whether Type has mipmaps |
|
* @param faces Flag indicating whether Type has faces |
|
* @param yuv Enumeration specifying which type of YUV format, if any, Type |
|
* uses |
|
* @return type Created Type |
|
*/ |
|
@callflow(next={"*"}) |
|
typeCreate(Element element, uint32_t dimX, uint32_t dimY, uint32_t dimZ, |
|
bool mipmaps, bool faces, YuvFormat yuv) |
|
generates (Type type); |
|
|
|
/** |
|
* Destroys provided RenderScript context, including all objects created in |
|
* this context. |
|
*/ |
|
@exit |
|
contextDestroy(); |
|
|
|
/** |
|
* TODO: provide overview of messaging model and figure out if this should |
|
* be part of HAL or not. |
|
* TODO: what is the "client" for purposes of this interface? |
|
* TODO: consider using send/receive to be more similar to other calls |
|
* TODO: define the purpose of size more |
|
* |
|
* Fills the provided buffer with message data. "size" should be at least |
|
* as large as the message size. Returns the MessageType and size of the |
|
* message are returned. |
|
* |
|
* @param data A pointer to a buffer to be filled with a message |
|
* @param size Size in bytes of the buffer pointed to by "data" |
|
* @return messageType Type of message sent to the client |
|
* @return receiveLen Length of the message in bytes |
|
*/ |
|
@callflow(next={"*"}) |
|
contextGetMessage(Ptr data, Size size) |
|
generates (MessageToClientType messageType, Size receiveLen); |
|
|
|
/** |
|
* TODO: define subID better. |
|
* |
|
* Gets the metadata of a message to ensure entire message can be properly |
|
* received. Can be used to determine size of data to allocate when calling |
|
* contextGetMessage. |
|
* |
|
* @return messageType Type of message sent to the client |
|
* @return receiveLen Length of message |
|
* @return subID Message sub identifier |
|
*/ |
|
@callflow(next={"*"}) |
|
contextPeekMessage() |
|
generates (MessageToClientType messageType, Size receiveLen, |
|
uint32_t subID); |
|
|
|
/** |
|
* TODO: Define "previous commands" better |
|
* TODO: Is the message identifier the same as subID? |
|
* |
|
* Places a message into the message queue to be sent back to the message |
|
* handler once all previous commands have been executed. The message data |
|
* is copied into the queue and can be discarded by the client after this |
|
* call. |
|
* |
|
* @param id Message identifier |
|
* @param data Message data |
|
*/ |
|
@callflow(next={"*"}) |
|
contextSendMessage(uint32_t id, vec<uint8_t> data); |
|
|
|
/** |
|
* TODO: Can this be done automatically as part of context creation? What |
|
* happens if we perform message operations before doing this? |
|
* |
|
* Initializes the messaging thread, so that the front-end API can receive |
|
* messages from the driver. This call also waits for the messaging FIFO to |
|
* start up. |
|
*/ |
|
@callflow(next={"*"}) |
|
contextInitToClient(); |
|
|
|
/** |
|
* TODO: Why doesn't this happen automatically as part of context |
|
* destruction? What happens if the FIFO is not empty? |
|
* |
|
* Deinitializes a the messaging thread. Shuts down the FIFO. |
|
*/ |
|
@callflow(next={"*"}) |
|
contextDeinitToClient(); |
|
|
|
/** |
|
* TODO: do we need to mark asynchronous operations in this interface |
|
* definition? |
|
* |
|
* Waits for any pending asynchronous operations (such as copies to a RS |
|
* allocation or RS script executions) to complete. |
|
*/ |
|
@callflow(next={"*"}) |
|
contextFinish(); |
|
|
|
/** |
|
* Prints the currently available debugging information about the state of |
|
* the RS context to the logcat. |
|
*/ |
|
@callflow(next={"*"}) |
|
contextLog(); |
|
|
|
/** |
|
* TODO: full path? relative path? Investigate further. |
|
* |
|
* Sets the cache directory of the context. |
|
* |
|
* @param cacheDir Name of the application's cache directory |
|
*/ |
|
@callflow(next={"*"}) |
|
contextSetCacheDir(string cacheDir); |
|
|
|
/** |
|
* TODO: does this apply to the GPU as well? |
|
* |
|
* Changes the priority of the cpu worker threads for this context. |
|
* |
|
* @param priority Priority of the thread |
|
*/ |
|
@callflow(next={"*"}) |
|
contextSetPriority(ThreadPriorities priority); |
|
|
|
/** |
|
* TODO: does this need to be part of the HAL? What if the object already |
|
* has a name? |
|
* |
|
* Assigns a name to a base object. |
|
* |
|
* @param obj Object to be named |
|
* @param name Assigned name |
|
*/ |
|
@callflow(next={"*"}) |
|
assignName(ObjectBase obj, string name); |
|
|
|
/** |
|
* TODO: what if the object has no name? |
|
* |
|
* Returns the name of an object. |
|
* |
|
* @param obj Object to be read |
|
* @return name Name of the object |
|
*/ |
|
@callflow(next={"*"}) |
|
getName(ObjectBase obj) generates (string name); |
|
|
|
/** |
|
* TODO: starting here we have a set of interfaces for use with |
|
* ScriptGroups. At the very least we should indicate for each one that's |
|
* what it's for. Should we include ScriptGroup in the interface names? |
|
* TODO: sweep whole file and remove prefix "v" from all parameter names |
|
* TODO: there are some places where we use Size for size, and others where |
|
* we use int32_t. Is there a reason it's int32_t? In some cases, it |
|
* requires a negative value. |
|
* |
|
* Creates a Closure which represents a function call to a ForEach Kernel |
|
* combined with arguments and values for global variables. |
|
* |
|
* @param kernelID Kernel identifier |
|
* @param returnValue Allocation used in output of Closure |
|
* @param fieldIDS Collection of Script's Field identifiers |
|
* @param values Collection of Script's data values |
|
* @param sizes Collection of Script's data sizes |
|
* @param depClosures Collection of Closures |
|
* @param depFieldIDS Collection of Script's dependent Field identifiers |
|
* @return closure Created Closure |
|
*/ |
|
@callflow(next={"*"}) |
|
closureCreate(ScriptKernelID kernelID, Allocation returnValue, |
|
vec<ScriptFieldID> fieldIDS, vec<int64_t> values, |
|
vec<int32_t> sizes, vec<Closure> depClosures, |
|
vec<ScriptFieldID> depFieldIDS) |
|
generates (Closure closure); |
|
|
|
/** |
|
* Creates a Closure which represents a function call to a invocable |
|
* function, combined with arguments and values for global variables. |
|
* |
|
* @param invokeID Invokable function identifier |
|
* @param params Collection of Invoke script parameters |
|
* @param fieldIDS Collection of Script Field identifiers |
|
* @param values Collection of values |
|
* @param sizes Collection of sizes |
|
* @return closure Created Closure |
|
*/ |
|
@callflow(next={"*"}) |
|
invokeClosureCreate(ScriptInvokeID invokeID, vec<uint8_t> params, |
|
vec<ScriptFieldID> fieldIDS, vec<int64_t> values, |
|
vec<int32_t> sizes) |
|
generates (Closure closure); |
|
|
|
/** |
|
* Sets the argument of a Closure at specified index and size to provided |
|
* value. |
|
* |
|
* @param closure Closure to be modified |
|
* @param index Index |
|
* @param value Value |
|
* @param size Size |
|
*/ |
|
@callflow(next={"*"}) |
|
closureSetArg(Closure closure, uint32_t index, Ptr value, int32_t size); |
|
|
|
/** |
|
* Sets a global variable in a Closure. |
|
* |
|
* @param closure Closure |
|
* @param fieldID Global's Field identifier |
|
* @param value Value |
|
* @param size Size |
|
*/ |
|
@callflow(next={"*"}) |
|
closureSetGlobal(Closure closure, ScriptFieldID fieldID, int64_t value, |
|
int32_t size); |
|
|
|
/** |
|
* TODO: should slot be unsigned? (applies to other two ID interfaces, too) |
|
* |
|
* Creates a Script Kernel ID. |
|
* |
|
* @param script Script |
|
* @param slot Slot |
|
* @param sig Bitfield describing Kernel signature and operation |
|
* @return scriptKernelID Script's Kernel identifier |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptKernelIDCreate(Script script, int32_t slot, |
|
bitfield<MetadataSignatureBitval> sig) |
|
generates (ScriptKernelID scriptKernelID); |
|
|
|
/** |
|
* Creates a Script Invoke ID. |
|
* |
|
* @param script Script |
|
* @param slot Slot |
|
* @return scriptInvokeID Invoke Script's identifier |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptInvokeIDCreate(Script script, int32_t slot) |
|
generates (ScriptInvokeID scriptInvokeID); |
|
|
|
/** |
|
* TODO: describe the return value better. What is it? |
|
* |
|
* Creates a Script Field ID. |
|
* |
|
* @param script Script |
|
* @param slot Slot |
|
* @return scriptFieldID Script's Field identifier |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptFieldIDCreate(Script script, int32_t slot) |
|
generates (ScriptFieldID scriptFieldID); |
|
|
|
/** |
|
* TODO: add more description |
|
* |
|
* Creates a Script Group. |
|
* |
|
* @param kernels Collection of Scripts' Kernel identifiers |
|
* @param srcK Source Kernel identifiers |
|
* @param dstK Destination Kernel identifiers |
|
* @param dstF Destination Script Field identifiers |
|
* @param types Collection of Types describing data layout |
|
* @return scriptGroup Created Script Group |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptGroupCreate(vec<ScriptKernelID> kernels, vec<ScriptKernelID> srcK, |
|
vec<ScriptKernelID> dstK, vec<ScriptFieldID> dstF, |
|
vec<Type> types) |
|
generates (ScriptGroup scriptGroup); |
|
|
|
/** |
|
* Creates a Script Group. |
|
* |
|
* @param name Name |
|
* @param cacheDir Cache directory |
|
* @param closures Collection of Closures |
|
* @return scriptGroup2 Created Script Group |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptGroup2Create(string name, string cacheDir, vec<Closure> closures) |
|
generates (ScriptGroup2 scriptGroup2); |
|
|
|
/** |
|
* TODO: if SetInput/Output corresponds to the Java API setInput() and |
|
* setOutput(), which are documented as deprecated in API 23, do we need to |
|
* support them? Or can we fallback to the CPU when they're used? Or can't |
|
* we tell whether they're used early enough to do fallback? |
|
* |
|
* Sets an output of the ScriptGroup. This specifies an Allocation to be |
|
* used for the kernels that require an output Allocation visible after the |
|
* ScriptGroup is executed. |
|
* |
|
* @param sg Script Group |
|
* @param kid Script's Kernel identifier to be changed |
|
* @param alloc Allocation to be filled by output |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptGroupSetOutput(ScriptGroup sg, ScriptKernelID kid, Allocation alloc); |
|
|
|
/** |
|
* Sets an input of the Script Group. This specifies an Allocation to be |
|
* used for kernels that require an input Allocation provided from outside |
|
* of the Script Group. |
|
* |
|
* @param sg Script Group |
|
* @param kid Script's Kernel identifier to be changed |
|
* @param alloc Allocation to be read as input |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptGroupSetInput(ScriptGroup sg, ScriptKernelID kid, Allocation alloc); |
|
|
|
/** |
|
* Executes a Script Group. |
|
* |
|
* @param sg Script Group to be executed. |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptGroupExecute( ScriptGroup sg); |
|
|
|
/** |
|
* Frees any native resources associated with this object. The primary use |
|
* is to force immediate cleanup of resources when it is believed the GC |
|
* may not respond quickly enough. |
|
* |
|
* @param handle Opaque handle to the server-side object to be destroyed |
|
*/ |
|
@callflow(next={"*"}) |
|
objDestroy(ObjectBase obj); |
|
|
|
/** |
|
* Creates a Sampler. |
|
* |
|
* @param magFilter Magnification value for the filter |
|
* @param minFilter Minification value for the filter |
|
* @param wrapS S wrapping mode for the sampler |
|
* @param wrapT T wrapping mode for the sampler |
|
* @param wrapR R wrapping mode for the sampler |
|
* @param aniso Anisotropy setting for the sampler |
|
* @return sampler Created Sampler |
|
*/ |
|
@callflow(next={"*"}) |
|
samplerCreate(SamplerValue magFilter, SamplerValue minFilter, |
|
SamplerValue wrapS, SamplerValue wrapT, SamplerValue wrapR, |
|
float aniso) |
|
generates (Sampler sampler); |
|
|
|
/** |
|
* Binds an Allocation to a global pointer in the Script. |
|
* |
|
* @param script Script to be bound to |
|
* @param allocation Allocation to be bound |
|
* @param slot Slot of a global variable |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptBindAllocation(Script script, Allocation allocation, uint32_t slot); |
|
|
|
/** |
|
* TODO: is this necessary? |
|
* |
|
* Sets the timezone of a Script. |
|
* |
|
* @param script Script to be altered |
|
* @param timeZone Time Zone value as text |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptSetTimeZone(Script script, string timeZone); |
|
|
|
/** |
|
* TODO: can scriptInvoke be combined with scriptInvokeV? |
|
* |
|
* Launches an invokable function. |
|
* |
|
* @param vs Script to be invoked |
|
* @param slot Slot of invokable function |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptInvoke(Script vs, uint32_t slot); |
|
|
|
/** |
|
* Invokes a Script with values. |
|
* |
|
* @param vs Script to be invoked |
|
* @param slot Slot |
|
* @param data Data buffer of packed arguments |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptInvokeV(Script vs, uint32_t slot, vec<uint8_t> data); |
|
|
|
/** |
|
* TODO: add documentation for params |
|
* TODO: Should we rename "ScriptCall" to "LaunchOptions"? |
|
* |
|
* Launches a ForEach kernel. |
|
* |
|
* @param vs Script |
|
* @param slot Slot of ForEach Kernel |
|
* @param vains Collection of input Allocations or null |
|
* @param vaout Output Allocation or null |
|
* @param params Collection of parameters |
|
* @param sc Pointer to a ScriptCall, nullptr if unused |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptForEach(Script vs, uint32_t slot, vec<Allocation> vains, |
|
Allocation vaout, vec<uint8_t> params, Ptr sc); |
|
|
|
/** |
|
* Launches a Reduction kernel. |
|
* |
|
* @param vs Script |
|
* @param slot Slot of Reduction Kernel |
|
* @param vains Collection of input Allocations |
|
* @param vaout Output Allocation |
|
* @param sc Pointer to a ScriptCall, nullptr if unused |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptReduce(Script vs, uint32_t slot, vec<Allocation> vains, |
|
Allocation vaout, Ptr sc); |
|
|
|
/** |
|
* Sets a Script's integer variable to a value. |
|
* |
|
* @param vs RenderScript Script |
|
* @param slot Slot number of variable to be updated |
|
* @param value Value to be pushed to variable |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptSetVarI(Script vs, uint32_t slot, int32_t value); |
|
|
|
/** |
|
* Sets a Script's Object variable to a value |
|
* |
|
* @param vs RenderScript Script |
|
* @param slot Slot number of variable to be updated |
|
* @param obj ObjectBase |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptSetVarObj( Script vs, uint32_t slot, ObjectBase obj); |
|
|
|
/** |
|
* Sets a Script's long variable to a value. |
|
* |
|
* @param vs RenderScript Script |
|
* @param slot Slot number of variable to be updated |
|
* @param value Value to be pushed to variable |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptSetVarJ(Script vs, uint32_t slot, int64_t value); |
|
|
|
/** |
|
* Sets a Script's float variable to a value. |
|
* |
|
* @param vs RenderScript Script |
|
* @param slot Slot number of variable to be updated |
|
* @param value Value to be pushed to variable |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptSetVarF(Script vs, uint32_t slot, float value); |
|
|
|
/** |
|
* Sets a Script's double variable to a value. |
|
* |
|
* @param vs RenderScript Script |
|
* @param slot Slot number of variable to be updated |
|
* @param value Value to be pushed to variable |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptSetVarD(Script vs, uint32_t slot, double value); |
|
|
|
/** |
|
* Sets a Script's struct variable to a value. |
|
* |
|
* @param vs RenderScript Script |
|
* @param slot Slot number of variable to be updated |
|
* @param data Data to be pushed to variable |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptSetVarV(Script vs, uint32_t slot, vec<uint8_t> data); |
|
|
|
/** |
|
* TODO: Why do we have typed setters but only untyped getter? |
|
* |
|
* Retrieves the value from a global variable in a script. |
|
* |
|
* @param vs RenderScript Script |
|
* @param slot Slot number of variable to be read |
|
* @param len Size of data to be filled |
|
* @return data Data to be updated |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptGetVarV(Script vs, uint32_t slot, Size len) |
|
generates (vec<uint8_t> data); |
|
|
|
/** |
|
* TODO: Is this a value to be replicated for each member of the array? Or |
|
* is there a representation for each separate member? |
|
* |
|
* Sets the value of a global array of structs, given the Element and |
|
* dimension. |
|
* |
|
* @param vs RenderScript Script |
|
* @param slot Slot number of variable to be updated |
|
* @param data Data |
|
* @param ve Element |
|
* @param dims Collection of dimensions |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptSetVarVE(Script vs, uint32_t slot, vec<uint8_t> data, Element ve, |
|
vec<uint32_t> dims); |
|
|
|
/** |
|
* TODO: is cacheDir redundant with createCache() function? Can we remove |
|
* it? |
|
* TODO: define resName more clearly |
|
* |
|
* Creates a RenderScript C99 kernel script. |
|
* |
|
* @param resName Resource name of the bitcode |
|
* @param cacheDir Cache directory name |
|
* @param text The kernel's bitcode as a uint8_t vector |
|
* @return script Created Script |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptCCreate(string resName, string cacheDir, vec<uint8_t> text) |
|
generates (Script script); |
|
|
|
/** |
|
* Creates a RenderScript Intrinsic script. |
|
* |
|
* @param id Intrinsic Script identifier |
|
* @param elem Element |
|
* @return script Created Script |
|
*/ |
|
@callflow(next={"*"}) |
|
scriptIntrinsicCreate(ScriptIntrinsicID id, Element elem) |
|
generates (Script script); |
|
|
|
};
|
|
|