intel: Implement ARB_texture_storage

This is basically cut-and-paste from the swrast implementation, and it
could probably be (slightly) more optimal.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Ian Romanick 2012-08-10 21:31:57 -07:00
parent 92b614172f
commit 9bcb9fad65
2 changed files with 27 additions and 0 deletions

View File

@ -57,6 +57,7 @@ intelInitExtensions(struct gl_context *ctx)
ctx->Extensions.ARB_texture_env_combine = true;
ctx->Extensions.ARB_texture_env_crossbar = true;
ctx->Extensions.ARB_texture_env_dot3 = true;
ctx->Extensions.ARB_texture_storage = true;
ctx->Extensions.ARB_vertex_array_object = true;
ctx->Extensions.ARB_vertex_program = true;
ctx->Extensions.ARB_vertex_shader = true;

View File

@ -110,6 +110,31 @@ intel_alloc_texture_image_buffer(struct gl_context *ctx,
return true;
}
/**
* Called via ctx->Driver.AllocTextureStorage()
* Just have to allocate memory for the texture images.
*/
static GLboolean
intel_alloc_texture_storage(struct gl_context *ctx,
struct gl_texture_object *texObj,
GLsizei levels, GLsizei width,
GLsizei height, GLsizei depth)
{
const int numFaces = (texObj->Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
int face;
int level;
for (face = 0; face < numFaces; face++) {
for (level = 0; level < levels; level++) {
struct gl_texture_image *const texImage = texObj->Image[face][level];
if (!intel_alloc_texture_image_buffer(ctx, texImage))
return false;
}
}
return true;
}
static void
intel_free_texture_image_buffer(struct gl_context * ctx,
struct gl_texture_image *texImage)
@ -191,6 +216,7 @@ intelInitTextureFuncs(struct dd_function_table *functions)
functions->DeleteTexture = intelDeleteTextureObject;
functions->AllocTextureImageBuffer = intel_alloc_texture_image_buffer;
functions->FreeTextureImageBuffer = intel_free_texture_image_buffer;
functions->AllocTextureStorage = intel_alloc_texture_storage;
functions->MapTextureImage = intel_map_texture_image;
functions->UnmapTextureImage = intel_unmap_texture_image;
}