summaryrefslogtreecommitdiff
path: root/rsov/driver/rsovAllocation.h
diff options
context:
space:
mode:
authorYang Ni <yangni@google.com>2016-11-11 12:30:09 -0800
committerYang Ni <yangni@google.com>2016-12-06 09:24:52 -0800
commit75f0d3110b04346b901771f96ce15cdbe907278f (patch)
treea13ce3211bfb37b0d3088c5f5ff83e247c4167b2 /rsov/driver/rsovAllocation.h
parent6babd9ca03e1379380af0c1cfde6f6d3e92ccd29 (diff)
downloadrs-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.h216
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