/** 
 **
 ** Copyright 2010, 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 _TEXTURE_H_
#define _TEXTURE_H_

#if !USE_LLVM_TEXTURE_SAMPLER

namespace llvm 
{
    class Module;
    class ExecutionEngine;
};

extern const struct GGLContext * textureGGLContext; // for getting wrap mode, dimensions, data

void DeclareTextureFunctions(llvm::Module * mod);
void AddTextureFunctionMappings(llvm::Module * mod, llvm::ExecutionEngine * ee);

#include "pixelflinger2/pixelflinger2_format.h"

template<GGLPixelFormat format>
void tex2d_int32(unsigned sample[4], const float tex_coord[4], const unsigned sampler);

#endif // #if !USE_LLVM_TEXTURE_SAMPLER

void InitializeTextureFunctions(struct GGLInterface * iface);

#endif // #ifndef _TEXTURE_H_