summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2006-02-01 15:50:14 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2006-02-01 15:50:14 +0000
commitfbbda155e0bb93d68bdf5ea1708c4f2553b69308 (patch)
tree4b50ac5bb419d7cc6344ed0b7a5c8df66b114bd4
parenta49c3c0faefe8761be21e9ee9ee0ffbbdbceb21e (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.c70
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;
+ }
+ }
+ }
+}