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
203f30b6202dd5ad6ff66959131d216405850ed152Yang Ni#include <stdint.h>
21bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
22bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ninamespace llvm {
23bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass Module;
24bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni}
25bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
26bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ninamespace android {
27bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ninamespace spirit {
28bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
29bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass Builder;
30bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass Instruction;
31bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass Module;
323f30b6202dd5ad6ff66959131d216405850ed152Yang Niclass Pass;
33bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Niclass VariableInst;
34bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
35bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni// TODO: avoid exposing these methods while still unit testing them
36bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Nivoid AddHeader(Module *m);
37bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang NiVariableInst *AddBuffer(Instruction *elementType, uint32_t binding, Builder &b,
38bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni                        Module *m);
39bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
40bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Nibool AddWrapper(const char *name, const uint32_t signature,
41bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni                const uint32_t numInput, Builder &b, Module *m);
42bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
43bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni// Find the LLVM generated buffer for all non-allocation glboal variables, and
44bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni// correctly decorate it and its type with annotations for binding numbers, etc.
45bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Nibool DecorateGlobalBuffer(llvm::Module &M, Builder &b, Module *m);
46bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
47bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni} // namespace spirit
48bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni} // namespace android
49bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni
503f30b6202dd5ad6ff66959131d216405850ed152Yang Ninamespace rs2spirv {
513f30b6202dd5ad6ff66959131d216405850ed152Yang Ni
52eb6548743c40f4129ca55a58ff2d5254f22e95e1Yang Niandroid::spirit::Pass* CreateWrapperPass(const llvm::Module &LLVMModule);
533f30b6202dd5ad6ff66959131d216405850ed152Yang Ni
543f30b6202dd5ad6ff66959131d216405850ed152Yang Ni} // namespace rs2spirv
553f30b6202dd5ad6ff66959131d216405850ed152Yang Ni
56bf22a8ab4f46a98ee37f95fc0402744132cc3ed2Yang Ni#endif
57