shaderimage.h revision b8e80941
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