On 12/16/2014 03:22 PM, Laura Ekstrand wrote:


On Sat, Dec 13, 2014 at 6:42 AM, Brian Paul <bri...@vmware.com
<mailto:bri...@vmware.com>> wrote:

    Needed for GL_ARB_get_texture_sub_image.  But at this point, the
    offsets are always zero and the sizes match the whole texture image.
    ---
      src/mesa/main/texgetimage.c | 105
    ++++++++++++++++++++++++--------------------
      1 file changed, 58 insertions(+), 47 deletions(-)

    diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
    index 03ad5f4..71c25bb 100644
    --- a/src/mesa/main/texgetimage.c
    +++ b/src/mesa/main/texgetimage.c
    @@ -74,12 +74,11 @@ type_needs_clamping(GLenum type)
       */
      static void
      get_tex_depth(struct gl_context *ctx, GLuint dimensions,
    +              GLint xoffset, GLint yoffset, GLint zoffset,
    +              GLsizei width, GLsizei height, GLint depth,
                    GLenum format, GLenum type, GLvoid *pixels,
                    struct gl_texture_image *texImage)
      {
    -   const GLint width = texImage->Width;
    -   GLint height = texImage->Height;
    -   GLint depth = texImage->Depth;
         GLint img, row;
         GLfloat *depthRow = malloc(width * sizeof(GLfloat));

    @@ -98,9 +97,9 @@ get_tex_depth(struct gl_context *ctx, GLuint
    dimensions,
            GLint srcRowStride;

You are not checking here to make sure that zoffset + img < depth.  I
looked in the next patch (implement _mesa_GetTextureSubImage) and found
that the dimensions_error_check does this.  It might be good to make a
note of that here.

I've added a comment and assertion there and before similar loops.



            /* map src texture buffer */
    -      ctx->Driver.MapTextureImage(ctx, texImage, img,
    -                                  0, 0, width, height, GL_MAP_READ_BIT,
    -                                &srcMap, &srcRowStride);
    +      ctx->Driver.MapTextureImage(ctx, texImage, zoffset + img,
    +                                  xoffset, yoffset, width, height,
    +                                  GL_MAP_READ_BIT, &srcMap,
    &srcRowStride);

            if (srcMap) {
               for (row = 0; row < height; row++) {

Why didn't you update ctx->Driver.UnmapTextureImage(ctx, texImage, img)
to take zoffset + img here?  You did that for
get_tex_rgba_uncompressed.  Is there some reason that it has to be
UnmapTextureImage(.. img only) for all of the other functions?

Those were oversights.  Fixed now.  I'll post a v2 patch.

Thanks.

-Brian


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

Reply via email to