Wrapper.h revision bf22a8ab4f46a98ee37f95fc0402744132cc3ed2
1bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni/*
2bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * Copyright 2017, The Android Open Source Project
3bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni *
4bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * Licensed under the Apache License, Version 2.0 (the "License");
5bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * you may not use this file except in compliance with the License.
6bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * You may obtain a copy of the License at
7bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni *
8bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni *     http://www.apache.org/licenses/LICENSE-2.0
9bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni *
10bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * Unless required by applicable law or agreed to in writing, software
11bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * distributed under the License is distributed on an "AS IS" BASIS,
12bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * See the License for the specific language governing permissions and
14bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni * limitations under the License.
15bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni */
16bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
17bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni#ifndef WRAPPER_H
18bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni#define WRAPPER_H
19bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
20bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni#include <vector>
21bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
22bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ninamespace bcinfo {
23bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass MetadataExtractor;
24bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni}
25bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
26bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ninamespace llvm {
27bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass Module;
28bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni}
29bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
30bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ninamespace rs2spirv {
31bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
32bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Nistd::vector<uint32_t>
33bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang NiAddGLComputeWrappers(const std::vector<uint32_t> &kernel_spirv,
34bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni                     const bcinfo::MetadataExtractor &metadata, llvm::Module &M,
35bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni                     int *error);
36bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
37bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni} // namespace rs2spirv
38bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
39bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ninamespace android {
40bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ninamespace spirit {
41bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
42bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass Builder;
43bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass Instruction;
44bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass Module;
45bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass VariableInst;
46bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
47bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni// TODO: avoid exposing these methods while still unit testing them
48bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Nivoid AddHeader(Module *m);
49bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang NiVariableInst *AddBuffer(Instruction *elementType, uint32_t binding, Builder &b,
50bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni                        Module *m);
51bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
52bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Nibool AddWrapper(const char *name, const uint32_t signature,
53bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni                const uint32_t numInput, Builder &b, Module *m);
54bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
55bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni// Find the LLVM generated buffer for all non-allocation glboal variables, and
56bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni// correctly decorate it and its type with annotations for binding numbers, etc.
57bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Nibool DecorateGlobalBuffer(llvm::Module &M, Builder &b, Module *m);
58bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
59bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni} // namespace spirit
60bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni} // namespace android
61bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
62bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni#endif
63