1a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul/*
2a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * Mesa 3-D graphics library
3a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul *
4a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * Copyright (C) 2011  VMware, Inc.  All Rights Reserved.
5a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul *
6a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
7a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * copy of this software and associated documentation files (the "Software"),
8a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * to deal in the Software without restriction, including without limitation
9a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * and/or sell copies of the Software, and to permit persons to whom the
11a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * Software is furnished to do so, subject to the following conditions:
12a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul *
13a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * The above copyright notice and this permission notice shall be included
14a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * in all copies or substantial portions of the Software.
15a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul *
16a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
193d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
203d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
213d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
223d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER DEALINGS IN THE SOFTWARE.
23a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul */
24a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
25a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
26a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul#ifndef TEXSTORAGE_H
27a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul#define TEXSTORAGE_H
28a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
295a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand/**
305a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand * \name Internal functions
315a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand */
325a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand/*@{*/
335a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand
345a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrandextern void
355a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand_mesa_texture_storage(struct gl_context *ctx, GLuint dims,
365a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand                      struct gl_texture_object *texObj,
375a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand                      GLenum target, GLsizei levels,
385a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand                      GLenum internalformat, GLsizei width,
395a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand                      GLsizei height, GLsizei depth, bool dsa);
405a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand
41a342becc490b38436396e98ee653a6b81c037663Tapani Pälli/**
42a342becc490b38436396e98ee653a6b81c037663Tapani Pälli * Texture width, height and depth check shared with the
43a342becc490b38436396e98ee653a6b81c037663Tapani Pälli * multisample variants of TexStorage functions.
44a342becc490b38436396e98ee653a6b81c037663Tapani Pälli *
45a342becc490b38436396e98ee653a6b81c037663Tapani Pälli * From OpenGL 4.5 Core spec, page 260 (section 8.19)
46a342becc490b38436396e98ee653a6b81c037663Tapani Pälli *
47a342becc490b38436396e98ee653a6b81c037663Tapani Pälli *     "An INVALID_VALUE error is generated if width, height, depth
48a342becc490b38436396e98ee653a6b81c037663Tapani Pälli *     or levels are less than 1, for commands with the corresponding
49a342becc490b38436396e98ee653a6b81c037663Tapani Pälli *     parameters."
50a342becc490b38436396e98ee653a6b81c037663Tapani Pälli *
51a342becc490b38436396e98ee653a6b81c037663Tapani Pälli * (referring to TextureStorage* commands, these also match values
52a342becc490b38436396e98ee653a6b81c037663Tapani Pälli * specified for OpenGL ES 3.1.)
53a342becc490b38436396e98ee653a6b81c037663Tapani Pälli */
54a342becc490b38436396e98ee653a6b81c037663Tapani Pällistatic inline bool
55a342becc490b38436396e98ee653a6b81c037663Tapani Pälli_mesa_valid_tex_storage_dim(GLsizei width, GLsizei height, GLsizei depth)
56a342becc490b38436396e98ee653a6b81c037663Tapani Pälli{
57a342becc490b38436396e98ee653a6b81c037663Tapani Pälli   if (width < 1 || height < 1 || depth < 1)
58a342becc490b38436396e98ee653a6b81c037663Tapani Pälli      return false;
59a342becc490b38436396e98ee653a6b81c037663Tapani Pälli   return true;
60a342becc490b38436396e98ee653a6b81c037663Tapani Pälli}
61a342becc490b38436396e98ee653a6b81c037663Tapani Pälli
625a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand/*@}*/
635a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand
645a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand/**
655a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand * \name API functions
665a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand */
675a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand/*@{*/
68a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
69a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paulextern void GLAPIENTRY
70a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul_mesa_TexStorage1D(GLenum target, GLsizei levels, GLenum internalformat,
71a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                   GLsizei width);
72a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
73a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
74a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paulextern void GLAPIENTRY
75a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul_mesa_TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat,
76a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                   GLsizei width, GLsizei height);
77a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
78a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
79a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paulextern void GLAPIENTRY
80a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul_mesa_TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat,
81a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                   GLsizei width, GLsizei height, GLsizei depth);
82a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
835a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrandextern void GLAPIENTRY
845a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand_mesa_TextureStorage1D(GLuint texture, GLsizei levels, GLenum internalformat,
855a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand                       GLsizei width);
865a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand
875a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand
885a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrandextern void GLAPIENTRY
895a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand_mesa_TextureStorage2D(GLuint texture, GLsizei levels, GLenum internalformat,
905a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand                       GLsizei width, GLsizei height);
915a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand
925a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand
935a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrandextern void GLAPIENTRY
945a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand_mesa_TextureStorage3D(GLuint texture, GLsizei levels, GLenum internalformat,
955a5fe9f308908a6c09f910429d0d3021fdbf7872Laura Ekstrand                       GLsizei width, GLsizei height, GLsizei depth);
96a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
97a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
98a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paulextern void GLAPIENTRY
99a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul_mesa_TextureStorage1DEXT(GLuint texture, GLenum target, GLsizei levels,
100a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                          GLenum internalformat,
101a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                          GLsizei width);
102a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
103a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paulextern void GLAPIENTRY
104a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul_mesa_TextureStorage2DEXT(GLuint texture, GLenum target, GLsizei levels,
105a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                          GLenum internalformat,
106a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                          GLsizei width, GLsizei height);
107a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
108a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paulextern void GLAPIENTRY
109a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul_mesa_TextureStorage3DEXT(GLuint texture, GLenum target, GLsizei levels,
110a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                          GLenum internalformat,
111a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul                          GLsizei width, GLsizei height, GLsizei depth);
112a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
1137f32b9560b63ffa6967bbc0c8e61d2cc30081ab3Chris Forbesextern GLboolean
114b590ffd0f95bfe5ff7d44412e4916bba40630be9Brian Paul_mesa_is_legal_tex_storage_format(const struct gl_context *ctx,
115b590ffd0f95bfe5ff7d44412e4916bba40630be9Brian Paul                                  GLenum internalformat);
1167f32b9560b63ffa6967bbc0c8e61d2cc30081ab3Chris Forbes
1171842dd08b83269816fe8eb8f2dcc1252f606fe48Eric Anholtextern GLboolean
11816f6d9cf5f93eb6cdd80e2b5f6cdd7dcfb30ea89Laura Ekstrand_mesa_AllocTextureStorage_sw(struct gl_context *ctx,
11916f6d9cf5f93eb6cdd80e2b5f6cdd7dcfb30ea89Laura Ekstrand                             struct gl_texture_object *texObj,
12016f6d9cf5f93eb6cdd80e2b5f6cdd7dcfb30ea89Laura Ekstrand                             GLsizei levels, GLsizei width,
12116f6d9cf5f93eb6cdd80e2b5f6cdd7dcfb30ea89Laura Ekstrand                             GLsizei height, GLsizei depth);
122a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul
123a8fcb7927b2f50886eb33e81aa7feeb96bc300e4Brian Paul#endif /* TEXSTORAGE_H */
124