Mesa (gallium-map-range): r300-gallium, radeon-gallium: Continue migration to DRI2 state_tracker, part 2.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Wed Mar 4 15:45:00 UTC 2009


Module: Mesa
Branch: gallium-map-range
Commit: 60041203d5847de8ab71842a6ce5d33d96cc4930
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=60041203d5847de8ab71842a6ce5d33d96cc4930

Author: Corbin Simpson <MostAwesomeDude at gmail.com>
Date:   Tue Mar  3 22:11:56 2009 -0800

r300-gallium, radeon-gallium: Continue migration to DRI2 state_tracker, part 2.

Almost there. glxinfo still works, and AFAICT so does trivial/clear.

---

 src/gallium/drivers/r300/r300_texture.c    |   18 ++++++++++++++++++
 src/gallium/drivers/r300/r300_texture.h    |    8 ++++++++
 src/gallium/drivers/r300/r300_winsys.h     |    4 ++++
 src/gallium/winsys/drm/radeon/radeon_drm.c |   18 +++++++++++++++---
 4 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c
index 8251a59..b342558 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -186,3 +186,21 @@ void r300_init_screen_texture_functions(struct pipe_screen* screen)
     screen->tex_surface_release = r300_tex_surface_release;
     screen->texture_blanket = r300_texture_blanket;
 }
+
+boolean r300_get_texture_buffer(struct pipe_texture* texture,
+                                struct pipe_buffer** buffer,
+                                unsigned* stride)
+{
+    struct r300_texture* tex = (struct r300_texture*)texture;
+    if (!tex) {
+        return FALSE;
+    }
+
+    pipe_buffer_reference(texture->screen, buffer, tex->buffer);
+
+    if (stride) {
+        *stride = tex->stride;
+    }
+
+    return TRUE;
+}
diff --git a/src/gallium/drivers/r300/r300_texture.h b/src/gallium/drivers/r300/r300_texture.h
index 7964229..27f5ea1 100644
--- a/src/gallium/drivers/r300/r300_texture.h
+++ b/src/gallium/drivers/r300/r300_texture.h
@@ -31,4 +31,12 @@
 
 void r300_init_screen_texture_functions(struct pipe_screen* screen);
 
+#ifndef R300_WINSYS_H
+
+boolean r300_get_texture_buffer(struct pipe_texture* texture,
+                                struct pipe_buffer** buffer,
+                                unsigned* stride);
+
+#endif /* R300_WINSYS_H */
+
 #endif /* R300_TEXTURE_H */
diff --git a/src/gallium/drivers/r300/r300_winsys.h b/src/gallium/drivers/r300/r300_winsys.h
index b7341c4..8c9578d 100644
--- a/src/gallium/drivers/r300/r300_winsys.h
+++ b/src/gallium/drivers/r300/r300_winsys.h
@@ -92,4 +92,8 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
 }
 #endif
 
+boolean r300_get_texture_buffer(struct pipe_texture* texture,
+                                struct pipe_buffer** buffer,
+                                unsigned* stride);
+
 #endif /* R300_WINSYS_H */
diff --git a/src/gallium/winsys/drm/radeon/radeon_drm.c b/src/gallium/winsys/drm/radeon/radeon_drm.c
index 9cd178f..21f2a62 100644
--- a/src/gallium/winsys/drm/radeon/radeon_drm.c
+++ b/src/gallium/winsys/drm/radeon/radeon_drm.c
@@ -59,6 +59,7 @@ boolean radeon_buffer_from_texture(struct pipe_texture* texture,
                                    struct pipe_buffer** buffer,
                                    unsigned* stride)
 {
+    return FALSE;
 }
 
 /* Create a buffer from a handle. */
@@ -67,7 +68,8 @@ struct pipe_buffer* radeon_buffer_from_handle(struct pipe_screen* screen,
                                               const char* name,
                                               unsigned handle)
 {
-    struct radeon_bo_manager* bom = ((struct radeon_winsys*)screen->winsys)->bom;
+    struct radeon_bo_manager* bom =
+        ((struct radeon_winsys*)screen->winsys)->bom;
     struct radeon_pipe_buffer* radeon_buffer;
     struct radeon_bo* bo = NULL;
 
@@ -92,19 +94,29 @@ boolean radeon_handle_from_buffer(struct pipe_screen* screen,
                                   struct pipe_buffer* buffer,
                                   unsigned* handle)
 {
+    struct radeon_pipe_buffer* radeon_buffer =
+        (struct radeon_pipe_buffer*)buffer;
+    *handle = radeon_buffer->bo->handle;
+    return TRUE;
 }
 
 boolean radeon_global_handle_from_buffer(struct pipe_screen* screen,
                                          struct pipe_buffer* buffer,
                                          unsigned* handle)
 {
+    /* XXX WTF is the difference here? global? */
+    struct radeon_pipe_buffer* radeon_buffer =
+        (struct radeon_pipe_buffer*)buffer;
+    *handle = radeon_buffer->bo->handle;
+    return TRUE;
 }
 
 struct drm_api drm_api_hooks = {
     .create_screen = radeon_create_screen,
     .create_context = radeon_create_context,
-    .buffer_from_texture = radeon_buffer_from_texture,
+    /* XXX fix this */
+    .buffer_from_texture = r300_get_texture_buffer,
     .buffer_from_handle = radeon_buffer_from_handle,
     .handle_from_buffer = radeon_handle_from_buffer,
     .global_handle_from_buffer = radeon_global_handle_from_buffer,
-};
\ No newline at end of file
+};




More information about the mesa-commit mailing list