1848b8605Smrg/* 2848b8605Smrg * Copyright 2013 Intel Corporation 3848b8605Smrg * 4848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 5848b8605Smrg * copy of this software and associated documentation files (the "Software"), 6848b8605Smrg * to deal in the Software without restriction, including without limitation 7848b8605Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8848b8605Smrg * and/or sell copies of the Software, and to permit persons to whom the 9848b8605Smrg * Software is furnished to do so, subject to the following conditions: 10848b8605Smrg * 11848b8605Smrg * The above copyright notice and this permission notice (including the next 12848b8605Smrg * paragraph) shall be included in all copies or substantial portions of the 13848b8605Smrg * Software. 14848b8605Smrg * 15848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16848b8605Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18848b8605Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19848b8605Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20848b8605Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21848b8605Smrg * DEALINGS IN THE SOFTWARE. 22848b8605Smrg * 23848b8605Smrg * Authors: 24848b8605Smrg * Francisco Jerez <currojerez@riseup.net> 25848b8605Smrg */ 26848b8605Smrg 27848b8605Smrg#ifndef SHADERIMAGE_H 28848b8605Smrg#define SHADERIMAGE_H 29848b8605Smrg 30848b8605Smrg#include "glheader.h" 31b8e80941Smrg#include "formats.h" 32b8e80941Smrg 33b8e80941Smrg#ifdef __cplusplus 34b8e80941Smrgextern "C" { 35b8e80941Smrg#endif 36848b8605Smrg 37848b8605Smrgstruct gl_context; 38848b8605Smrg 39848b8605Smrg/** 40b8e80941Smrg * Get the matching mesa_format for a shader image format GL enum. 41b8e80941Smrg */ 42b8e80941Smrgmesa_format 43b8e80941Smrg_mesa_get_shader_image_format(GLenum format); 44b8e80941Smrg 45b8e80941Smrg/** 46b8e80941Smrg * Get the GL image format class for a shader image format GL enum 47b8e80941Smrg */ 48b8e80941SmrgGLenum 49b8e80941Smrg_mesa_get_image_format_class(GLenum format); 50b8e80941Smrg 51b8e80941Smrg/** 52b8e80941Smrg * Return whether an image format should be supported based on the current API 53b8e80941Smrg * version of the context. 54848b8605Smrg */ 55b8e80941Smrgbool 56b8e80941Smrg_mesa_is_shader_image_format_supported(const struct gl_context *ctx, 57b8e80941Smrg GLenum format); 58b8e80941Smrg 59b8e80941Smrg/** 60b8e80941Smrg * Get a single image unit struct with the default state. 61b8e80941Smrg */ 62b8e80941Smrgstruct gl_image_unit 63b8e80941Smrg_mesa_default_image_unit(struct gl_context *ctx); 64b8e80941Smrg 65b8e80941Smrg/** 66b8e80941Smrg * Initialize a context's shader image units to the default state. 67b8e80941Smrg */ 68b8e80941Smrgvoid 69b8e80941Smrg_mesa_init_image_units(struct gl_context *ctx); 70b8e80941Smrg 71848b8605Smrgvoid 72b8e80941Smrg_mesa_free_image_textures(struct gl_context *ctx); 73b8e80941Smrg 74b8e80941Smrg/** 75b8e80941Smrg * Return GL_TRUE if the state of the image unit passed as argument is valid 76b8e80941Smrg * and access from the shader is allowed. Otherwise loads from this unit 77b8e80941Smrg * should return zero and stores should have no effect. 78b8e80941Smrg * 79b8e80941Smrg * The result depends on context state other than the passed image unit, part 80b8e80941Smrg * of the _NEW_TEXTURE_OBJECT set. 81b8e80941Smrg */ 82b8e80941SmrgGLboolean 83b8e80941Smrg_mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u); 84b8e80941Smrg 85b8e80941Smrgvoid GLAPIENTRY 86b8e80941Smrg_mesa_BindImageTexture_no_error(GLuint unit, GLuint texture, GLint level, 87b8e80941Smrg GLboolean layered, GLint layer, GLenum access, 88b8e80941Smrg GLenum format); 89848b8605Smrg 90848b8605Smrgvoid GLAPIENTRY 91848b8605Smrg_mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level, 92848b8605Smrg GLboolean layered, GLint layer, GLenum access, 93848b8605Smrg GLenum format); 94848b8605Smrg 95848b8605Smrgvoid GLAPIENTRY 96b8e80941Smrg_mesa_BindImageTextures_no_error(GLuint first, GLsizei count, 97b8e80941Smrg const GLuint *textures); 98848b8605Smrg 99848b8605Smrgvoid GLAPIENTRY 100b8e80941Smrg_mesa_BindImageTextures(GLuint first, GLsizei count, const GLuint *textures); 101b8e80941Smrg 102b8e80941Smrg#ifdef __cplusplus 103b8e80941Smrg} 104b8e80941Smrg#endif 105848b8605Smrg 106848b8605Smrg#endif 107