diff options
author | Yang Ni <yangni@google.com> | 2016-11-11 12:30:09 -0800 |
---|---|---|
committer | Yang Ni <yangni@google.com> | 2016-12-06 09:24:52 -0800 |
commit | 75f0d3110b04346b901771f96ce15cdbe907278f (patch) | |
tree | a13ce3211bfb37b0d3088c5f5ff83e247c4167b2 /rsov/driver/rsovAllocation.h | |
parent | 6babd9ca03e1379380af0c1cfde6f6d3e92ccd29 (diff) | |
download | rs-75f0d3110b04346b901771f96ce15cdbe907278f.tar.gz |
Initial driver for RSoV (RenderScript over Vulkan/SPIR-V)
Bug: 30964317
Supports the following:
* Allocations of 32-bit integers and floating point numbers and vectors
* Single-input single-output kernels
* Co-existence of RSoV scripts and CPU intrinsics
Added default .clang-format for driver code using Google C++ code style.
The RSoV driver is loaded, if and only if the property debug.rs.rsov is
set to non-zero.
Test: RSTest and CTS with debug.rs.rsov set to 0; and RSoVTest with
debug.rs.rsov set to 1.
Change-Id: If63370a502d499e8fc5f4bbd2e90ce84b167c331
Diffstat (limited to 'rsov/driver/rsovAllocation.h')
-rw-r--r-- | rsov/driver/rsovAllocation.h | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/rsov/driver/rsovAllocation.h b/rsov/driver/rsovAllocation.h new file mode 100644 index 00000000..24f4cf0a --- /dev/null +++ b/rsov/driver/rsovAllocation.h @@ -0,0 +1,216 @@ +/* + * Copyright (C) 2016 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. + */ + +#ifndef RSOV_ALLOCATION_H +#define RSOV_ALLOCATION_H + +#include <vulkan/vulkan.h> + +#include "rsDefines.h" +#include "rs_hal.h" +#include "system/window.h" + +namespace android { +namespace renderscript { + +class Allocation; +class Context; +class Type; + +namespace rsov { + +class RSoVContext; + +class RSoVAllocation { + public: + RSoVAllocation(RSoVContext *context, const Type *type); + ~RSoVAllocation(); + + uint32_t getWidth() const { return mWidth; } + uint32_t getHeight() const { return mHeight; } + uint32_t getDepth() const { return mDepth; } + const VkDescriptorImageInfo *getImageInfo() const { return &mImageInfo; } + char *getHostPtr() const { return mPtr; } + + private: + void InitImage(); + + char *mPtr; // Host pointer to mmapped device memory for the Allocation + RSoVContext *mRSoV; + VkDevice mDevice; + const Type *mType; + const uint32_t mWidth; + const uint32_t mHeight; + const uint32_t mDepth; + + VkFormat mFormat; + VkDescriptorImageInfo mImageInfo; + VkDeviceMemory mMem; + VkImage mImage; + VkImageView mImageView; + VkImageLayout mImageLayout; + + // TODO: add an underneath buffer too +}; + +} // namespace rsov +} // namespace renderscript +} // namespace android + +extern bool rsovAllocationInit(const android::renderscript::Context *rsc, + android::renderscript::Allocation *alloc, + bool forceZero); + +extern void rsovAllocationDestroy(const android::renderscript::Context *rsc, + android::renderscript::Allocation *alloc); + +extern void rsovAllocationData1D(const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, + uint32_t xoff, uint32_t lod, size_t count, + const void *data, size_t sizeBytes); + +extern void rsovAllocationData2D(const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, + uint32_t xoff, uint32_t yoff, uint32_t lod, + RsAllocationCubemapFace face, uint32_t w, + uint32_t h, const void *data, size_t sizeBytes, + size_t stride); + +extern void rsovAllocationData3D(const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, + uint32_t xoff, uint32_t yoff, uint32_t zoff, + uint32_t lod, uint32_t w, uint32_t h, + uint32_t d, const void *data, size_t sizeBytes, + size_t stride); + +extern void rsovAllocationRead1D(const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, + uint32_t xoff, uint32_t lod, size_t count, + void *data, size_t sizeBytes); + +extern void rsovAllocationRead2D(const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, + uint32_t xoff, uint32_t yoff, uint32_t lod, + RsAllocationCubemapFace face, uint32_t w, + uint32_t h, void *data, size_t sizeBytes, + size_t stride); + +extern void rsovAllocationRead3D(const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, + uint32_t xoff, uint32_t yoff, uint32_t zoff, + uint32_t lod, uint32_t w, uint32_t h, + uint32_t d, void *data, size_t sizeBytes, + size_t stride); + +extern void *rsovAllocationLock1D( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc); + +extern void rsovAllocationUnlock1D( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc); + +extern void rsovAllocationData1D_alloc( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff, + uint32_t dstLod, size_t count, + const android::renderscript::Allocation *srcAlloc, uint32_t srcXoff, + uint32_t srcLod); + +extern void rsovAllocationData2D_alloc_script( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff, + uint32_t dstYoff, uint32_t dstLod, RsAllocationCubemapFace dstFace, + uint32_t w, uint32_t h, const android::renderscript::Allocation *srcAlloc, + uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, + RsAllocationCubemapFace srcFace); + +extern void rsovAllocationData2D_alloc( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff, + uint32_t dstYoff, uint32_t dstLod, RsAllocationCubemapFace dstFace, + uint32_t w, uint32_t h, const android::renderscript::Allocation *srcAlloc, + uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, + RsAllocationCubemapFace srcFace); + +extern void rsovAllocationData3D_alloc_script( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff, + uint32_t dstYoff, uint32_t dstZoff, uint32_t dstLod, uint32_t w, uint32_t h, + uint32_t d, const android::renderscript::Allocation *srcAlloc, + uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, uint32_t srcLod); + +extern void rsovAllocationData3D_alloc( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff, + uint32_t dstYoff, uint32_t dstZoff, uint32_t dstLod, uint32_t w, uint32_t h, + uint32_t d, const android::renderscript::Allocation *srcAlloc, + uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, uint32_t srcLod); + +extern void rsovAllocationAdapterOffset( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc); + +extern bool rsovAllocationAdapterInit(const android::renderscript::Context *rsc, + android::renderscript::Allocation *alloc); + +extern void rsovAllocationSyncAll( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, RsAllocationUsageType src); + +extern void rsovAllocationMarkDirty( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc); + +extern void rsovAllocationResize(const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, + const android::renderscript::Type *newType, + bool zeroNew); + +extern void rsovAllocationGenerateMipmaps( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc); + +extern uint32_t rsovAllocationGrallocBits( + const android::renderscript::Context *rsc, + android::renderscript::Allocation *alloc); + +extern void rsovAllocationUpdateCachedObject( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, + android::renderscript::rs_allocation *obj); + +extern void rsovAllocationSetSurface(const android::renderscript::Context *rsc, + android::renderscript::Allocation *alloc, + ANativeWindow *nw); + +extern void rsovAllocationIoSend(const android::renderscript::Context *rsc, + android::renderscript::Allocation *alloc); + +extern void rsovAllocationIoReceive(const android::renderscript::Context *rsc, + android::renderscript::Allocation *alloc); + +extern void rsovAllocationElementData( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, uint32_t x, uint32_t y, + uint32_t z, const void *data, uint32_t cIdx, size_t sizeBytes); + +extern void rsovAllocationElementRead( + const android::renderscript::Context *rsc, + const android::renderscript::Allocation *alloc, uint32_t x, uint32_t y, + uint32_t z, void *data, uint32_t cIdx, size_t sizeBytes); + +#endif // RSOV_ALLOCATION_H |