diff options
author | Brian Paul <[email protected]> | 2012-01-18 17:39:33 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2012-01-24 14:12:37 -0700 |
commit | 1caf698191fb871850311353862eb7fc927f9f9c (patch) | |
tree | 7493a01f72809316ef78d79740b1ab8b3ebe72e8 /src | |
parent | 56d83ac4bf0267982554f25c6fdb3c1dd6e14a9c (diff) |
swrast: use Map/UnmapTextureImage() in framebuffer map/unmap code
When we're actually rendering into a texture, map the texture image
instead of the corresponding renderbuffer. Before, we just copied
a pointer from the texture image to the renderbuffer. This change
will make the code usable by hardware drivers.
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/swrast/s_renderbuffer.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/mesa/swrast/s_renderbuffer.c b/src/mesa/swrast/s_renderbuffer.c index 501b4698c8e..637a7b6dc1e 100644 --- a/src/mesa/swrast/s_renderbuffer.c +++ b/src/mesa/swrast/s_renderbuffer.c @@ -565,20 +565,16 @@ map_attachment(struct gl_context *ctx, struct swrast_renderbuffer *srb = swrast_renderbuffer(rb); if (texObj) { + /* map texture image (render to texture) */ const GLuint level = fb->Attachment[buffer].TextureLevel; const GLuint face = fb->Attachment[buffer].CubeMapFace; + const GLuint slice = fb->Attachment[buffer].Zoffset; struct gl_texture_image *texImage = texObj->Image[face][level]; if (texImage) { - struct swrast_texture_image *swImage - = swrast_texture_image(texImage); - - /* XXX we'll eventually call _swrast_map_teximage() here */ - swImage->Map = swImage->Buffer; - if (srb) { - srb->Map = swImage->Buffer; - srb->RowStride = swImage->RowStride * - _mesa_get_format_bytes(swImage->Base.TexFormat); - } + ctx->Driver.MapTextureImage(ctx, texImage, slice, + 0, 0, texImage->Width, texImage->Height, + GL_MAP_READ_BIT | GL_MAP_WRITE_BIT, + &srb->Map, &srb->RowStride); } } else if (rb) { @@ -587,8 +583,9 @@ map_attachment(struct gl_context *ctx, 0, 0, rb->Width, rb->Height, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT, &srb->Map, &srb->RowStride); - assert(srb->Map); } + + assert(srb->Map); } @@ -602,14 +599,15 @@ unmap_attachment(struct gl_context *ctx, struct swrast_renderbuffer *srb = swrast_renderbuffer(rb); if (texObj) { + /* unmap texture image (render to texture) */ const GLuint level = fb->Attachment[buffer].TextureLevel; const GLuint face = fb->Attachment[buffer].CubeMapFace; + const GLuint slice = fb->Attachment[buffer].Zoffset; struct gl_texture_image *texImage = texObj->Image[face][level]; if (texImage) { - - /* XXX we'll eventually call _swrast_unmap_teximage() here */ - } - } + ctx->Driver.UnmapTextureImage(ctx, texImage, slice); + } + } else if (rb) { /* unmap ordinary renderbuffer */ ctx->Driver.UnmapRenderbuffer(ctx, rb); |