Lines Matching full:ctx
72 * \param ctx GL context.
82 _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
90 return (ctx->API != API_OPENGL_CORE) ? GL_ALPHA : -1;
97 return (ctx->API != API_OPENGL_CORE) ? GL_LUMINANCE : -1;
106 return (ctx->API != API_OPENGL_CORE) ? GL_LUMINANCE_ALPHA : -1;
112 return (ctx->API != API_OPENGL_CORE) ? GL_INTENSITY : -1;
114 return (ctx->API != API_OPENGL_CORE) ? GL_RGB : -1;
125 return (ctx->API != API_OPENGL_CORE) ? GL_RGBA : -1;
141 if (_mesa_is_gles(ctx)) {
150 if (ctx->Extensions.ARB_ES2_compatibility) {
159 if (ctx->Extensions.ARB_depth_texture) {
188 if (ctx->Extensions.TDFX_texture_compression_FXT1) {
199 if (ctx->Extensions.EXT_texture_compression_s3tc) {
212 if (ctx->Extensions.S3_s3tc) {
225 if (ctx->Extensions.MESA_ycbcr_texture) {
230 if (ctx->Extensions.ARB_texture_float) {
255 if (ctx->Extensions.ATI_envmap_bumpmap) {
265 if (ctx->Extensions.EXT_texture_snorm) {
304 if (ctx->Extensions.EXT_packed_depth_stencil) {
315 if (ctx->Extensions.EXT_texture_sRGB) {
343 if (ctx->Version >= 30 ||
344 ctx->Extensions.EXT_texture_integer) {
364 if (ctx->Extensions.EXT_texture_integer) {
399 if (ctx->Extensions.ARB_texture_rg) {
404 if (!ctx->Extensions.ARB_half_float_pixel)
408 if (!ctx->Extensions.ARB_texture_float)
417 if (ctx->Version < 30 && !ctx->Extensions.EXT_texture_integer)
429 if (!ctx->Extensions.ARB_half_float_pixel)
433 if (!ctx->Extensions.ARB_texture_float)
442 if (ctx->Version < 30 && !ctx->Extensions.EXT_texture_integer)
455 if (ctx->Extensions.EXT_texture_shared_exponent) {
464 if (ctx->Extensions.EXT_packed_float) {
473 if (ctx->Extensions.ARB_depth_buffer_float) {
484 if (ctx->Extensions.ARB_texture_compression_rgtc) {
497 if (ctx->Extensions.EXT_texture_compression_latc) {
510 if (ctx->Extensions.ATI_texture_compression_3dc) {
519 if (ctx->Extensions.OES_compressed_ETC1_RGB8_texture) {
528 if (ctx->API == API_OPENGLES) {
599 * Called via ctx->Driver.NewTextureImage() unless overriden by a device
606 _mesa_new_texture_image( struct gl_context *ctx )
608 (void) ctx;
615 * This function is a fallback called via ctx->Driver.DeleteTextureImage().
622 _mesa_delete_texture_image(struct gl_context *ctx,
628 ASSERT(ctx->Driver.FreeTextureImageBuffer);
629 ctx->Driver.FreeTextureImageBuffer( ctx, texImage );
705 * \param ctx GL context.
712 _mesa_select_tex_object(struct gl_context *ctx,
716 const GLboolean arrayTex = (ctx->Extensions.MESA_texture_array ||
717 ctx->Extensions.EXT_texture_array);
723 return ctx->Texture.ProxyTex[TEXTURE_1D_INDEX];
727 return ctx->Texture.ProxyTex[TEXTURE_2D_INDEX];
731 return ctx->Texture.ProxyTex[TEXTURE_3D_INDEX];
739 return ctx->Extensions.ARB_texture_cube_map
742 return ctx->Extensions.ARB_texture_cube_map
743 ? ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX] : NULL;
745 return ctx->Extensions.NV_texture_rectangle
748 return ctx->Extensions.NV_texture_rectangle
749 ? ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX] : NULL;
753 return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX] : NULL;
757 return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
759 return _mesa_is_desktop_gl(ctx)
760 && ctx->Extensions.ARB_texture_buffer_object
763 return ctx->Extensions.OES_EGL_image_external
776 _mesa_get_current_tex_object(struct gl_context *ctx, GLenum target)
778 struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx);
779 return _mesa_select_tex_object(ctx, texUnit, target);
788 * \param ctx GL context.
796 _mesa_select_tex_image(struct gl_context *ctx,
816 _mesa_get_tex_image(struct gl_context *ctx, struct gl_texture_object *texObj,
824 texImage = _mesa_select_tex_image(ctx, texObj, target, level);
826 texImage = ctx->Driver.NewTextureImage(ctx);
828 _mesa_error(ctx, GL_OUT_OF_MEMORY, "texture image allocation");
846 get_proxy_tex_image(struct gl_context *ctx, GLenum target, GLint level)
856 if (level >= ctx->Const.MaxTextureLevels)
861 if (level >= ctx->Const.MaxTextureLevels)
866 if (level >= ctx->Const.Max3DTextureLevels)
871 if (level >= ctx->Const.MaxCubeTextureLevels)
881 if (level >= ctx->Const.MaxTextureLevels)
886 if (level >= ctx->Const.MaxTextureLevels)
894 texImage = ctx->Texture.ProxyTex[texIndex]->Image[0][level];
896 texImage = ctx->Driver.NewTextureImage(ctx);
898 _mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
901 ctx->Texture.ProxyTex[texIndex]->Image[0][level] = texImage;
903 texImage->TexObject = ctx->Texture.ProxyTex[texIndex];
912 * \param ctx GL context.
921 _mesa_max_texture_levels(struct gl_context *ctx, GLenum target)
928 return ctx->Const.MaxTextureLevels;
931 return ctx->Const.Max3DTextureLevels;
940 return ctx->Extensions.ARB_texture_cube_map
941 ? ctx->Const.MaxCubeTextureLevels : 0;
944 return ctx->Extensions.NV_texture_rectangle ? 1 : 0;
949 return (ctx->Extensions.MESA_texture_array ||
950 ctx->Extensions.EXT_texture_array)
951 ? ctx->Const.MaxTextureLevels : 0;
953 return _mesa_is_desktop_gl(ctx)
954 && ctx->Extensions.ARB_texture_buffer_object
1125 * \param ctx GL context.
1138 _mesa_init_teximage_fields(struct gl_context *ctx,
1151 ctx, internalFormat );
1237 * \param ctx GL context.
1244 _mesa_clear_texture_image(struct gl_context *ctx,
1247 ctx->Driver.FreeTextureImageBuffer(ctx, texImage);
1254 * level, width, height and depth against the ctx->Const limits for textures.
1277 _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level,
1289 if (level >= ctx->Const.MaxTextureLevels)
1291 maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); /* level zero size */
1295 if (!ctx->Extensions.ARB_texture_non_power_of_two) {
1302 if (level >= ctx->Const.MaxTextureLevels)
1304 maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
1310 if (!ctx->Extensions.ARB_texture_non_power_of_two) {
1319 if (level >= ctx->Const.Max3DTextureLevels)
1321 maxSize = 1 << (ctx->Const.Max3DTextureLevels - 1);
1329 if (!ctx->Extensions.ARB_texture_non_power_of_two) {
1342 maxSize = ctx->Const.MaxTextureRectSize;
1350 if (level >= ctx->Const.MaxCubeTextureLevels)
1352 maxSize = 1 << (ctx->Const.MaxCubeTextureLevels - 1);
1358 if (!ctx->Extensions.ARB_texture_non_power_of_two) {
1367 if (level >= ctx->Const.MaxTextureLevels)
1369 maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
1373 if (height < 1 || height > ctx->Const.MaxArrayTextureLayers)
1375 if (!ctx->Extensions.ARB_texture_non_power_of_two) {
1382 if (level >= ctx->Const.MaxTextureLevels)
1384 maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
1390 if (depth < 1 || depth > ctx->Const.MaxArrayTextureLayers)
1392 if (!ctx->Extensions.ARB_texture_non_power_of_two) {
1401 _mesa_problem(ctx, "Invalid target in _mesa_test_proxy_teximage");
1415 legal_texture_size(struct gl_context *ctx, gl_format format,
1420 return mbytes <= (uint64_t) ctx->Const.MaxTextureMbytes;
1428 compressedteximage_only_format(const struct gl_context *ctx, GLenum format)
1454 target_can_be_compressed(const struct gl_context *ctx, GLenum target,
1470 return ctx->Extensions.ARB_texture_cube_map;
1473 return (ctx->Extensions.MESA_texture_array ||
1474 ctx->Extensions.EXT_texture_array);
1486 legal_teximage_target(struct gl_context *ctx, GLuint dims, GLenum target)
1493 return _mesa_is_desktop_gl(ctx);
1502 return _mesa_is_desktop_gl(ctx);
1504 return _mesa_is_desktop_gl(ctx)
1505 && ctx->Extensions.ARB_texture_cube_map;
1512 return ctx->Extensions.ARB_texture_cube_map;
1515 return _mesa_is_desktop_gl(ctx)
1516 && ctx->Extensions.NV_texture_rectangle;
1519 return _mesa_is_desktop_gl(ctx)
1520 && (ctx->Extensions.MESA_texture_array ||
1521 ctx->Extensions.EXT_texture_array);
1530 return _mesa_is_desktop_gl(ctx);
1532 return (_mesa_is_desktop_gl(ctx)
1533 && (ctx->Extensions.MESA_texture_array ||
1534 ctx->Extensions.EXT_texture_array))
1535 || _mesa_is_gles3(ctx);
1537 return _mesa_is_desktop_gl(ctx)
1538 && (ctx->Extensions.MESA_texture_array ||
1539 ctx->Extensions.EXT_texture_array);
1544 _mesa_problem(ctx, "invalid dims=%u in legal_teximage_target()", dims);
1557 legal_texsubimage_target(struct gl_context *ctx, GLuint dims, GLenum target)
1561 return _mesa_is_desktop_gl(ctx) && target == GL_TEXTURE_1D;
1572 return ctx->Extensions.ARB_texture_cube_map;
1574 return _mesa_is_desktop_gl(ctx)
1575 && ctx->Extensions.NV_texture_rectangle;
1577 return _mesa_is_desktop_gl(ctx)
1578 && (ctx->Extensions.MESA_texture_array ||
1579 ctx->Extensions.EXT_texture_array);
1588 return (_mesa_is_desktop_gl(ctx)
1589 && (ctx->Extensions.MESA_texture_array ||
1590 ctx->Extensions.EXT_texture_array))
1591 || _mesa_is_gles3(ctx);
1596 _mesa_problem(ctx, "invalid dims=%u in legal_texsubimage_target()",
1608 mutable_tex_object(struct gl_context *ctx, GLenum target)
1610 if (ctx->Extensions.ARB_texture_storage) {
1612 _mesa_get_current_tex_object(ctx, target);
1718 * \param ctx GL context.
1738 texture_error_check( struct gl_context *ctx,
1764 /* Basic level check (more checking in ctx->Driver.TestProxyTexImage) */
1766 _mesa_error(ctx, GL_INVALID_VALUE,
1773 ((ctx->API != API_OPENGL ||
1776 _mesa_error(ctx, GL_INVALID_VALUE,
1782 _mesa_error(ctx, GL_INVALID_VALUE,
1792 if (_mesa_is_gles(ctx) && !_mesa_is_gles3(ctx)) {
1794 _mesa_error(ctx, GL_INVALID_OPERATION,
1804 _mesa_error(ctx, err,
1822 sizeOK = sizeOK && ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level,
1832 _mesa_error(ctx, GL_INVALID_VALUE,
1840 if (_mesa_base_tex_format(ctx, internalFormat) < 0) {
1841 _mesa_error(ctx, GL_INVALID_VALUE,
1848 err = _mesa_error_check_format_and_type(ctx, format, type);
1850 _mesa_error(ctx, err,
1863 _mesa_error(ctx, GL_INVALID_OPERATION,
1871 ASSERT(ctx->Extensions.MESA_ycbcr_texture);
1878 _mesa_error(ctx, GL_INVALID_ENUM, "%s", message);
1885 _mesa_error(ctx, GL_INVALID_ENUM,
1895 _mesa_error(ctx, GL_INVALID_VALUE, "%s", message);
1901 if (_mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_COMPONENT) {
1915 (ctx->Version >= 30 || ctx->Extensions.EXT_gpu_shader4))) {
1916 _mesa_error(ctx, GL_INVALID_ENUM,
1924 if (_mesa_is_compressed_format(ctx, internalFormat)) {
1925 if (!target_can_be_compressed(ctx, target, internalFormat)) {
1926 _mesa_error(ctx, GL_INVALID_ENUM,
1930 if (compressedteximage_only_format(ctx, internalFormat)) {
1931 _mesa_error(ctx, GL_INVALID_OPERATION,
1936 _mesa_error(ctx, GL_INVALID_OPERATION,
1943 if ((ctx->Version >= 30 || ctx->Extensions.EXT_texture_integer) &&
1946 _mesa_error(ctx, GL_INVALID_OPERATION,
1952 if (!mutable_tex_object(ctx, target)) {
1953 _mesa_error(ctx, GL_INVALID_OPERATION,
1969 compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
1976 const GLint maxLevels = _mesa_max_texture_levels(ctx, target);
1984 if (!target_can_be_compressed(ctx, target, internalFormat)) {
1991 if (!_mesa_is_compressed_format(ctx, internalFormat)) {
2063 if (_mesa_base_tex_format(ctx, internalFormat) < 0) {
2084 if (!ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level,
2108 if (!mutable_tex_object(ctx, target)) {
2117 _mesa_error(ctx, error, "glCompressedTexImage%dD(%s)", dimensions, reason);
2126 * \param ctx
2146 subtexture_error_check( struct gl_context *ctx, GLuint dimensions,
2156 _mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage2D(level=%d)", level);
2162 _mesa_error(ctx, GL_INVALID_VALUE,
2167 _mesa_error(ctx, GL_INVALID_VALUE,
2172 _mesa_error(ctx, GL_INVALID_VALUE,
2182 if (_mesa_is_gles(ctx) && !_mesa_is_gles3(ctx)) {
2185 _mesa_error(ctx, err,
2194 err = _mesa_error_check_format_and_type(ctx, format, type);
2196 _mesa_error(ctx, err,
2211 subtexture_error_check2( struct gl_context *ctx, GLuint dimensions,
2220 _mesa_error(ctx, GL_INVALID_OPERATION, "glTexSubImage%dD", dimensions);
2225 _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(xoffset)",
2230 _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(xoffset+width)",
2237 _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(yoffset)",
2242 _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(yoffset+height)",
2250 _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage3D(zoffset)");
2254 _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage3D(zoffset+depth)");
2262 if (compressedteximage_only_format(ctx, destTex->InternalFormat)) {
2263 _mesa_error(ctx, GL_INVALID_OPERATION,
2273 _mesa_error(ctx, GL_INVALID_OPERATION,
2280 _mesa_error(ctx, GL_INVALID_OPERATION,
2285 _mesa_error(ctx, GL_INVALID_OPERATION,
2291 if (ctx->Version >= 30 || ctx->Extensions.EXT_texture_integer) {
2295 _mesa_error(ctx, GL_INVALID_OPERATION,
2309 * \param ctx GL context.
2325 copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
2335 if (!legal_texsubimage_target(ctx, dimensions, target)) {
2336 _mesa_error(ctx, GL_INVALID_ENUM, "glCopyTexImage%uD(target=%s)",
2341 /* Basic level check (more checking in ctx->Driver.TestProxyTexImage) */
2343 _mesa_error(ctx, GL_INVALID_VALUE,
2349 if (_mesa_is_user_fbo(ctx->ReadBuffer)) {
2350 if (ctx->ReadBuffer->_Status == 0) {
2351 _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer);
2353 if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
2354 _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
2359 if (ctx->ReadBuffer->Visual.samples > 0) {
2360 _mesa_error(ctx, GL_INVALID_OPERATION,
2369 ((ctx->API != API_OPENGL ||
2372 _mesa_error(ctx, GL_INVALID_VALUE,
2380 if (_mesa_is_gles(ctx) && !_mesa_is_gles3(ctx)) {
2389 _mesa_error(ctx, GL_INVALID_VALUE,
2395 baseFormat = _mesa_base_tex_format(ctx, internalFormat);
2397 _mesa_error(ctx, GL_INVALID_VALUE,
2402 if (!_mesa_source_buffer_exists(ctx, baseFormat)) {
2403 _mesa_error(ctx, GL_INVALID_OPERATION,
2416 struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
2420 _mesa_error(ctx, GL_INVALID_OPERATION,
2430 sizeOK = sizeOK && ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level,
2437 _mesa_error(ctx, GL_INVALID_VALUE,
2442 _mesa_error(ctx, GL_INVALID_VALUE,
2448 if (_mesa_is_compressed_format(ctx, internalFormat)) {
2449 if (!target_can_be_compressed(ctx, target, internalFormat)) {
2450 _mesa_error(ctx, GL_INVALID_ENUM,
2454 if (compressedteximage_only_format(ctx, internalFormat)) {
2455 _mesa_error(ctx, GL_INVALID_OPERATION,
2460 _mesa_error(ctx, GL_INVALID_OPERATION,
2466 if (!mutable_tex_object(ctx, target)) {
2467 _mesa_error(ctx, GL_INVALID_OPERATION,
2482 * \param ctx GL context.
2490 copytexsubimage_error_check1( struct gl_context *ctx, GLuint dimensions,
2494 if (_mesa_is_user_fbo(ctx->ReadBuffer)) {
2495 if (ctx->ReadBuffer->_Status == 0) {
2496 _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer);
2498 if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
2499 _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
2504 if (ctx->ReadBuffer->Visual.samples > 0) {
2505 _mesa_error(ctx, GL_INVALID_OPERATION,
2513 if (!legal_texsubimage_target(ctx, dimensions, target)) {
2514 _mesa_error(ctx, GL_INVALID_ENUM, "glCopyTexSubImage%uD(target=%s)",
2521 _mesa_error(ctx, GL_INVALID_VALUE,
2539 copytexsubimage_error_check2( struct gl_context *ctx, GLuint dimensions,
2547 _mesa_error(ctx, GL_INVALID_OPERATION,
2555 _mesa_error(ctx, GL_INVALID_VALUE,
2560 _mesa_error(ctx, GL_INVALID_VALUE,
2567 _mesa_error(ctx, GL_INVALID_VALUE,
2572 _mesa_error(ctx, GL_INVALID_VALUE,
2579 _mesa_error(ctx, GL_INVALID_VALUE,
2585 _mesa_error(ctx, GL_INVALID_VALUE,
2595 _mesa_error(ctx, GL_INVALID_VALUE,
2600 _mesa_error(ctx, GL_INVALID_VALUE,
2607 if (compressedteximage_only_format(ctx, teximage->InternalFormat)) {
2608 _mesa_error(ctx, GL_INVALID_OPERATION,
2614 _mesa_error(ctx, GL_INVALID_VALUE,
2620 _mesa_error(ctx, GL_INVALID_VALUE,
2625 _mesa_error(ctx, GL_INVALID_VALUE,
2632 _mesa_error(ctx, GL_INVALID_OPERATION, "glCopyTexSubImage2D");
2636 if (!_mesa_source_buffer_exists(ctx, teximage->_BaseFormat)) {
2637 _mesa_error(ctx, GL_INVALID_OPERATION,
2651 struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
2655 _mesa_error(ctx, GL_INVALID_OPERATION,
2669 struct gl_context *ctx;
2683 struct gl_context *ctx = info->ctx;
2699 ctx->Driver.RenderTexture(ctx, ctx->DrawBuffer, att);
2715 _mesa_update_fbo_texture(struct gl_context *ctx,
2722 info.ctx = ctx;
2726 _mesa_HashWalk(ctx->Shared->FrameBuffers, check_rtt_cb, &info);
2737 check_gen_mipmap(struct gl_context *ctx, GLenum target,
2744 ASSERT(ctx->Driver.GenerateMipmap);
2745 ctx->Driver.GenerateMipmap(ctx, target, texObj);
2803 _mesa_choose_texture_format(struct gl_context *ctx,
2813 _mesa_select_tex_image(ctx, texObj, target, level - 1);
2834 if (!ctx->Mesa_DXTn)
2840 if (!ctx->Mesa_DXTn)
2848 _mesa_warning(ctx,
2858 f = ctx->Driver.ChooseTextureFormat(ctx, texObj->Target, internalFormat,
2917 teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims,
2926 const struct gl_pixelstore_attrib *unpack = &ctx->Unpack;
2928 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
2932 _mesa_debug(ctx,
2939 _mesa_debug(ctx,
2952 if (!legal_teximage_target(ctx, dims, target)) {
2953 _mesa_error(ctx, GL_INVALID_ENUM, "%s%uD(target=%s)",
2960 error = compressed_texture_error_check(ctx, dims, target, level,
2966 error = texture_error_check(ctx, dims, target, level, internalFormat,
2997 get_proxy_tex_image(ctx, target, level);
3005 _mesa_get_current_tex_object(ctx, target);
3006 texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
3008 if (!legal_texture_size(ctx, texFormat, width, height, depth)) {
3021 _mesa_init_teximage_fields(ctx, texImage, width, height, depth,
3042 if (border && ctx->Const.StripTextureBorder) {
3049 if (ctx->NewState & _NEW_PIXEL)
3050 _mesa_update_state(ctx);
3052 texObj = _mesa_get_current_tex_object(ctx, target);
3054 _mesa_lock_texture(ctx, texObj);
3056 ctx, texObj, target, level);
3059 _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s%uD", func, dims);
3064 ctx->Driver.FreeTextureImageBuffer(ctx, texImage);
3066 texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
3070 if (legal_texture_size(ctx, texFormat, width, height, depth)) {
3071 _mesa_init_teximage_fields(ctx, texImage,
3078 ctx->Driver.CompressedTexImage(ctx, dims, texImage,
3082 ctx->Driver.TexImage(ctx, dims, texImage, format,
3087 check_gen_mipmap(ctx, target, texObj, level);
3089 _mesa_update_fbo_texture(ctx, texObj, face, level);
3091 _mesa_dirty_texobj(ctx, texObj, GL_TRUE);
3094 _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s%uD", func, dims);
3098 _mesa_unlock_texture(ctx, texObj);
3111 GET_CURRENT_CONTEXT(ctx);
3112 teximage(ctx, GL_FALSE, 1, target, level, internalFormat, width, 1, 1,
3123 GET_CURRENT_CONTEXT(ctx);
3124 teximage(ctx, GL_FALSE, 2, target, level, internalFormat, width, height, 1,
3139 GET_CURRENT_CONTEXT(ctx);
3140 teximage(ctx, GL_FALSE, 3, target, level, internalFormat,
3164 GET_CURRENT_CONTEXT(ctx);
3165 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
3169 valid_target = ctx->Extensions.OES_EGL_image;
3172 valid_target = ctx->Extensions.OES_EGL_image_external;
3180 _mesa_error(ctx, GL_INVALID_ENUM,
3185 if (ctx->NewState & _NEW_PIXEL)
3186 _mesa_update_state(ctx);
3188 texObj = _mesa_get_current_tex_object(ctx, target);
3189 _mesa_lock_texture(ctx, texObj);
3192 _mesa_error(ctx, GL_INVALID_OPERATION,
3194 _mesa_unlock_texture(ctx, texObj);
3198 texImage = _mesa_get_tex_image(ctx, texObj, target, 0);
3200 _mesa_error(ctx, GL_OUT_OF_MEMORY, "glEGLImageTargetTexture2D");
3202 ctx->Driver.FreeTextureImageBuffer(ctx, texImage);
3204 ctx->Driver.EGLImageTargetTexture2D(ctx, target,
3207 _mesa_dirty_texobj(ctx, texObj, GL_TRUE);
3209 _mesa_unlock_texture(ctx, texObj);
3220 texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
3228 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
3231 _mesa_debug(ctx, "glTexSubImage%uD %s %d %d %d %d %d %d %d %s %s %p\n",
3239 if (!legal_texsubimage_target(ctx, dims, target)) {
3240 _mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage%uD(target=%s)",
3245 if (ctx->NewState & _NEW_PIXEL)
3246 _mesa_update_state(ctx);
3248 if (subtexture_error_check(ctx, dims, target, level, xoffset, yoffset, zoffset,
3253 texObj = _mesa_get_current_tex_object(ctx, target);
3255 _mesa_lock_texture(ctx, texObj);
3257 texImage = _mesa_select_tex_image(ctx, texObj, target, level);
3259 if (subtexture_error_check2(ctx, dims, target, level,
3280 ctx->Driver.TexSubImage(ctx, dims, texImage,
3283 format, type, pixels, &ctx->Unpack);
3285 check_gen_mipmap(ctx, target, texObj, level);
3287 ctx->NewState |= _NEW_TEXTURE;
3290 _mesa_unlock_texture(ctx, texObj);
3300 GET_CURRENT_CONTEXT(ctx);
3301 texsubimage(ctx, 1, target, level,
3315 GET_CURRENT_CONTEXT(ctx);
3316 texsubimage(ctx, 2, target, level,
3331 GET_CURRENT_CONTEXT(ctx);
3332 texsubimage(ctx, 3, target, level,
3345 get_copy_tex_image_source(struct gl_context *ctx, gl_format texFormat)
3349 return ctx->ReadBuffer->Attachment[BUFFER_DEPTH].Renderbuffer;
3353 return ctx->ReadBuffer->_ColorReadBuffer;
3363 copyteximage(struct gl_context *ctx, GLuint dims,
3371 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
3374 _mesa_debug(ctx, "glCopyTexImage%uD %s %d %s %d %d %d %d %d\n",
3380 if (ctx->NewState & NEW_COPY_TEX_STATE)
3381 _mesa_update_state(ctx);
3383 if (copytexture_error_check(ctx, dims, target, level, internalFormat,
3387 texObj = _mesa_get_current_tex_object(ctx, target);
3389 if (border && ctx->Const.StripTextureBorder) {
3399 _mesa_lock_texture(ctx, texObj);
3401 texImage = _mesa_get_tex_image(ctx, texObj, target, level);
3404 _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage%uD", dims);
3408 gl_format texFormat = _mesa_choose_texture_format(ctx, texObj,
3413 if (legal_texture_size(ctx, texFormat, width, height, 1)) {
3417 ctx->Driver.FreeTextureImageBuffer(ctx, texImage);
3419 _mesa_init_teximage_fields(ctx, texImage, width, height, 1,
3423 ctx->Driver.TexImage(ctx, dims, texImage,
3425 NULL, &ctx->Unpack);
3427 if (_mesa_clip_copytexsubimage(ctx, &dstX, &dstY, &srcX, &srcY,
3430 get_copy_tex_image_source(ctx, texImage->TexFormat);
3432 ctx->Driver.CopyTexSubImage(ctx, dims, texImage, dstX, dstY, dstZ,
3436 check_gen_mipmap(ctx, target, texObj, level);
3438 _mesa_update_fbo_texture(ctx, texObj, face, level);
3440 _mesa_dirty_texobj(ctx, texObj, GL_TRUE);
3444 _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage%uD", dims);
3448 _mesa_unlock_texture(ctx, texObj);
3459 GET_CURRENT_CONTEXT(ctx);
3460 copyteximage(ctx, 1, target, level, internalFormat, x, y, width, 1, border);
3470 GET_CURRENT_CONTEXT(ctx);
3471 copyteximage(ctx, 2, target, level, internalFormat,
3481 copytexsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
3488 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
3491 _mesa_debug(ctx, "glCopyTexSubImage%uD %s %d %d %d %d %d %d %d %d\n",
3496 if (ctx->NewState & NEW_COPY_TEX_STATE)
3497 _mesa_update_state(ctx);
3499 if (copytexsubimage_error_check1(ctx, dims, target, level))
3502 texObj = _mesa_get_current_tex_object(ctx, target);
3504 _mesa_lock_texture(ctx, texObj);
3506 texImage = _mesa_select_tex_image(ctx, texObj, target, level);
3508 if (copytexsubimage_error_check2(ctx, dims, target, level, xoffset, yoffset,
3527 if (_mesa_clip_copytexsubimage(ctx, &xoffset, &yoffset, &x, &y,
3530 get_copy_tex_image_source(ctx, texImage->TexFormat);
3532 ctx->Driver.CopyTexSubImage(ctx, dims, texImage,
3536 check_gen_mipmap(ctx, target, texObj, level);
3538 ctx->NewState |= _NEW_TEXTURE;
3542 _mesa_unlock_texture(ctx, texObj);
3550 GET_CURRENT_CONTEXT(ctx);
3551 copytexsubimage(ctx, 1, target, level, xoffset, 0, 0, x, y, width, 1);
3561 GET_CURRENT_CONTEXT(ctx);
3562 copytexsubimage(ctx, 2, target, level, xoffset, yoffset, 0, x, y,
3573 GET_CURRENT_CONTEXT(ctx);
3574 copytexsubimage(ctx
3594 compressed_subtexture_error_check(struct gl_context *ctx, GLint dimensions,
3610 maxLevels = ctx->Const.MaxTextureLevels;
3613 maxLevels = ctx->Const.MaxTextureLevels;
3616 if (!ctx->Extensions.ARB_texture_cube_map)
3618 maxLevels = ctx->Const.MaxCubeTextureLevels;
3621 if (!ctx->Extensions.ARB_texture_cube_map)
3623 maxLevels = ctx->Const.MaxCubeTextureLevels;
3637 if (!_mesa_is_compressed_format(ctx, format))
3677 compressed_subtexture_error_check2(struct gl_context *ctx, GLuint dims,
3683 _mesa_error(ctx, GL_INVALID_OPERATION,
3689 _mesa_error(ctx, GL_INVALID_OPERATION,
3694 if (compressedteximage_only_format(ctx, format)) {
3695 _mesa_error(ctx, GL_INVALID_OPERATION,
3704 _mesa_error(ctx, GL_INVALID_VALUE,
3713 _mesa_error(ctx, GL_INVALID_VALUE,
3723 _mesa_error(ctx, GL_INVALID_VALUE,
3739 GET_CURRENT_CONTEXT(ctx);
3740 teximage(ctx, GL_TRUE, 1, target, level, internalFormat,
3751 GET_CURRENT_CONTEXT(ctx);
3752 teximage(ctx, GL_TRUE, 2, target, level, internalFormat,
3763 GET_CURRENT_CONTEXT(ctx);
3764 teximage(ctx, GL_TRUE, 3, target, level, internalFormat,
3781 GET_CURRENT_CONTEXT(ctx);
3782 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
3784 error = compressed_subtexture_error_check(ctx, dims, target, level,
3789 _mesa_error(ctx, error, "glCompressedTexSubImage%uD", dims);
3793 texObj = _mesa_get_current_tex_object(ctx, target);
3795 _mesa_lock_texture(ctx, texObj);
3797 texImage = _mesa_select_tex_image(ctx, texObj, target, level);
3799 if (compressed_subtexture_error_check2(ctx, dims, width, height, depth,
3804 ctx->Driver.CompressedTexSubImage(ctx, dims, texImage,
3809 check_gen_mipmap(ctx, target, texObj, level);
3811 ctx->NewState |= _NEW_TEXTURE;
3814 _mesa_unlock_texture(ctx, texObj);
3850 get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat)
4002 validate_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat)
4004 gl_format format = get_texbuffer_format(ctx, internalFormat);
4011 if (datatype == GL_FLOAT && !ctx->Extensions.ARB_texture_float)
4014 if (datatype == GL_HALF_FLOAT && !ctx->Extensions.ARB_half_float_pixel)
4021 if (ctx->Version <= 30) {
4039 GET_CURRENT_CONTEXT(ctx);
4040 ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
4042 if (!(ctx->Extensions.ARB_texture_buffer_object
4043 && _mesa_is_desktop_gl(ctx))) {
4044 _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer");
4049 _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(target)");
4053 format = validate_texbuffer_format(ctx, internalFormat);
4055 _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(internalFormat 0x%x)",
4060 bufObj = _mesa_lookup_bufferobj(ctx, buffer);
4062 _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer(buffer %u)", buffer);
4066 texObj = _mesa_get_current_tex_object(ctx, target);
4068 _mesa_lock_texture(ctx, texObj);
4070 _mesa_reference_buffer_object(ctx, &texObj->BufferObject, bufObj);
4074 _mesa_unlock_texture(ctx, texObj);