X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Ftexobj.h;h=ec5ccb2760166898b867beff316571b90db3782c;hb=5bebd7099ab22c6f1498cd928170561718d6ff36;hp=6ae1cf27bb8b05accb50cd6ebe0f410d70c7fdba;hpb=dd404bc94f78a1766527becee03f8ef6ae3a799b;p=mesa.git diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h index 6ae1cf27bb8..ec5ccb27601 100644 --- a/src/mesa/main/texobj.h +++ b/src/mesa/main/texobj.h @@ -5,7 +5,6 @@ /* * Mesa 3-D graphics library - * Version: 6.5 * * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * @@ -22,9 +21,10 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. */ @@ -38,6 +38,11 @@ #include "samplerobj.h" +#ifdef __cplusplus +extern "C" { +#endif + + /** * \name Internal functions */ @@ -46,13 +51,32 @@ extern struct gl_texture_object * _mesa_lookup_texture(struct gl_context *ctx, GLuint id); +extern struct gl_texture_object * +_mesa_lookup_texture_err(struct gl_context *ctx, GLuint id, const char* func); + +extern void +_mesa_begin_texture_lookups(struct gl_context *ctx); + +extern void +_mesa_end_texture_lookups(struct gl_context *ctx); + +extern struct gl_texture_object * +_mesa_lookup_texture_locked(struct gl_context *ctx, GLuint id); + +extern struct gl_texture_object * +_mesa_get_current_tex_object(struct gl_context *ctx, GLenum target); + extern struct gl_texture_object * _mesa_new_texture_object( struct gl_context *ctx, GLuint name, GLenum target ); extern void -_mesa_initialize_texture_object( struct gl_texture_object *obj, +_mesa_initialize_texture_object( struct gl_context *ctx, + struct gl_texture_object *obj, GLuint name, GLenum target ); +extern int +_mesa_tex_target_to_index(const struct gl_context *ctx, GLenum target); + extern void _mesa_delete_texture_object( struct gl_context *ctx, struct gl_texture_object *obj ); @@ -77,6 +101,24 @@ _mesa_reference_texobj(struct gl_texture_object **ptr, _mesa_reference_texobj_(ptr, tex); } +/** + * Lock a texture for updating. See also _mesa_lock_context_textures(). + */ +static inline void +_mesa_lock_texture(struct gl_context *ctx, struct gl_texture_object *texObj) +{ + mtx_lock(&ctx->Shared->TexMutex); + ctx->Shared->TextureStateStamp++; + (void) texObj; +} + +static inline void +_mesa_unlock_texture(struct gl_context *ctx, struct gl_texture_object *texObj) +{ + (void) texObj; + mtx_unlock(&ctx->Shared->TexMutex); +} + /** * Return number of faces for a texture target. This will be 6 for @@ -110,6 +152,20 @@ _mesa_is_texture_complete(const struct gl_texture_object *texObj, return GL_FALSE; } + /* From the ARB_stencil_texturing specification: + * "Add a new bullet point for the conditions that cause the texture + * to not be complete: + * + * * The internal format of the texture is DEPTH_STENCIL, the + * DEPTH_STENCIL_TEXTURE_MODE for the texture is STENCIL_INDEX and either + * the magnification filter or the minification filter is not NEAREST." + */ + if (texObj->StencilSampling && + texObj->Image[0][texObj->BaseLevel]->_BaseFormat == GL_DEPTH_STENCIL && + (sampler->MagFilter != GL_NEAREST || sampler->MinFilter != GL_NEAREST)) { + return GL_FALSE; + } + if (_mesa_is_mipmap_filter(sampler)) return texObj->_MipmapComplete; else @@ -121,12 +177,15 @@ extern void _mesa_test_texobj_completeness( const struct gl_context *ctx, struct gl_texture_object *obj ); +extern GLboolean +_mesa_cube_level_complete(const struct gl_texture_object *texObj, + const GLint level); + extern GLboolean _mesa_cube_complete(const struct gl_texture_object *texObj); extern void -_mesa_dirty_texobj(struct gl_context *ctx, struct gl_texture_object *texObj, - GLboolean invalidate_state); +_mesa_dirty_texobj(struct gl_context *ctx, struct gl_texture_object *texObj); extern struct gl_texture_object * _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex); @@ -134,12 +193,27 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex); extern GLuint _mesa_total_texture_memory(struct gl_context *ctx); +extern GLenum +_mesa_texture_base_format(const struct gl_texture_object *texObj); + extern void _mesa_unlock_context_textures( struct gl_context *ctx ); extern void _mesa_lock_context_textures( struct gl_context *ctx ); +extern struct gl_texture_object * +_mesa_create_nameless_texture(struct gl_context *ctx, GLenum target); + +extern void +_mesa_delete_nameless_texture(struct gl_context *ctx, + struct gl_texture_object *texObj); + +extern void +_mesa_bind_texture_unit(struct gl_context *ctx, + GLuint unit, + struct gl_texture_object *texObj); + /*@}*/ /** @@ -148,8 +222,10 @@ _mesa_lock_context_textures( struct gl_context *ctx ); /*@{*/ extern void GLAPIENTRY -_mesa_GenTextures( GLsizei n, GLuint *textures ); +_mesa_GenTextures(GLsizei n, GLuint *textures); +extern void GLAPIENTRY +_mesa_CreateTextures(GLenum target, GLsizei n, GLuint *textures); extern void GLAPIENTRY _mesa_DeleteTextures( GLsizei n, const GLuint *textures ); @@ -158,6 +234,12 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures ); extern void GLAPIENTRY _mesa_BindTexture( GLenum target, GLuint texture ); +extern void GLAPIENTRY +_mesa_BindTextureUnit(GLuint unit, GLuint texture); + +extern void GLAPIENTRY +_mesa_BindTextures( GLuint first, GLsizei count, const GLuint *textures ); + extern void GLAPIENTRY _mesa_PrioritizeTextures( GLsizei n, const GLuint *textures, @@ -182,4 +264,9 @@ _mesa_InvalidateTexImage(GLuint texture, GLint level); /*@}*/ +#ifdef __cplusplus +} +#endif + + #endif