diff options
author | Keith Whitwell <keith@tungstengraphics.com> | 2006-02-01 15:50:14 +0000 |
---|---|---|
committer | Keith Whitwell <keith@tungstengraphics.com> | 2006-02-01 15:50:14 +0000 |
commit | fbbda155e0bb93d68bdf5ea1708c4f2553b69308 (patch) | |
tree | 4b50ac5bb419d7cc6344ed0b7a5c8df66b114bd4 | |
parent | a49c3c0faefe8761be21e9ee9ee0ffbbdbceb21e (diff) |
Add code to map/unmap all texture images for the software rasterizer.
Add the color and depth buffers to the validation list to ensure they
are fenced correctly by hardware rasterization.
-rw-r--r-- | src/mesa/drivers/dri/i915/intel_tex_validate.c | 70 |
1 files changed, 62 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/i915/intel_tex_validate.c b/src/mesa/drivers/dri/i915/intel_tex_validate.c index c5fd2f376c8..d2f367939a8 100644 --- a/src/mesa/drivers/dri/i915/intel_tex_validate.c +++ b/src/mesa/drivers/dri/i915/intel_tex_validate.c @@ -253,13 +253,21 @@ GLboolean intel_validate_buffers( struct intel_context *intel ) DBG("%s\n", __FUNCTION__); assert(intel->locked); - assert (!intel->buffer_list); - intel->buffer_list = bmNewBufferList(); - - /* Add the color and depth buffers: + /* Add the color and depth buffers so that fences associated with + * these buffers: */ - + bmAddBuffer(intel->buffer_list, + intel->draw_region->buffer, + BM_WRITE, + NULL, + NULL); + + bmAddBuffer(intel->buffer_list, + intel->depth_region->buffer, + BM_WRITE, + NULL, + NULL); /* Add each enabled texture: */ @@ -288,8 +296,54 @@ void intel_fence_buffers( struct intel_context *intel ) { assert(intel->locked); assert(intel->buffer_list); - bmFenceBufferList(intel->bm, intel->buffer_list); - bmFreeBufferList(intel->buffer_list); - intel->buffer_list = NULL; } + + + + +void intel_tex_map_images( struct intel_context *intel, + struct intel_texture_object *intelObj ) +{ + GLuint nr_faces = (intelObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1; + GLuint face, i; + + _mesa_printf("%s\n", __FUNCTION__); + + for (face = 0; face < nr_faces; face++) { + for (i = intelObj->firstLevel; i < intelObj->lastLevel; i++) { + struct intel_texture_image *intelImage = + intel_texture_image(intelObj->base.Image[face][i]); + + if (intelImage->mt) { + intelImage->base.Data = + intel_miptree_image_map(intel, + intelImage->mt, + intelImage->face, + intelImage->level, + &intelImage->base.RowStride); + } + } + } +} + + + +void intel_tex_unmap_images( struct intel_context *intel, + struct intel_texture_object *intelObj ) +{ + GLuint nr_faces = (intelObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1; + GLuint face, i; + + for (face = 0; face < nr_faces; face++) { + for (i = intelObj->firstLevel; i < intelObj->lastLevel; i++) { + struct intel_texture_image *intelImage = + intel_texture_image(intelObj->base.Image[face][i]); + + if (intelImage->mt) { + intel_miptree_image_unmap(intel, intelImage->mt); + intelImage->base.Data = NULL; + } + } + } +} |