X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Ftexobj.h;h=743e6b73ddff13626190759993521820372d1a1b;hb=a96e946d25d4518d1c73c5d9d0f3d147f42bc416;hp=a4573b399e3744207fc1e0aebb715f6d63c835c8;hpb=35e7027dab14b059344d7b93404c76d451ea2baf;p=mesa.git diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h index a4573b399e3..743e6b73ddf 100644 --- a/src/mesa/main/texobj.h +++ b/src/mesa/main/texobj.h @@ -32,12 +32,15 @@ #define TEXTOBJ_H -#include "compiler.h" #include "glheader.h" -#include "mtypes.h" #include "samplerobj.h" +#ifdef __cplusplus +extern "C" { +#endif + + /** * \name Internal functions */ @@ -46,6 +49,15 @@ 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 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 ); @@ -67,7 +79,8 @@ _mesa_copy_texture_object( struct gl_texture_object *dest, extern void _mesa_clear_texture_object(struct gl_context *ctx, - struct gl_texture_object *obj); + struct gl_texture_object *obj, + struct gl_texture_image *retainTexImage); extern void _mesa_reference_texobj_(struct gl_texture_object **ptr, @@ -81,23 +94,22 @@ _mesa_reference_texobj(struct gl_texture_object **ptr, _mesa_reference_texobj_(ptr, tex); } - /** - * Return number of faces for a texture target. This will be 6 for - * cube maps (and cube map arrays) and 1 otherwise. - * NOTE: this function is not used for cube map arrays which operate - * more like 2D arrays than cube maps. + * Lock a texture for updating. See also _mesa_lock_context_textures(). */ -static inline GLuint -_mesa_num_tex_faces(GLenum target) +static inline void +_mesa_lock_texture(struct gl_context *ctx, struct gl_texture_object *texObj) { - switch (target) { - case GL_TEXTURE_CUBE_MAP: - case GL_PROXY_TEXTURE_CUBE_MAP: - return 6; - default: - return 1; - } + 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); } @@ -106,7 +118,14 @@ static inline GLboolean _mesa_is_texture_complete(const struct gl_texture_object *texObj, const struct gl_sampler_object *sampler) { - if (texObj->_IsIntegerFormat && + /* + * According to ARB_stencil_texturing, NEAREST_MIPMAP_NEAREST would + * be forbidden, however it is allowed per GL 4.5 rules, allow it + * even without GL 4.5 since it was a spec mistake. + */ + if ((texObj->_IsIntegerFormat || + (texObj->StencilSampling && + texObj->Image[0][texObj->BaseLevel]->_BaseFormat == GL_DEPTH_STENCIL)) && (sampler->MagFilter != GL_NEAREST || (sampler->MinFilter != GL_NEAREST && sampler->MinFilter != GL_NEAREST_MIPMAP_NEAREST))) { @@ -125,6 +144,10 @@ 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); @@ -137,12 +160,22 @@ _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 void +_mesa_delete_nameless_texture(struct gl_context *ctx, + struct gl_texture_object *texObj); + +extern void +_mesa_bind_texture(struct gl_context *ctx, GLenum target, + struct gl_texture_object *tex_obj); /*@}*/ /** @@ -150,17 +183,44 @@ _mesa_lock_context_textures( struct gl_context *ctx ); */ /*@{*/ +void GLAPIENTRY +_mesa_GenTextures_no_error(GLsizei n, GLuint *textures); + +extern void GLAPIENTRY +_mesa_GenTextures(GLsizei n, GLuint *textures); + +void GLAPIENTRY +_mesa_CreateTextures_no_error(GLenum target, GLsizei n, GLuint *textures); + extern void GLAPIENTRY -_mesa_GenTextures( GLsizei n, GLuint *textures ); +_mesa_CreateTextures(GLenum target, GLsizei n, GLuint *textures); +void GLAPIENTRY +_mesa_DeleteTextures_no_error(GLsizei n, const GLuint *textures); extern void GLAPIENTRY _mesa_DeleteTextures( GLsizei n, const GLuint *textures ); +void GLAPIENTRY +_mesa_BindTexture_no_error(GLenum target, GLuint texture); + extern void GLAPIENTRY _mesa_BindTexture( GLenum target, GLuint texture ); +void GLAPIENTRY +_mesa_BindTextureUnit_no_error(GLuint unit, GLuint texture); + +extern void GLAPIENTRY +_mesa_BindTextureUnit(GLuint unit, GLuint texture); + +void GLAPIENTRY +_mesa_BindTextures_no_error(GLuint first, GLsizei count, + const GLuint *textures); + +extern void GLAPIENTRY +_mesa_BindTextures( GLuint first, GLsizei count, const GLuint *textures ); + extern void GLAPIENTRY _mesa_PrioritizeTextures( GLsizei n, const GLuint *textures, @@ -174,10 +234,18 @@ _mesa_AreTexturesResident( GLsizei n, const GLuint *textures, extern GLboolean GLAPIENTRY _mesa_IsTexture( GLuint texture ); +void GLAPIENTRY +_mesa_InvalidateTexSubImage_no_error(GLuint texture, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, + GLsizei depth); + extern void GLAPIENTRY _mesa_InvalidateTexSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +void GLAPIENTRY +_mesa_InvalidateTexImage_no_error(GLuint texture, GLint level); extern void GLAPIENTRY _mesa_InvalidateTexImage(GLuint texture, GLint level); @@ -185,4 +253,9 @@ _mesa_InvalidateTexImage(GLuint texture, GLint level); /*@}*/ +#ifdef __cplusplus +} +#endif + + #endif