commit ed1778f

Michael Forney  ·  2014-01-14 09:44:34 +0000 UTC
parent d8a80f7
intel: Pass bo to new_buffer
1 files changed,  +25, -17
+25, -17
 1@@ -111,8 +111,9 @@ struct wld_renderer * context_create_renderer(struct wld_context * base)
 2     return NULL;
 3 }
 4 
 5-static struct intel_buffer * new_buffer(uint32_t width, uint32_t height,
 6-                                        uint32_t format)
 7+static struct wld_buffer * new_buffer(uint32_t width, uint32_t height,
 8+                                      uint32_t format, uint32_t pitch,
 9+                                      drm_intel_bo * bo)
10 {
11     struct intel_buffer * buffer;
12 
13@@ -120,11 +121,12 @@ static struct intel_buffer * new_buffer(uint32_t width, uint32_t height,
14         return NULL;
15 
16     buffer_initialize(&buffer->base, &buffer_impl,
17-                      width, height, format, 0);
18+                      width, height, format, pitch);
19+    buffer->bo = bo;
20     exporter_initialize(&buffer->exporter, &exporter_impl);
21     buffer_add_exporter(&buffer->base, &buffer->exporter);
22 
23-    return buffer;
24+    return &buffer->base;
25 }
26 
27 struct wld_buffer * context_create_buffer(struct wld_context * base,
28@@ -132,17 +134,26 @@ struct wld_buffer * context_create_buffer(struct wld_context * base,
29                                           uint32_t format)
30 {
31     struct intel_context * context = intel_context(base);
32-    struct intel_buffer * buffer;
33+    struct wld_buffer * buffer;
34+    drm_intel_bo * bo;
35     uint32_t tiling_mode = width >= 128 ? I915_TILING_X : I915_TILING_NONE;
36+    unsigned long pitch;
37 
38-    if (!(buffer = new_buffer(width, height, format)))
39-        return NULL;
40+    bo = drm_intel_bo_alloc_tiled(context->bufmgr, "buffer", width, height, 4,
41+                                  &tiling_mode, &pitch, 0);
42 
43-    buffer->bo = drm_intel_bo_alloc_tiled(context->bufmgr, "buffer",
44-                                          width, height, 4, &tiling_mode,
45-                                          &buffer->base.pitch, 0);
46+    if (!bo)
47+        goto error0;
48 
49-    return &buffer->base;
50+    if (!(buffer = new_buffer(width, height, format, pitch, bo)))
51+        goto error1;
52+
53+    return buffer;
54+
55+  error1:
56+    drm_intel_bo_unreference(bo);
57+  error0:
58+    return NULL;
59 }
60 
61 struct wld_buffer * context_import_buffer(struct wld_context * base,
62@@ -152,7 +163,7 @@ struct wld_buffer * context_import_buffer(struct wld_context * base,
63                                           uint32_t format, uint32_t pitch)
64 {
65     struct intel_context * context = intel_context(base);
66-    struct intel_buffer * buffer;
67+    struct wld_buffer * buffer;
68     drm_intel_bo * bo;
69 
70     switch (type)
71@@ -174,13 +185,10 @@ struct wld_buffer * context_import_buffer(struct wld_context * base,
72     if (!bo)
73         goto error0;
74 
75-    if (!(buffer = new_buffer(width, height, format)))
76+    if (!(buffer = new_buffer(width, height, format, pitch, bo)))
77         goto error1;
78 
79-    buffer->bo = bo;
80-    buffer->base.pitch = pitch;
81-
82-    return &buffer->base;
83+    return buffer;
84 
85   error1:
86     drm_intel_bo_unreference(bo);