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
M
intel.c
M
intel.c
+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);