1 /** 2 * \file teximage.h 3 * Texture images manipulation functions. 4 */ 5 6 /* 7 * Mesa 3-D graphics library 8 * 9 * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. 10 * 11 * Permission is hereby granted, free of charge, to any person obtaining a 12 * copy of this software and associated documentation files (the "Software"), 13 * to deal in the Software without restriction, including without limitation 14 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 15 * and/or sell copies of the Software, and to permit persons to whom the 16 * Software is furnished to do so, subject to the following conditions: 17 * 18 * The above copyright notice and this permission notice shall be included 19 * in all copies or substantial portions of the Software. 20 * 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 25 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 26 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 * OTHER DEALINGS IN THE SOFTWARE. 28 */ 29 30 31 #ifndef TEXIMAGE_H 32 #define TEXIMAGE_H 33 34 35 #include "mtypes.h" 36 #include "formats.h" 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 /** Is the given value one of the 6 cube faces? */ 43 static inline GLboolean 44 _mesa_is_cube_face(GLenum target) 45 { 46 return (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && 47 target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z); 48 } 49 50 51 /** 52 * Return number of faces for a texture target. This will be 6 for 53 * cube maps and 1 otherwise. 54 * NOTE: this function is not used for cube map arrays which operate 55 * more like 2D arrays than cube maps. 56 */ 57 static inline GLuint 58 _mesa_num_tex_faces(GLenum target) 59 { 60 switch (target) { 61 case GL_TEXTURE_CUBE_MAP: 62 case GL_PROXY_TEXTURE_CUBE_MAP: 63 return 6; 64 default: 65 return 1; 66 } 67 } 68 69 70 /** 71 * If the target is GL_TEXTURE_CUBE_MAP, return one of the 72 * GL_TEXTURE_CUBE_MAP_POSITIVE/NEGATIVE_X/Y/Z targets corresponding to 73 * the face parameter. 74 * Else, return target as-is. 75 */ 76 static inline GLenum 77 _mesa_cube_face_target(GLenum target, unsigned face) 78 { 79 if (target == GL_TEXTURE_CUBE_MAP) { 80 assert(face < 6); 81 return GL_TEXTURE_CUBE_MAP_POSITIVE_X + face; 82 } 83 else { 84 return target; 85 } 86 } 87 88 89 /** 90 * For cube map faces, return a face index in [0,5]. 91 * For other targets return 0; 92 */ 93 static inline GLuint 94 _mesa_tex_target_to_face(GLenum target) 95 { 96 if (_mesa_is_cube_face(target)) 97 return (GLuint) target - (GLuint) GL_TEXTURE_CUBE_MAP_POSITIVE_X; 98 else 99 return 0; 100 } 101 102 103 /** Are any of the dimensions of given texture equal to zero? */ 104 static inline GLboolean 105 _mesa_is_zero_size_texture(const struct gl_texture_image *texImage) 106 { 107 return (texImage->Width == 0 || 108 texImage->Height == 0 || 109 texImage->Depth == 0); 110 } 111 112 /** \name Internal functions */ 113 /*@{*/ 114 115 extern GLboolean 116 _mesa_is_proxy_texture(GLenum target); 117 118 extern bool 119 _mesa_is_array_texture(GLenum target); 120 121 122 extern void 123 _mesa_delete_texture_image( struct gl_context *ctx, 124 struct gl_texture_image *teximage ); 125 126 127 extern void 128 _mesa_init_teximage_fields(struct gl_context *ctx, 129 struct gl_texture_image *img, 130 GLsizei width, GLsizei height, GLsizei depth, 131 GLint border, GLenum internalFormat, 132 mesa_format format); 133 extern void 134 _mesa_init_teximage_fields_ms(struct gl_context *ctx, 135 struct gl_texture_image *img, 136 GLsizei width, GLsizei height, GLsizei depth, 137 GLint border, GLenum internalFormat, 138 mesa_format format, 139 GLuint numSamples, 140 GLboolean fixedSampleLocations); 141 142 143 extern mesa_format 144 _mesa_choose_texture_format(struct gl_context *ctx, 145 struct gl_texture_object *texObj, 146 GLenum target, GLint level, 147 GLenum internalFormat, GLenum format, GLenum type); 148 149 extern void 150 _mesa_update_fbo_texture(struct gl_context *ctx, 151 struct gl_texture_object *texObj, 152 GLuint face, GLuint level); 153 154 extern void 155 _mesa_clear_texture_image(struct gl_context *ctx, 156 struct gl_texture_image *texImage); 157 158 159 extern struct gl_texture_image * 160 _mesa_select_tex_image(const struct gl_texture_object *texObj, 161 GLenum target, GLint level); 162 163 164 extern struct gl_texture_image * 165 _mesa_get_tex_image(struct gl_context *ctx, struct gl_texture_object *texObj, 166 GLenum target, GLint level); 167 168 mesa_format 169 _mesa_get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat); 170 171 /** 172 * Return the base-level texture image for the given texture object. 173 */ 174 static inline const struct gl_texture_image * 175 _mesa_base_tex_image(const struct gl_texture_object *texObj) 176 { 177 return texObj->Image[0][texObj->BaseLevel]; 178 } 179 180 181 extern GLint 182 _mesa_max_texture_levels(struct gl_context *ctx, GLenum target); 183 184 185 extern GLboolean 186 _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, 187 GLuint numLevels, GLint level, 188 mesa_format format, GLuint numSamples, 189 GLint width, GLint height, GLint depth); 190 191 extern GLboolean 192 _mesa_target_can_be_compressed(const struct gl_context *ctx, GLenum target, 193 GLenum intFormat, GLenum *error); 194 195 extern GLint 196 _mesa_get_texture_dimensions(GLenum target); 197 198 extern GLboolean 199 _mesa_tex_target_is_layered(GLenum target); 200 201 extern GLuint 202 _mesa_get_texture_layers(const struct gl_texture_object *texObj, GLint level); 203 204 extern GLsizei 205 _mesa_get_tex_max_num_levels(GLenum target, GLsizei width, GLsizei height, 206 GLsizei depth); 207 208 extern GLboolean 209 _mesa_legal_texture_dimensions(struct gl_context *ctx, GLenum target, 210 GLint level, GLint width, GLint height, 211 GLint depth, GLint border); 212 213 extern mesa_format 214 _mesa_validate_texbuffer_format(const struct gl_context *ctx, 215 GLenum internalFormat); 216 217 218 bool 219 _mesa_legal_texture_base_format_for_target(struct gl_context *ctx, 220 GLenum target, 221 GLenum internalFormat); 222 223 bool 224 _mesa_format_no_online_compression(const struct gl_context *ctx, GLenum format); 225 226 GLboolean 227 _mesa_is_renderable_texture_format(const struct gl_context *ctx, 228 GLenum internalformat); 229 230 extern void 231 _mesa_texture_sub_image(struct gl_context *ctx, GLuint dims, 232 struct gl_texture_object *texObj, 233 struct gl_texture_image *texImage, 234 GLenum target, GLint level, 235 GLint xoffset, GLint yoffset, GLint zoffset, 236 GLsizei width, GLsizei height, GLsizei depth, 237 GLenum format, GLenum type, const GLvoid *pixels, 238 bool dsa); 239 240 extern void 241 _mesa_texture_storage_ms_memory(struct gl_context *ctx, GLuint dims, 242 struct gl_texture_object *texObj, 243 struct gl_memory_object *memObj, 244 GLenum target, GLsizei samples, 245 GLenum internalFormat, GLsizei width, 246 GLsizei height, GLsizei depth, 247 GLboolean fixedSampleLocations, 248 GLuint64 offset, const char* func); 249 250 bool 251 _mesa_is_cube_map_texture(GLenum target); 252 253 /*@}*/ 254 255 256 /** \name API entry point functions */ 257 /*@{*/ 258 259 extern void GLAPIENTRY 260 _mesa_TexImage1D( GLenum target, GLint level, GLint internalformat, 261 GLsizei width, GLint border, 262 GLenum format, GLenum type, const GLvoid *pixels ); 263 264 265 extern void GLAPIENTRY 266 _mesa_TexImage2D( GLenum target, GLint level, GLint internalformat, 267 GLsizei width, GLsizei height, GLint border, 268 GLenum format, GLenum type, const GLvoid *pixels ); 269 270 271 extern void GLAPIENTRY 272 _mesa_TexImage3D( GLenum target, GLint level, GLint internalformat, 273 GLsizei width, GLsizei height, GLsizei depth, GLint border, 274 GLenum format, GLenum type, const GLvoid *pixels ); 275 276 277 extern void GLAPIENTRY 278 _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalformat, 279 GLsizei width, GLsizei height, GLsizei depth, 280 GLint border, GLenum format, GLenum type, 281 const GLvoid *pixels ); 282 283 extern void GLAPIENTRY 284 _mesa_TexImage1D_no_error(GLenum target, GLint level, GLint internalformat, 285 GLsizei width, GLint border, 286 GLenum format, GLenum type, const GLvoid *pixels); 287 288 extern void GLAPIENTRY 289 _mesa_TexImage2D_no_error(GLenum target, GLint level, GLint internalformat, 290 GLsizei width, GLsizei height, GLint border, 291 GLenum format, GLenum type, const GLvoid *pixels); 292 293 extern void GLAPIENTRY 294 _mesa_TexImage3D_no_error(GLenum target, GLint level, GLint internalformat, 295 GLsizei width, GLsizei height, GLsizei depth, 296 GLint border, GLenum format, GLenum type, 297 const GLvoid *pixels); 298 299 extern void GLAPIENTRY 300 _mesa_EGLImageTargetTexture2DOES( GLenum target, GLeglImageOES image ); 301 302 void GLAPIENTRY 303 _mesa_TexSubImage1D_no_error(GLenum target, GLint level, GLint xoffset, 304 GLsizei width, 305 GLenum format, GLenum type, 306 const GLvoid *pixels); 307 308 extern void GLAPIENTRY 309 _mesa_TexSubImage1D( GLenum target, GLint level, GLint xoffset, 310 GLsizei width, 311 GLenum format, GLenum type, 312 const GLvoid *pixels ); 313 314 void GLAPIENTRY 315 _mesa_TexSubImage2D_no_error(GLenum target, GLint level, 316 GLint xoffset, GLint yoffset, 317 GLsizei width, GLsizei height, 318 GLenum format, GLenum type, 319 const GLvoid *pixels); 320 321 extern void GLAPIENTRY 322 _mesa_TexSubImage2D( GLenum target, GLint level, 323 GLint xoffset, GLint yoffset, 324 GLsizei width, GLsizei height, 325 GLenum format, GLenum type, 326 const GLvoid *pixels ); 327 328 void GLAPIENTRY 329 _mesa_TexSubImage3D_no_error(GLenum target, GLint level, 330 GLint xoffset, GLint yoffset, GLint zoffset, 331 GLsizei width, GLsizei height, GLsizei depth, 332 GLenum format, GLenum type, 333 const GLvoid *pixels); 334 335 extern void GLAPIENTRY 336 _mesa_TexSubImage3D( GLenum target, GLint level, 337 GLint xoffset, GLint yoffset, GLint zoffset, 338 GLsizei width, GLsizei height, GLsizei depth, 339 GLenum format, GLenum type, 340 const GLvoid *pixels ); 341 342 void GLAPIENTRY 343 _mesa_TextureSubImage1D_no_error(GLuint texture, GLint level, GLint xoffset, 344 GLsizei width, GLenum format, GLenum type, 345 const GLvoid *pixels); 346 347 extern void GLAPIENTRY 348 _mesa_TextureSubImage1D(GLuint texture, GLint level, GLint xoffset, 349 GLsizei width, 350 GLenum format, GLenum type, 351 const GLvoid *pixels); 352 353 void GLAPIENTRY 354 _mesa_TextureSubImage2D_no_error(GLuint texture, GLint level, GLint xoffset, 355 GLint yoffset, GLsizei width, GLsizei height, 356 GLenum format, GLenum type, 357 const GLvoid *pixels); 358 359 extern void GLAPIENTRY 360 _mesa_TextureSubImage2D(GLuint texture, GLint level, 361 GLint xoffset, GLint yoffset, 362 GLsizei width, GLsizei height, 363 GLenum format, GLenum type, 364 const GLvoid *pixels); 365 366 void GLAPIENTRY 367 _mesa_TextureSubImage3D_no_error(GLuint texture, GLint level, GLint xoffset, 368 GLint yoffset, GLint zoffset, GLsizei width, 369 GLsizei height, GLsizei depth, GLenum format, 370 GLenum type, const GLvoid *pixels); 371 372 extern void GLAPIENTRY 373 _mesa_TextureSubImage3D(GLuint texture, GLint level, 374 GLint xoffset, GLint yoffset, GLint zoffset, 375 GLsizei width, GLsizei height, GLsizei depth, 376 GLenum format, GLenum type, 377 const GLvoid *pixels); 378 379 380 extern void GLAPIENTRY 381 _mesa_CopyTexImage1D(GLenum target, GLint level, GLenum internalformat, 382 GLint x, GLint y, GLsizei width, GLint border); 383 384 385 extern void GLAPIENTRY 386 _mesa_CopyTexImage2D( GLenum target, GLint level, 387 GLenum internalformat, GLint x, GLint y, 388 GLsizei width, GLsizei height, GLint border ); 389 390 391 extern void GLAPIENTRY 392 _mesa_CopyTexImage1D_no_error(GLenum target, GLint level, GLenum internalformat, 393 GLint x, GLint y, GLsizei width, GLint border); 394 395 396 extern void GLAPIENTRY 397 _mesa_CopyTexImage2D_no_error(GLenum target, GLint level, GLenum internalformat, 398 GLint x, GLint y, GLsizei width, GLsizei height, 399 GLint border ); 400 401 402 extern void GLAPIENTRY 403 _mesa_CopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, 404 GLint x, GLint y, GLsizei width ); 405 406 407 extern void GLAPIENTRY 408 _mesa_CopyTexSubImage2D( GLenum target, GLint level, 409 GLint xoffset, GLint yoffset, 410 GLint x, GLint y, GLsizei width, GLsizei height ); 411 412 413 extern void GLAPIENTRY 414 _mesa_CopyTexSubImage3D( GLenum target, GLint level, 415 GLint xoffset, GLint yoffset, GLint zoffset, 416 GLint x, GLint y, GLsizei width, GLsizei height ); 417 418 extern void GLAPIENTRY 419 _mesa_CopyTextureSubImage1D(GLuint texture, GLint level, 420 GLint xoffset, GLint x, GLint y, GLsizei width); 421 422 extern void GLAPIENTRY 423 _mesa_CopyTextureSubImage2D(GLuint texture, GLint level, 424 GLint xoffset, GLint yoffset, 425 GLint x, GLint y, 426 GLsizei width, GLsizei height); 427 428 extern void GLAPIENTRY 429 _mesa_CopyTextureSubImage3D(GLuint texture, GLint level, 430 GLint xoffset, GLint yoffset, GLint zoffset, 431 GLint x, GLint y, 432 GLsizei width, GLsizei height); 433 434 extern void GLAPIENTRY 435 _mesa_CopyTexSubImage1D_no_error(GLenum target, GLint level, GLint xoffset, 436 GLint x, GLint y, GLsizei width ); 437 438 extern void GLAPIENTRY 439 _mesa_CopyTexSubImage2D_no_error(GLenum target, GLint level, GLint xoffset, 440 GLint yoffset, GLint x, GLint y, GLsizei width, 441 GLsizei height); 442 443 extern void GLAPIENTRY 444 _mesa_CopyTexSubImage3D_no_error(GLenum target, GLint level, GLint xoffset, 445 GLint yoffset, GLint zoffset, GLint x, GLint y, 446 GLsizei width, GLsizei height); 447 448 extern void GLAPIENTRY 449 _mesa_CopyTextureSubImage1D_no_error(GLuint texture, GLint level, GLint xoffset, 450 GLint x, GLint y, GLsizei width); 451 452 extern void GLAPIENTRY 453 _mesa_CopyTextureSubImage2D_no_error(GLuint texture, GLint level, GLint xoffset, 454 GLint yoffset, GLint x, GLint y, 455 GLsizei width, GLsizei height); 456 457 extern void GLAPIENTRY 458 _mesa_CopyTextureSubImage3D_no_error(GLuint texture, GLint level, GLint xoffset, 459 GLint yoffset, GLint zoffset, GLint x, 460 GLint y, GLsizei width, GLsizei height); 461 462 extern void GLAPIENTRY 463 _mesa_ClearTexSubImage( GLuint texture, GLint level, 464 GLint xoffset, GLint yoffset, GLint zoffset, 465 GLsizei width, GLsizei height, GLsizei depth, 466 GLenum format, GLenum type, const void *data ); 467 468 extern void GLAPIENTRY 469 _mesa_ClearTexImage( GLuint texture, GLint level, 470 GLenum format, GLenum type, const void *data ); 471 472 extern void GLAPIENTRY 473 _mesa_CompressedTexImage1D(GLenum target, GLint level, 474 GLenum internalformat, GLsizei width, 475 GLint border, GLsizei imageSize, 476 const GLvoid *data); 477 478 extern void GLAPIENTRY 479 _mesa_CompressedTexImage2D(GLenum target, GLint level, 480 GLenum internalformat, GLsizei width, 481 GLsizei height, GLint border, GLsizei imageSize, 482 const GLvoid *data); 483 484 extern void GLAPIENTRY 485 _mesa_CompressedTexImage3D(GLenum target, GLint level, 486 GLenum internalformat, GLsizei width, 487 GLsizei height, GLsizei depth, GLint border, 488 GLsizei imageSize, const GLvoid *data); 489 490 extern void GLAPIENTRY 491 _mesa_CompressedTexImage1D_no_error(GLenum target, GLint level, 492 GLenum internalformat, GLsizei width, 493 GLint border, GLsizei imageSize, 494 const GLvoid *data); 495 496 extern void GLAPIENTRY 497 _mesa_CompressedTexImage2D_no_error(GLenum target, GLint level, 498 GLenum internalformat, GLsizei width, 499 GLsizei height, GLint border, 500 GLsizei imageSize, const GLvoid *data); 501 502 extern void GLAPIENTRY 503 _mesa_CompressedTexImage3D_no_error(GLenum target, GLint level, 504 GLenum internalformat, GLsizei width, 505 GLsizei height, GLsizei depth, GLint border, 506 GLsizei imageSize, const GLvoid *data); 507 508 509 extern void GLAPIENTRY 510 _mesa_CompressedTexSubImage1D_no_error(GLenum target, GLint level, 511 GLint xoffset, GLsizei width, 512 GLenum format, GLsizei imageSize, 513 const GLvoid *data); 514 extern void GLAPIENTRY 515 _mesa_CompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, 516 GLsizei width, GLenum format, 517 GLsizei imageSize, const GLvoid *data); 518 519 extern void GLAPIENTRY 520 _mesa_CompressedTextureSubImage1D_no_error(GLuint texture, GLint level, 521 GLint xoffset, GLsizei width, 522 GLenum format, GLsizei imageSize, 523 const GLvoid *data); 524 extern void GLAPIENTRY 525 _mesa_CompressedTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, 526 GLsizei width, GLenum format, 527 GLsizei imageSize, const GLvoid *data); 528 529 extern void GLAPIENTRY 530 _mesa_CompressedTexSubImage2D_no_error(GLenum target, GLint level, 531 GLint xoffset, GLint yoffset, 532 GLsizei width, GLsizei height, 533 GLenum format, GLsizei imageSize, 534 const GLvoid *data); 535 extern void GLAPIENTRY 536 _mesa_CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, 537 GLint yoffset, GLsizei width, GLsizei height, 538 GLenum format, GLsizei imageSize, 539 const GLvoid *data); 540 541 extern void GLAPIENTRY 542 _mesa_CompressedTextureSubImage2D_no_error(GLuint texture, GLint level, 543 GLint xoffset, GLint yoffset, 544 GLsizei width, GLsizei height, 545 GLenum format, GLsizei imageSize, 546 const GLvoid *data); 547 extern void GLAPIENTRY 548 _mesa_CompressedTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, 549 GLint yoffset, 550 GLsizei width, GLsizei height, 551 GLenum format, GLsizei imageSize, 552 const GLvoid *data); 553 554 extern void GLAPIENTRY 555 _mesa_CompressedTexSubImage3D_no_error(GLenum target, GLint level, 556 GLint xoffset, GLint yoffset, 557 GLint zoffset, GLsizei width, 558 GLsizei height, GLsizei depth, 559 GLenum format, GLsizei imageSize, 560 const GLvoid *data); 561 extern void GLAPIENTRY 562 _mesa_CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, 563 GLint yoffset, GLint zoffset, GLsizei width, 564 GLsizei height, GLsizei depth, GLenum format, 565 GLsizei imageSize, const GLvoid *data); 566 567 extern void GLAPIENTRY 568 _mesa_CompressedTextureSubImage3D_no_error(GLuint texture, GLint level, 569 GLint xoffset, GLint yoffset, 570 GLint zoffset, GLsizei width, 571 GLsizei height, GLsizei depth, 572 GLenum format, GLsizei imageSize, 573 const GLvoid *data); 574 extern void GLAPIENTRY 575 _mesa_CompressedTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, 576 GLint yoffset, GLint zoffset, 577 GLsizei width, GLsizei height, 578 GLsizei depth, 579 GLenum format, GLsizei imageSize, 580 const GLvoid *data); 581 582 extern void GLAPIENTRY 583 _mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer); 584 585 extern void GLAPIENTRY 586 _mesa_TexBufferRange(GLenum target, GLenum internalFormat, GLuint buffer, 587 GLintptr offset, GLsizeiptr size); 588 589 extern void GLAPIENTRY 590 _mesa_TextureBuffer(GLuint texture, GLenum internalFormat, GLuint buffer); 591 592 extern void GLAPIENTRY 593 _mesa_TextureBufferRange(GLuint texture, GLenum internalFormat, GLuint buffer, 594 GLintptr offset, GLsizeiptr size); 595 596 597 extern void GLAPIENTRY 598 _mesa_TexImage2DMultisample(GLenum target, GLsizei samples, 599 GLenum internalformat, GLsizei width, 600 GLsizei height, GLboolean fixedsamplelocations); 601 602 extern void GLAPIENTRY 603 _mesa_TexImage3DMultisample(GLenum target, GLsizei samples, 604 GLenum internalformat, GLsizei width, 605 GLsizei height, GLsizei depth, 606 GLboolean fixedsamplelocations); 607 608 extern void GLAPIENTRY 609 _mesa_TexStorage2DMultisample(GLenum target, GLsizei samples, 610 GLenum internalformat, GLsizei width, 611 GLsizei height, GLboolean fixedsamplelocations); 612 613 extern void GLAPIENTRY 614 _mesa_TexStorage3DMultisample(GLenum target, GLsizei samples, 615 GLenum internalformat, GLsizei width, 616 GLsizei height, GLsizei depth, 617 GLboolean fixedsamplelocations); 618 619 void GLAPIENTRY 620 _mesa_TextureStorage2DMultisample(GLuint texture, GLsizei samples, 621 GLenum internalformat, GLsizei width, 622 GLsizei height, 623 GLboolean fixedsamplelocations); 624 625 void GLAPIENTRY 626 _mesa_TextureStorage3DMultisample(GLuint texture, GLsizei samples, 627 GLenum internalformat, GLsizei width, 628 GLsizei height, GLsizei depth, 629 GLboolean fixedsamplelocations); 630 /*@}*/ 631 632 #ifdef __cplusplus 633 } 634 #endif 635 636 #endif 637