[Mesa-dev] [PATCH 1/2] mesa: Generalize TexStorage allocator between swrast and intel.
Brian Paul
brianp at vmware.com
Fri Apr 19 11:49:44 PDT 2013
On 04/19/2013 12:29 PM, Eric Anholt wrote:
> This should be reusable for other non-gallium drivers, so we can make the
> extension always be available.
> ---
> src/mesa/drivers/common/driverfuncs.c | 3 ++-
> src/mesa/drivers/dri/intel/intel_tex.c | 26 --------------------------
> src/mesa/main/texstorage.c | 21 +++++++++++++++++++++
> src/mesa/main/texstorage.h | 5 +++++
> src/mesa/swrast/s_texture.c | 27 ---------------------------
> src/mesa/swrast/swrast.h | 8 --------
> 6 files changed, 28 insertions(+), 62 deletions(-)
>
> diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c
> index a98dfc6..9112eb0 100644
> --- a/src/mesa/drivers/common/driverfuncs.c
> +++ b/src/mesa/drivers/common/driverfuncs.c
> @@ -40,6 +40,7 @@
> #include "main/texgetimage.h"
> #include "main/teximage.h"
> #include "main/texobj.h"
> +#include "main/texstorage.h"
> #include "main/texstore.h"
> #include "main/bufferobj.h"
> #include "main/fbobject.h"
> @@ -209,7 +210,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
> driver->EndCallList = NULL;
>
> /* GL_ARB_texture_storage */
> - driver->AllocTextureStorage = _swrast_AllocTextureStorage;
> + driver->AllocTextureStorage = _mesa_alloc_texture_storage;
>
> /* GL_ARB_texture_multisample */
> driver->GetSamplePosition = NULL;
> diff --git a/src/mesa/drivers/dri/intel/intel_tex.c b/src/mesa/drivers/dri/intel/intel_tex.c
> index 9bba989..ee8db71 100644
> --- a/src/mesa/drivers/dri/intel/intel_tex.c
> +++ b/src/mesa/drivers/dri/intel/intel_tex.c
> @@ -127,31 +127,6 @@ 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 = _mesa_num_tex_faces(texObj->Target);
> - 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)
> @@ -231,7 +206,6 @@ 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;
> }
> diff --git a/src/mesa/main/texstorage.c b/src/mesa/main/texstorage.c
> index 330d676..0a69442 100644
> --- a/src/mesa/main/texstorage.c
> +++ b/src/mesa/main/texstorage.c
> @@ -244,6 +244,27 @@ _mesa_is_legal_tex_storage_format(struct gl_context *ctx, GLenum internalformat)
> }
> }
>
> +GLboolean
> +_mesa_alloc_texture_storage(struct gl_context *ctx,
> + struct gl_texture_object *texObj,
> + GLsizei levels, GLsizei width,
> + GLsizei height, GLsizei depth)
> +{
> + const int numFaces = _mesa_num_tex_faces(texObj->Target);
> + 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 (!ctx->Driver.AllocTextureImageBuffer(ctx, texImage))
> + return GL_FALSE;
> + }
> + }
> +
> + return GL_TRUE;
> +}
> +
>
> /**
> * Do error checking for calls to glTexStorage1/2/3D().
> diff --git a/src/mesa/main/texstorage.h b/src/mesa/main/texstorage.h
> index 9f172e1..0240ca3 100644
> --- a/src/mesa/main/texstorage.h
> +++ b/src/mesa/main/texstorage.h
> @@ -60,5 +60,10 @@ _mesa_TextureStorage3DEXT(GLuint texture, GLenum target, GLsizei levels,
> extern GLboolean
> _mesa_is_legal_tex_storage_format(struct gl_context *ctx, GLenum internalformat);
>
> +extern GLboolean
> +_mesa_alloc_texture_storage(struct gl_context *ctx,
> + struct gl_texture_object *texObj,
> + GLsizei levels, GLsizei width,
> + GLsizei height, GLsizei depth);
>
> #endif /* TEXSTORAGE_H */
> diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c
> index 8ae3d5b..51048be 100644
> --- a/src/mesa/swrast/s_texture.c
> +++ b/src/mesa/swrast/s_texture.c
> @@ -322,30 +322,3 @@ _swrast_unmap_textures(struct gl_context *ctx)
> enabledUnits&= ~(1<< unit);
> }
> }
> -
> -
> -/**
> - * Called via ctx->Driver.AllocTextureStorage()
> - * Just have to allocate memory for the texture images.
> - */
Can you transport this comment to the new
_mesa_alloc_texture_storage() function (and perhaps improve it)?
> -GLboolean
> -_swrast_AllocTextureStorage(struct gl_context *ctx,
> - struct gl_texture_object *texObj,
> - GLsizei levels, GLsizei width,
> - GLsizei height, GLsizei depth)
> -{
> - const GLint numFaces = (texObj->Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
> - GLint face, level;
> -
> - for (face = 0; face< numFaces; face++) {
> - for (level = 0; level< levels; level++) {
> - struct gl_texture_image *texImage = texObj->Image[face][level];
> - if (!_swrast_alloc_texture_image_buffer(ctx, texImage)) {
> - return GL_FALSE;
> - }
> - }
> - }
> -
> - return GL_TRUE;
> -}
> -
> diff --git a/src/mesa/swrast/swrast.h b/src/mesa/swrast/swrast.h
> index 82555ae..0f74bb9 100644
> --- a/src/mesa/swrast/swrast.h
> +++ b/src/mesa/swrast/swrast.h
> @@ -272,14 +272,6 @@ _swrast_finish_render_texture(struct gl_context *ctx,
> struct gl_renderbuffer_attachment *att);
>
>
> -
> -extern GLboolean
> -_swrast_AllocTextureStorage(struct gl_context *ctx,
> - struct gl_texture_object *texObj,
> - GLsizei levels, GLsizei width,
> - GLsizei height, GLsizei depth);
> -
> -
> /**
> * The driver interface for the software rasterizer.
> * XXX this may go away.
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list