Lines Matching refs:ctx
74 valid_filter_for_float(const struct gl_context *ctx,
79 if (obj->_IsHalfFloat && !ctx->Extensions.OES_texture_half_float_linear) {
81 } else if (obj->_IsFloat && !ctx->Extensions.OES_texture_float_linear) {
97 if (obj->_IsHalfFloat && !ctx->Extensions.OES_texture_half_float_linear) {
99 } else if (obj->_IsFloat && !ctx->Extensions.OES_texture_float_linear) {
117 _mesa_lookup_texture(struct gl_context *ctx, GLuint id)
120 _mesa_HashLookup(ctx->Shared->TexObjects, id);
128 _mesa_lookup_texture_err(struct gl_context *ctx, GLuint id, const char* func)
133 texObj = _mesa_lookup_texture(ctx, id); /* Returns NULL if not found. */
136 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(texture)", func);
143 _mesa_lookup_texture_locked(struct gl_context *ctx, GLuint id)
146 _mesa_HashLookupLocked(ctx->Shared->TexObjects, id);
155 _mesa_get_current_tex_object(struct gl_context *ctx, GLenum target)
157 struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx);
158 const GLboolean arrayTex = ctx->Extensions.EXT_texture_array;
164 return ctx->Texture.ProxyTex[TEXTURE_1D_INDEX];
168 return ctx->Texture.ProxyTex[TEXTURE_2D_INDEX];
172 return !(ctx->API == API_OPENGLES2 && !ctx->Extensions.OES_texture_3D)
173 ? ctx->Texture.ProxyTex[TEXTURE_3D_INDEX] : NULL;
183 return ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX];
185 return _mesa_has_texture_cube_map_array(ctx)
188 return _mesa_has_texture_cube_map_array(ctx)
189 ? ctx->Texture.ProxyTex[TEXTURE_CUBE_ARRAY_INDEX] : NULL;
191 return ctx->Extensions.NV_texture_rectangle
194 return ctx->Extensions.NV_texture_rectangle
195 ? ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX] : NULL;
199 return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX] : NULL;
203 return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
205 return (_mesa_has_ARB_texture_buffer_object(ctx) ||
206 _mesa_has_OES_texture_buffer(ctx)) ?
209 return _mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external
212 return ctx->Extensions.ARB_texture_multisample
215 return ctx->Extensions.ARB_texture_multisample
216 ? ctx->Texture.ProxyTex[TEXTURE_2D_MULTISAMPLE_INDEX] : NULL;
218 return ctx->Extensions.ARB_texture_multisample
221 return ctx->Extensions.ARB_texture_multisample
222 ? ctx->Texture.ProxyTex[TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX] : NULL;
236 _mesa_get_texobj_by_target_and_texunit(struct gl_context *ctx, GLenum target,
244 return _mesa_get_current_tex_object(ctx, target);
247 if (texunit >= ctx->Const.MaxCombinedTextureImageUnits) {
248 _mesa_error(ctx, GL_INVALID_OPERATION,
253 texUnit = _mesa_get_tex_unit(ctx, texunit);
255 targetIndex = _mesa_tex_target_to_index(ctx, target);
257 _mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", caller);
273 _mesa_initialize_texture_object( struct gl_context *ctx,
297 obj->TargetIndex = _mesa_tex_target_to_index(ctx, target);
347 obj->Attrib.DepthMode = ctx->API == API_OPENGL_CORE ? GL_RED : GL_LUMINANCE;
360 obj->BufferObjectFormat = ctx->API == API_OPENGL_COMPAT ? GL_LUMINANCE8 : GL_R8;
361 obj->_BufferObjectFormat = ctx->API == API_OPENGL_COMPAT
397 _mesa_new_texture_object(struct gl_context *ctx, GLuint name, GLenum target)
405 if (!_mesa_initialize_texture_object(ctx, obj, name, target)) {
417 finish_texture_init(struct gl_context *ctx, GLenum target,
464 _mesa_delete_texture_object(struct gl_context *ctx,
475 st_delete_texture_sampler_views(ctx->st, texObj);
482 _mesa_delete_texture_image(ctx, texObj->Image[face][i]);
488 _mesa_delete_texture_handles(ctx, texObj);
490 _mesa_reference_buffer_object_shared(ctx, &texObj->BufferObject, NULL);
502 * \param ctx GL context.
509 _mesa_clear_texture_object(struct gl_context *ctx,
522 _mesa_clear_texture_image(ctx, texImage);
587 GET_CURRENT_CONTEXT(ctx);
588 if (ctx)
589 _mesa_delete_texture_object(ctx, oldTex);
651 * \param ctx GL context.
658 _mesa_test_texobj_completeness( const struct gl_context *ctx,
716 if (_mesa_is_gles(ctx) && !valid_filter_for_float(ctx, t)) {
721 maxLevels = _mesa_max_texture_levels(ctx, t->Target);
723 _mesa_problem(ctx, "Bad t->Target in _mesa_test_texobj_completeness");
912 * \param ctx GL context.
916 _mesa_dirty_texobj(struct gl_context *ctx, struct gl_texture_object *texObj)
920 ctx->NewState |= _NEW_TEXTURE_OBJECT;
921 ctx->PopAttribState |= GL_TEXTURE_BIT;
932 _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex)
934 if (!ctx->Shared->FallbackTex[tex]) {
1009 texObj = _mesa_new_texture_object(ctx, 0, target);
1020 texFormat = st_ChooseTextureFormat(ctx, target,
1029 texImage = _mesa_get_tex_image(ctx, texObj, faceTarget, 0);
1031 _mesa_init_teximage_fields(ctx, texImage,
1038 st_TexImage(ctx, dims, texImage,
1040 &ctx->DefaultPacking);
1043 _mesa_test_texobj_completeness(ctx, texObj);
1047 ctx->Shared->FallbackTex[tex] = texObj;
1051 st_glFinish(ctx);
1053 return ctx->Shared->FallbackTex[tex];
1100 _mesa_total_texture_memory(struct gl_context *ctx)
1104 _mesa_HashWalk(ctx->Shared->TexObjects, count_tex_size, &total);
1108 total += texture_size(ctx->Shared->DefaultTex[tgt]);
1130 invalidate_tex_image_error_check(struct gl_context *ctx, GLuint texture,
1142 struct gl_texture_object *const t = _mesa_lookup_texture(ctx, texture);
1144 _mesa_error(ctx, GL_INVALID_VALUE, "%s(texture)", name);
1155 _mesa_error(ctx, GL_INVALID_VALUE, "%s(level)", name);
1171 _mesa_error(ctx, GL_INVALID_VALUE, "%s(level)", name);
1191 create_textures(struct gl_context *ctx, GLenum target,
1202 _mesa_HashLockMutex(ctx->Shared->TexObjects);
1204 _mesa_HashFindFreeKeys(ctx->Shared->TexObjects, textures, n);
1209 texObj = _mesa_new_texture_object(ctx, textures[i], target);
1211 _mesa_HashUnlockMutex(ctx->Shared->TexObjects);
1212 _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
1217 _mesa_HashInsertLocked(ctx->Shared->TexObjects, texObj->Name, texObj, true);
1220 _mesa_HashUnlockMutex(ctx->Shared->TexObjects);
1225 create_textures_err(struct gl_context *ctx, GLenum target,
1229 _mesa_debug(ctx, "%s %d\n", caller, n);
1232 _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", caller);
1236 create_textures(ctx, target, n, textures, caller);
1262 GET_CURRENT_CONTEXT(ctx);
1263 create_textures(ctx, 0, n, textures, "glGenTextures");
1270 GET_CURRENT_CONTEXT(ctx);
1271 create_textures_err(ctx, 0, n, textures, "glGenTextures");
1290 GET_CURRENT_CONTEXT(ctx);
1291 create_textures(ctx, target, n, textures, "glCreateTextures");
1299 GET_CURRENT_CONTEXT(ctx);
1306 targetIndex = _mesa_tex_target_to_index(ctx, target);
1308 _mesa_error(ctx, GL_INVALID_ENUM, "glCreateTextures(target)");
1312 create_textures_err(ctx, target, n, textures, "glCreateTextures");
1320 unbind_texobj_from_fbo(struct gl_context *ctx,
1340 if (_mesa_is_user_fbo(ctx->DrawBuffer)) {
1341 progress = _mesa_detach_renderbuffer(ctx, ctx->DrawBuffer, texObj);
1343 if (_mesa_is_user_fbo(ctx->ReadBuffer)
1344 && ctx->ReadBuffer != ctx->DrawBuffer) {
1345 progress = _mesa_detach_renderbuffer(ctx, ctx->ReadBuffer, texObj)
1351 ctx->NewState |= _NEW_BUFFERS;
1360 unbind_texobj_from_texunits(struct gl_context *ctx,
1373 for (u = 0; u < ctx->Texture.NumCurrentTexUsed; u++) {
1374 struct gl_texture_unit *unit = &ctx->Texture.Unit[u];
1379 ctx->Shared->DefaultTex[index]);
1391 unbind_texobj_from_image_units(struct gl_context *ctx,
1396 for (i = 0; i < ctx->Const.MaxImageUnits; i++) {
1397 struct gl_image_unit *unit = &ctx->ImageUnits[i];
1401 *unit = _mesa_default_image_unit(ctx);
1411 unbind_textures_from_unit(struct gl_context *ctx, GLuint unit)
1413 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
1417 struct gl_texture_object *texObj = ctx->Shared->DefaultTex[index];
1422 ctx->NewState |= _NEW_TEXTURE_OBJECT;
1423 ctx->PopAttribState |= GL_TEXTURE_BIT;
1443 delete_textures(struct gl_context *ctx, GLsizei n, const GLuint *textures)
1445 FLUSH_VERTICES(ctx, 0, 0); /* too complex */
1453 = _mesa_lookup_texture(ctx, textures[i]);
1456 _mesa_lock_texture(ctx, delObj);
1462 unbind_texobj_from_fbo(ctx, delObj);
1467 unbind_texobj_from_texunits(ctx, delObj);
1473 unbind_texobj_from_image_units(ctx, delObj);
1478 _mesa_make_texture_handles_non_resident(ctx, delObj);
1480 _mesa_unlock_texture(ctx, delObj);
1482 ctx->NewState |= _NEW_TEXTURE_OBJECT;
1483 ctx->PopAttribState |= GL_TEXTURE_BIT;
1488 _mesa_HashRemove(ctx->Shared->TexObjects, delObj->Name);
1490 st_texture_release_all_sampler_views(st_context(ctx), delObj);
1504 GET_CURRENT_CONTEXT(ctx);
1505 delete_textures(ctx, n, textures);
1512 GET_CURRENT_CONTEXT(ctx);
1515 _mesa_debug(ctx, "glDeleteTextures %d\n", n);
1518 _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteTextures(n < 0)");
1522 delete_textures(ctx, n, textures);
1533 _mesa_tex_target_to_index(const struct gl_context *ctx, GLenum target)
1537 return _mesa_is_desktop_gl(ctx) ? TEXTURE_1D_INDEX : -1;
1541 return (ctx->API != API_OPENGLES &&
1542 !(ctx->API == API_OPENGLES2 && !ctx->Extensions.OES_texture_3D))
1547 return _mesa_is_desktop_gl(ctx) && ctx->Extensions.NV_texture_rectangle
1550 return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_array
1553 return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_array)
1554 || _mesa_is_gles3(ctx)
1557 return (_mesa_has_ARB_texture_buffer_object(ctx) ||
1558 _mesa_has_OES_texture_buffer(ctx)) ?
1561 return _mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external
1564 return _mesa_has_texture_cube_map_array(ctx)
1567 return ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_multisample) ||
1568 _mesa_is_gles31(ctx)) ? TEXTURE_2D_MULTISAMPLE_INDEX: -1;
1570 return ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_multisample) ||
1571 _mesa_is_gles31(ctx))
1588 bind_texture_object(struct gl_context *ctx, unsigned unit,
1594 assert(unit < ARRAY_SIZE(ctx->Texture.Unit));
1595 texUnit = &ctx->Texture.Unit[unit];
1609 ctx->Shared->RefCount == 1 &&
1620 FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT, GL_TEXTURE_BIT);
1628 ctx->NewDriverState |= ctx->DriverFlags.NewSamplersWithClamp;
1635 ctx->Texture.NumCurrentTexUsed = MAX2(ctx->Texture.NumCurrentTexUsed,
1645 _mesa_lookup_or_create_texture(struct gl_context *ctx, GLenum target,
1656 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(target = %s)", caller,
1660 return _mesa_get_current_tex_object(ctx, target);
1668 targetIndex = _mesa_tex_target_to_index(ctx, target);
1670 _mesa_error(ctx, GL_INVALID_ENUM, "%s(target = %s)", caller,
1681 newTexObj = ctx->Shared->DefaultTex[targetIndex];
1684 newTexObj = _mesa_lookup_texture(ctx, texName);
1692 _mesa_error(ctx, GL_INVALID_OPERATION,
1697 finish_texture_init(ctx, target, newTexObj, targetIndex);
1700 if (!no_error && ctx->API == API_OPENGL_CORE) {
1701 _mesa_error(ctx, GL_INVALID_OPERATION,
1707 newTexObj = _mesa_new_texture_object(ctx, texName, target);
1709 _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
1714 _mesa_HashInsert(ctx->Shared->TexObjects, texName, newTexObj, false);
1733 bind_texture(struct gl_context *ctx, GLenum target, GLuint texName,
1737 _mesa_lookup_or_create_texture(ctx, target, texName, no_error, false,
1742 bind_texture_object(ctx, texunit, newTexObj);
1748 GET_CURRENT_CONTEXT(ctx);
1749 bind_texture(ctx, target, texName, ctx->Texture.CurrentUnit, true,
1757 GET_CURRENT_CONTEXT(ctx);
1760 _mesa_debug(ctx, "glBindTexture %s %d\n",
1763 bind_texture(ctx, target, texName, ctx->Texture.CurrentUnit, false,
1771 GET_CURRENT_CONTEXT(ctx);
1775 if (texunit < GL_TEXTURE0 || unit >= _mesa_max_tex_unit(ctx)) {
1776 _mesa_error(ctx, GL_INVALID_ENUM, "glBindMultiTextureEXT(texunit=%s)",
1782 _mesa_debug(ctx, "glBindMultiTextureEXT %s %d\n",
1785 bind_texture(ctx, target, texture, unit, false, "glBindMultiTextureEXT");
1803 bind_texture_unit(struct gl_context *ctx, GLuint unit, GLuint texture,
1815 unbind_textures_from_unit(ctx, unit);
1820 texObj = _mesa_lookup_texture(ctx, texture);
1824 _mesa_error(ctx, GL_INVALID_OPERATION,
1831 _mesa_error(ctx, GL_INVALID_OPERATION, "glBindTextureUnit(target)");
1838 bind_texture_object(ctx, unit, texObj);
1845 GET_CURRENT_CONTEXT(ctx);
1846 bind_texture_unit(ctx, unit, texture, true);
1853 GET_CURRENT_CONTEXT(ctx);
1855 if (unit >= _mesa_max_tex_unit(ctx)) {
1856 _mesa_error(ctx, GL_INVALID_VALUE, "glBindTextureUnit(unit=%u)", unit);
1861 _mesa_debug(ctx, "glBindTextureUnit %s %d\n",
1864 bind_texture_unit(ctx, unit, texture, false);
1872 bind_textures(struct gl_context *ctx, GLuint first, GLsizei count,
1897 _mesa_HashLockMutex(ctx->Shared->TexObjects);
1901 struct gl_texture_unit *texUnit = &ctx->Texture.Unit[first + i];
1908 texObj = _mesa_lookup_texture_locked(ctx, textures[i]);
1911 bind_texture_object(ctx, first + i, texObj);
1919 _mesa_error(ctx, GL_INVALID_OPERATION,
1925 unbind_textures_from_unit(ctx, first + i);
1929 _mesa_HashUnlockMutex(ctx->Shared->TexObjects);
1933 unbind_textures_from_unit(ctx, first + i);
1941 GET_CURRENT_CONTEXT(ctx);
1942 bind_textures(ctx, first, count, textures, true);
1949 GET_CURRENT_CONTEXT(ctx);
1957 if (first + count > ctx->Const.MaxCombinedTextureImageUnits) {
1958 _mesa_error(ctx, GL_INVALID_OPERATION,
1961 first, count, ctx->Const.MaxCombinedTextureImageUnits);
1965 bind_textures(ctx, first, count, textures, false);
1985 GET_CURRENT_CONTEXT(ctx);
1989 _mesa_debug(ctx, "glPrioritizeTextures %d\n", n);
1993 _mesa_error( ctx, GL_INVALID_VALUE, "glPrioritizeTextures" );
2000 FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT, GL_TEXTURE_BIT);
2004 struct gl_texture_object *t = _mesa_lookup_texture(ctx, texName[i]);
2030 GET_CURRENT_CONTEXT(ctx);
2033 ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
2036 _mesa_debug(ctx, "glAreTexturesResident %d\n", n);
2039 _mesa_error(ctx, GL_INVALID_VALUE, "glAreTexturesResident(n)");
2050 _mesa_error(ctx, GL_INVALID_VALUE, "glAreTexturesResident");
2053 t = _mesa_lookup_texture(ctx, texName[i]);
2055 _mesa_error(ctx, GL_INVALID_VALUE, "glAreTexturesResident");
2080 GET_CURRENT_CONTEXT(ctx);
2081 ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
2084 _mesa_debug(ctx, "glIsTexture %d\n", texture);
2089 t = _mesa_lookup_texture(ctx, texture);
2099 * been a change, set the appropriate bits in ctx->NewState.
2108 _mesa_lock_context_textures( struct gl_context *ctx )
2110 if (!ctx->TexturesLocked)
2111 simple_mtx_lock(&ctx->Shared->TexMutex);
2113 if (ctx->Shared->TextureStateStamp != ctx->TextureStateTimestamp) {
2114 ctx->NewState |= _NEW_TEXTURE_OBJECT;
2115 ctx->PopAttribState |= GL_TEXTURE_BIT;
2116 ctx->TextureStateTimestamp = ctx->Shared->TextureStateStamp;
2122 _mesa_unlock_context_textures( struct gl_context *ctx )
2124 assert(ctx->Shared->TextureStateStamp == ctx->TextureStateTimestamp);
2125 if (!ctx->TexturesLocked)
2126 simple_mtx_unlock(&ctx->Shared->TexMutex);
2147 GET_CURRENT_CONTEXT(ctx);
2150 _mesa_debug(ctx, "glInvalidateTexSubImage %d\n", texture);
2152 t = invalidate_tex_image_error_check(ctx, texture, level,
2246 _mesa_error(ctx, GL_INVALID_VALUE, "glInvalidateSubTexImage(xoffset)");
2251 _mesa_error(ctx, GL_INVALID_VALUE,
2257 _mesa_error(ctx, GL_INVALID_VALUE, "glInvalidateSubTexImage(yoffset)");
2262 _mesa_error(ctx, GL_INVALID_VALUE,
2268 _mesa_error(ctx, GL_INVALID_VALUE,
2274 _mesa_error(ctx, GL_INVALID_VALUE,
2297 GET_CURRENT_CONTEXT(ctx);
2300 _mesa_debug(ctx, "glInvalidateTexImage(%d, %d)\n", texture, level);
2302 invalidate_tex_image_error_check(ctx, texture, level,
2312 texture_page_commitment(struct gl_context *ctx, GLenum target,
2319 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(immutable sparse texture)", func);
2325 _mesa_error(ctx, GL_INVALID_VALUE, "%s(level %d)", func, level);
2338 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(exceed max size)", func);
2344 ctx, target, image->TexFormat, tex_obj->VirtualPageSizeIndex, &px, &py, &pz);
2348 _mesa_error(ctx, GL_INVALID_VALUE, "%s(offset multiple of page size)", func);
2355 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(alignment)", func);
2359 st_TexturePageCommitment(ctx, tex_obj, level, xoffset, yoffset, zoffset,
2368 GET_CURRENT_CONTEXT(ctx);
2371 texObj = _mesa_get_current_tex_object(ctx, target);
2373 _mesa_error(ctx, GL_INVALID_ENUM, "glTexPageCommitmentARB(target)");
2377 texture_page_commitment(ctx, target, texObj, level, xoffset, yoffset, zoffset,
2387 GET_CURRENT_CONTEXT(ctx);
2390 texObj = _mesa_lookup_texture(ctx, texture);
2392 _mesa_error(ctx, GL_INVALID_OPERATION, "glTexturePageCommitmentEXT(texture)");
2396 texture_page_commitment(ctx, texObj->Target, texObj, level, xoffset, yoffset,