Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #ifndef _U_CURRENT_H_
  2. #define _U_CURRENT_H_
  3.  
  4. #if defined(MAPI_MODE_UTIL) || defined(MAPI_MODE_GLAPI) || \
  5.     defined(MAPI_MODE_BRIDGE)
  6.  
  7. #include "glapi/glapi.h"
  8.  
  9. /* ugly renames to match glapi.h */
  10. #define mapi_table _glapi_table
  11.  
  12. #ifdef GLX_USE_TLS
  13. #define u_current_table _glapi_tls_Dispatch
  14. #define u_current_user _glapi_tls_Context
  15. #else
  16. #define u_current_table _glapi_Dispatch
  17. #define u_current_user _glapi_Context
  18. #endif
  19.  
  20. #define u_current_get_internal _glapi_get_dispatch
  21. #define u_current_get_user_internal _glapi_get_context
  22.  
  23. #define u_current_table_tsd _gl_DispatchTSD
  24.  
  25. #else /* MAPI_MODE_UTIL || MAPI_MODE_GLAPI || MAPI_MODE_BRIDGE */
  26.  
  27. #include "u_compiler.h"
  28.  
  29. struct mapi_table;
  30.  
  31. #ifdef GLX_USE_TLS
  32.  
  33. extern __thread struct mapi_table *u_current_table
  34.     __attribute__((tls_model("initial-exec")));
  35.  
  36. extern __thread void *u_current_user
  37.     __attribute__((tls_model("initial-exec")));
  38.  
  39. #else /* GLX_USE_TLS */
  40.  
  41. extern struct mapi_table *u_current_table;
  42. extern void *u_current_user;
  43.  
  44. #endif /* GLX_USE_TLS */
  45.  
  46. #endif /* MAPI_MODE_UTIL || MAPI_MODE_GLAPI || MAPI_MODE_BRIDGE */
  47.  
  48. void
  49. u_current_init(void);
  50.  
  51. void
  52. u_current_destroy(void);
  53.  
  54. void
  55. u_current_set(const struct mapi_table *tbl);
  56.  
  57. struct mapi_table *
  58. u_current_get_internal(void);
  59.  
  60. void
  61. u_current_set_user(const void *ptr);
  62.  
  63. void *
  64. u_current_get_user_internal(void);
  65.  
  66. static INLINE const struct mapi_table *
  67. u_current_get(void)
  68. {
  69. #ifdef GLX_USE_TLS
  70.    return u_current_table;
  71. #else
  72.    return (likely(u_current_table) ?
  73.          u_current_table : u_current_get_internal());
  74. #endif
  75. }
  76.  
  77. static INLINE const void *
  78. u_current_get_user(void)
  79. {
  80. #ifdef GLX_USE_TLS
  81.    return u_current_user;
  82. #else
  83.    return likely(u_current_user) ? u_current_user : u_current_get_user_internal();
  84. #endif
  85. }
  86.  
  87. #endif /* _U_CURRENT_H_ */
  88.