1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/swrast.h" 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/renderbuffer.h" 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/texobj.h" 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/teximage.h" 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mipmap.h" 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "drivers/common/meta.h" 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_context.h" 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_mipmap_tree.h" 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_tex.h" 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FILE_DEBUG_FLAG DEBUG_TEXTURE 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct gl_texture_image * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintelNewTextureImage(struct gl_context * ctx) 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) ctx; 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct gl_texture_image *) CALLOC_STRUCT(intel_texture_image); 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintelDeleteTextureImage(struct gl_context * ctx, struct gl_texture_image *img) 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* nothing special (yet) for intel_texture_image */ 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_delete_texture_image(ctx, img); 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct gl_texture_object * 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintelNewTextureObject(struct gl_context * ctx, GLuint name, GLenum target) 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_object *obj = CALLOC_STRUCT(intel_texture_object); 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) ctx; 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_initialize_texture_object(&obj->base, name, target); 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &obj->base; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintelDeleteTextureObject(struct gl_context *ctx, 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *texObj) 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_object *intelObj = intel_texture_object(texObj); 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_release(&intelObj->mt); 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_delete_texture_object(ctx, texObj); 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintel_alloc_texture_image_buffer(struct gl_context *ctx, 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_image *image) 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = intel_context(ctx); 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_image *intel_image = intel_texture_image(image); 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *texobj = image->TexObject; 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_object *intel_texobj = intel_texture_object(texobj); 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint slices; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(image->Border == 0); 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Because the driver uses AllocTextureImageBuffer() internally, it may end 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * up mismatched with FreeTextureImageBuffer(), but that is safe to call 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * multiple times. 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Driver.FreeTextureImageBuffer(ctx, image); 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Allocate the swrast_texture_image::ImageOffsets array now */ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (texobj->Target) { 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_3D: 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_2D_ARRAY: 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org slices = image->Depth; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_1D_ARRAY: 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org slices = image->Height; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org slices = 1; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(!intel_image->base.ImageOffsets); 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_image->base.ImageOffsets = malloc(slices * sizeof(GLuint)); 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _swrast_init_texture_image(image); 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel_texobj->mt && 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_match_image(intel_texobj->mt, image)) { 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_reference(&intel_image->mt, intel_texobj->mt); 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s: alloc obj %p level %d %dx%dx%d using object's miptree %p\n", 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __FUNCTION__, texobj, image->Level, 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org image->Width, image->Height, image->Depth, intel_texobj->mt); 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_image->mt = intel_miptree_create_for_teximage(intel, intel_texobj, 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_image, 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org false); 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Even if the object currently has a mipmap tree associated 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * with it, this one is a more likely candidate to represent the 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * whole object since our level didn't fit what was there 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * before, and any lower levels would fit into our miptree. 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_reference(&intel_texobj->mt, intel_image->mt); 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s: alloc obj %p level %d %dx%dx%d using new miptree %p\n", 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __FUNCTION__, texobj, image->Level, 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org image->Width, image->Height, image->Depth, intel_image->mt); 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return true; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Called via ctx->Driver.AllocTextureStorage() 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Just have to allocate memory for the texture images. 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintel_alloc_texture_storage(struct gl_context *ctx, 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *texObj, 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei levels, GLsizei width, 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei height, GLsizei depth) 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int numFaces = _mesa_num_tex_faces(texObj->Target); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int face; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int level; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (face = 0; face < numFaces; face++) { 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (level = 0; level < levels; level++) { 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_image *const texImage = texObj->Image[face][level]; 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!intel_alloc_texture_image_buffer(ctx, texImage)) 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return false; 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return true; 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintel_free_texture_image_buffer(struct gl_context * ctx, 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_image *texImage) 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_image *intelImage = intel_texture_image(texImage); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_release(&intelImage->mt); 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intelImage->base.Buffer) { 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_align_free(intelImage->base.Buffer); 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intelImage->base.Buffer = NULL; 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intelImage->base.ImageOffsets) { 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(intelImage->base.ImageOffsets); 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intelImage->base.ImageOffsets = NULL; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Map texture memory/buffer into user space. 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note: the region of interest parameters are ignored here. 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param mapOut returns start of mapping of region of interest 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param rowStrideOut returns row stride in bytes 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintel_map_texture_image(struct gl_context *ctx, 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_image *tex_image, 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint slice, 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint x, GLuint y, GLuint w, GLuint h, 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield mode, 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte **map, 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint *stride) 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = intel_context(ctx); 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_image *intel_image = intel_texture_image(tex_image); 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_mipmap_tree *mt = intel_image->mt; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Our texture data is always stored in a miptree. */ 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(mt); 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Check that our caller wasn't confused about how to map a 1D texture. */ 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(tex_image->TexObject->Target != GL_TEXTURE_1D_ARRAY || 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org h == 1); 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* intel_miptree_map operates on a unified "slice" number that references the 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * cube face, since it's all just slices to the miptree code. 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (tex_image->TexObject->Target == GL_TEXTURE_CUBE_MAP) 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org slice = tex_image->Face; 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_map(intel, mt, tex_image->Level, slice, x, y, w, h, mode, 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void **)map, stride); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintel_unmap_texture_image(struct gl_context *ctx, 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_image *tex_image, GLuint slice) 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = intel_context(ctx); 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_texture_image *intel_image = intel_texture_image(tex_image); 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_mipmap_tree *mt = intel_image->mt; 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (tex_image->TexObject->Target == GL_TEXTURE_CUBE_MAP) 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org slice = tex_image->Face; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_miptree_unmap(intel, mt, tex_image->Level, slice); 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgintelInitTextureFuncs(struct dd_function_table *functions) 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->NewTextureObject = intelNewTextureObject; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->NewTextureImage = intelNewTextureImage; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->DeleteTextureImage = intelDeleteTextureImage; 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->DeleteTexture = intelDeleteTextureObject; 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->AllocTextureImageBuffer = intel_alloc_texture_image_buffer; 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->FreeTextureImageBuffer = intel_free_texture_image_buffer; 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->AllocTextureStorage = intel_alloc_texture_storage; 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->MapTextureImage = intel_map_texture_image; 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->UnmapTextureImage = intel_unmap_texture_image; 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 223