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