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