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:
parent
92b614172f
commit
9bcb9fad65
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue