[Mesa-dev] [PATCH 03/17] swrast: Factor out texture slice counting.

2013-04-22 Thread Eric Anholt
This function going to get used a lot more in upcoming patches.
---
 src/mesa/swrast/s_texture.c |   16 
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c
index 51048be..36a90dd 100644
--- a/src/mesa/swrast/s_texture.c
+++ b/src/mesa/swrast/s_texture.c
@@ -58,6 +58,14 @@ _swrast_delete_texture_image(struct gl_context *ctx,
_mesa_delete_texture_image(ctx, texImage);
 }
 
+static unsigned int
+texture_slices(struct gl_texture_image *texImage)
+{
+   if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY)
+  return texImage->Height;
+   else
+  return texImage->Depth;
+}
 
 /**
  * Called via ctx->Driver.AllocTextureImageBuffer()
@@ -83,11 +91,11 @@ _swrast_alloc_texture_image_buffer(struct gl_context *ctx,
 * We allocate the array for 1D/2D textures too in order to avoid special-
 * case code in the texstore routines.
 */
-   swImg->ImageOffsets = malloc(texImage->Depth * sizeof(GLuint));
+   swImg->ImageOffsets = malloc(texture_slices(texImage) * sizeof(GLuint));
if (!swImg->ImageOffsets)
   return GL_FALSE;
 
-   for (i = 0; i < texImage->Depth; i++) {
+   for (i = 0; i < texture_slices(texImage); i++) {
   swImg->ImageOffsets[i] = i * texImage->Width * texImage->Height;
}
 
@@ -209,20 +217,20 @@ _swrast_map_teximage(struct gl_context *ctx,
   
map = swImage->Buffer;
 
+   assert(slice < texture_slices(texImage));
+
if (texImage->TexObject->Target == GL_TEXTURE_3D ||
texImage->TexObject->Target == GL_TEXTURE_2D_ARRAY) {
   GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
  texImage->Width,
  texImage->Height,
  1);
-  assert(slice < texImage->Depth);
   map += slice * sliceSize;
} else if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY) {
   GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
  texImage->Width,
  1,
  1);
-  assert(slice < texImage->Height);
   map += slice * sliceSize;
}
 
-- 
1.7.10.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 03/17] swrast: Factor out texture slice counting.

2013-04-22 Thread Patrick Baggett
On Mon, Apr 22, 2013 at 11:14 AM, Eric Anholt  wrote:

> This function going to get used a lot more in upcoming patches.
> ---
>  src/mesa/swrast/s_texture.c |   16 
>  1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c
> index 51048be..36a90dd 100644
> --- a/src/mesa/swrast/s_texture.c
> +++ b/src/mesa/swrast/s_texture.c
> @@ -58,6 +58,14 @@ _swrast_delete_texture_image(struct gl_context *ctx,
> _mesa_delete_texture_image(ctx, texImage);
>  }
>
> +static unsigned int
> +texture_slices(struct gl_texture_image *texImage)
> +{
> +   if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY)
> +  return texImage->Height;
> +   else
> +  return texImage->Depth;
> +}
>
>
I think you can const-qualify 'texImage'.


>  /**
>   * Called via ctx->Driver.AllocTextureImageBuffer()
> @@ -83,11 +91,11 @@ _swrast_alloc_texture_image_buffer(struct gl_context
> *ctx,
>  * We allocate the array for 1D/2D textures too in order to avoid
> special-
>  * case code in the texstore routines.
>  */
> -   swImg->ImageOffsets = malloc(texImage->Depth * sizeof(GLuint));
> +   swImg->ImageOffsets = malloc(texture_slices(texImage) *
> sizeof(GLuint));
> if (!swImg->ImageOffsets)
>return GL_FALSE;
>
> -   for (i = 0; i < texImage->Depth; i++) {
> +   for (i = 0; i < texture_slices(texImage); i++) {
>swImg->ImageOffsets[i] = i * texImage->Width * texImage->Height;
> }
>
> @@ -209,20 +217,20 @@ _swrast_map_teximage(struct gl_context *ctx,
>
> map = swImage->Buffer;
>
> +   assert(slice < texture_slices(texImage));
> +
> if (texImage->TexObject->Target == GL_TEXTURE_3D ||
> texImage->TexObject->Target == GL_TEXTURE_2D_ARRAY) {
>GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
>   texImage->Width,
>   texImage->Height,
>   1);
> -  assert(slice < texImage->Depth);
>map += slice * sliceSize;
> } else if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY) {
>GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
>   texImage->Width,
>   1,
>   1);
> -  assert(slice < texImage->Height);
>map += slice * sliceSize;
> }
>
> --
> 1.7.10.4
>
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 03/17] swrast: Factor out texture slice counting.

2013-04-22 Thread Eric Anholt
Patrick Baggett  writes:

> On Mon, Apr 22, 2013 at 11:14 AM, Eric Anholt  wrote:
>
>> This function going to get used a lot more in upcoming patches.
>> ---
>>  src/mesa/swrast/s_texture.c |   16 
>>  1 file changed, 12 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c
>> index 51048be..36a90dd 100644
>> --- a/src/mesa/swrast/s_texture.c
>> +++ b/src/mesa/swrast/s_texture.c
>> @@ -58,6 +58,14 @@ _swrast_delete_texture_image(struct gl_context *ctx,
>> _mesa_delete_texture_image(ctx, texImage);
>>  }
>>
>> +static unsigned int
>> +texture_slices(struct gl_texture_image *texImage)
>> +{
>> +   if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY)
>> +  return texImage->Height;
>> +   else
>> +  return texImage->Depth;
>> +}
>>
>>
> I think you can const-qualify 'texImage'.

Given that const-qualification does nothing for generated code and just
consumes developer time, I don't do it unless someone blocks review on
it.


pgp1_ZCle7FO8.pgp
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 03/17] swrast: Factor out texture slice counting.

2013-04-30 Thread Brian Paul

On 04/22/2013 10:14 AM, Eric Anholt wrote:

This function going to get used a lot more in upcoming patches.
---
  src/mesa/swrast/s_texture.c |   16 
  1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c
index 51048be..36a90dd 100644
--- a/src/mesa/swrast/s_texture.c
+++ b/src/mesa/swrast/s_texture.c
@@ -58,6 +58,14 @@ _swrast_delete_texture_image(struct gl_context *ctx,
 _mesa_delete_texture_image(ctx, texImage);
  }

+static unsigned int
+texture_slices(struct gl_texture_image *texImage)
+{
+   if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY)
+  return texImage->Height;
+   else
+  return texImage->Depth;
+}

  /**
   * Called via ctx->Driver.AllocTextureImageBuffer()
@@ -83,11 +91,11 @@ _swrast_alloc_texture_image_buffer(struct gl_context *ctx,
  * We allocate the array for 1D/2D textures too in order to avoid special-
  * case code in the texstore routines.
  */
-   swImg->ImageOffsets = malloc(texImage->Depth * sizeof(GLuint));
+   swImg->ImageOffsets = malloc(texture_slices(texImage) * sizeof(GLuint));
 if (!swImg->ImageOffsets)
return GL_FALSE;

-   for (i = 0; i<  texImage->Depth; i++) {
+   for (i = 0; i<  texture_slices(texImage); i++) {
swImg->ImageOffsets[i] = i * texImage->Width * texImage->Height;
 }



Maybe save the result of texture_slices(texImage) in a local var so it 
doesn't get called for each loop iteration.  Not a big deal though.




@@ -209,20 +217,20 @@ _swrast_map_teximage(struct gl_context *ctx,

 map = swImage->Buffer;

+   assert(slice<  texture_slices(texImage));
+
 if (texImage->TexObject->Target == GL_TEXTURE_3D ||
 texImage->TexObject->Target == GL_TEXTURE_2D_ARRAY) {
GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
   texImage->Width,
   texImage->Height,
   1);
-  assert(slice<  texImage->Depth);
map += slice * sliceSize;
 } else if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY) {
GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
   texImage->Width,
   1,
   1);
-  assert(slice<  texImage->Height);
map += slice * sliceSize;
 }



___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev