static void intelTexImage(struct gl_context * ctx, GLuint dims, struct gl_texture_image *texImage, GLenum format, GLenum type, const void *pixels, const struct gl_pixelstore_attrib *unpack) { struct intel_texture_image *intelImage = intel_texture_image(texImage); bool ok; bool tex_busy = intelImage->mt && drm_intel_bo_busy(intelImage->mt->bo); DBG("%s mesa_format %s target %s format %s type %s level %d %dx%dx%d\n", __func__, _mesa_get_format_name(texImage->TexFormat), _mesa_enum_to_string(texImage->TexObject->Target), _mesa_enum_to_string(format), _mesa_enum_to_string(type), texImage->Level, texImage->Width, texImage->Height, texImage->Depth); /* Allocate storage for texture data. */ if (!ctx->Driver.AllocTextureImageBuffer(ctx, texImage)) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage%uD", dims); return; } assert(intelImage->mt); if (intelImage->mt->format == MESA_FORMAT_S_UINT8) intelImage->mt->r8stencil_needs_update = true; ok = _mesa_meta_pbo_TexSubImage(ctx, dims, texImage, 0, 0, 0, texImage->Width, texImage->Height, texImage->Depth, format, type, pixels, tex_busy, unpack); if (ok) return; ok = intel_texsubimage_tiled_memcpy(ctx, dims, texImage, 0, 0, 0, /*x,y,z offsets*/ texImage->Width, texImage->Height, texImage->Depth, format, type, pixels, unpack, false /*allocate_storage*/); if (ok) return; DBG("%s: upload image %dx%dx%d pixels %p\n", __func__, texImage->Width, texImage->Height, texImage->Depth, pixels); _mesa_store_teximage(ctx, dims, texImage, format, type, pixels, unpack); }
static void intelTexImage(struct gl_context * ctx, GLuint dims, struct gl_texture_image *texImage, GLenum format, GLenum type, const void *pixels, const struct gl_pixelstore_attrib *unpack) { bool ok; DBG("%s target %s level %d %dx%dx%d\n", __FUNCTION__, _mesa_lookup_enum_by_nr(texImage->TexObject->Target), texImage->Level, texImage->Width, texImage->Height, texImage->Depth); ok = intel_texsubimage_tiled_memcpy(ctx, dims, texImage, 0, 0, 0, /*x,y,z offsets*/ texImage->Width, texImage->Height, texImage->Depth, format, type, pixels, unpack, true /*for_glTexImage*/); if (ok) return; /* Attempt to use the blitter for PBO image uploads. */ if (dims <= 2 && try_pbo_upload(ctx, texImage, unpack, format, type, pixels)) { return; } DBG("%s: upload image %dx%dx%d pixels %p\n", __FUNCTION__, texImage->Width, texImage->Height, texImage->Depth, pixels); _mesa_store_teximage(ctx, dims, texImage, format, type, pixels, unpack); }