Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
 
2
#include "i915_drm_winsys.h"
3
#include "util/u_memory.h"
4
5
 
6
7
 
8
{
9
   char *name;
10
11
 
12
      name = "gallium3d_texture";
13
   } else if (type == I915_NEW_VERTEX) {
14
      name = "gallium3d_vertex";
15
   } else if (type == I915_NEW_SCANOUT) {
16
      name = "gallium3d_scanout";
17
   } else {
18
      assert(0);
19
      name = "gallium3d_unknown";
20
   }
21
22
 
23
}
24
25
 
26
i915_drm_buffer_create(struct i915_winsys *iws,
27
                        unsigned size,
28
                        enum i915_winsys_buffer_type type)
29
{
30
   struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer);
31
   struct i915_drm_winsys *idws = i915_drm_winsys(iws);
32
33
 
34
      return NULL;
35
36
 
37
   buf->flinked = FALSE;
38
   buf->flink = 0;
39
40
 
41
                                i915_drm_type_to_name(type), size, 0);
42
43
 
44
      goto err;
45
46
 
47
48
 
49
   assert(0);
50
   FREE(buf);
51
   return NULL;
52
}
53
54
 
55
i915_drm_buffer_create_tiled(struct i915_winsys *iws,
56
                             unsigned *stride, unsigned height,
57
                             enum i915_winsys_buffer_tile *tiling,
58
                             enum i915_winsys_buffer_type type)
59
{
60
   struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer);
61
   struct i915_drm_winsys *idws = i915_drm_winsys(iws);
62
   unsigned long pitch = 0;
63
   uint32_t tiling_mode = *tiling;
64
65
 
66
      return NULL;
67
68
 
69
   buf->flinked = FALSE;
70
   buf->flink = 0;
71
72
 
73
                                      i915_drm_type_to_name(type),
74
		   		      *stride, height, 1,
75
                                      &tiling_mode, &pitch, 0);
76
77
 
78
      goto err;
79
80
 
81
   *tiling = tiling_mode;
82
   return (struct i915_winsys_buffer *)buf;
83
84
 
85
   assert(0);
86
   FREE(buf);
87
   return NULL;
88
}
89
90
 
91
i915_drm_buffer_from_handle(struct i915_winsys *iws,
92
                            struct winsys_handle *whandle,
93
                            enum i915_winsys_buffer_tile *tiling,
94
                            unsigned *stride)
95
{
96
   struct i915_drm_winsys *idws = i915_drm_winsys(iws);
97
   struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer);
98
   uint32_t tile = 0, swizzle = 0;
99
100
 
101
      return NULL;
102
103
 
104
   buf->bo = drm_intel_bo_gem_create_from_name(idws->gem_manager, "gallium3d_from_handle", whandle->handle);
105
   buf->flinked = TRUE;
106
   buf->flink = whandle->handle;
107
108
 
109
      goto err;
110
111
 
112
113
 
114
   *tiling = tile;
115
116
 
117
118
 
119
   FREE(buf);
120
   return NULL;
121
}
122
123
 
124
i915_drm_buffer_get_handle(struct i915_winsys *iws,
125
                            struct i915_winsys_buffer *buffer,
126
                            struct winsys_handle *whandle,
127
                            unsigned stride)
128
{
129
   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
130
131
 
132
      if (!buf->flinked) {
133
         if (drm_intel_bo_flink(buf->bo, &buf->flink))
134
            return FALSE;
135
         buf->flinked = TRUE;
136
      }
137
138
 
139
   } else if (whandle->type == DRM_API_HANDLE_TYPE_KMS) {
140
      whandle->handle = buf->bo->handle;
141
   } else {
142
      assert(!"unknown usage");
143
      return FALSE;
144
   }
145
146
 
147
   return TRUE;
148
}
149
150
 
151
i915_drm_buffer_map(struct i915_winsys *iws,
152
                     struct i915_winsys_buffer *buffer,
153
                     boolean write)
154
{
155
   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
156
   drm_intel_bo *bo = intel_bo(buffer);
157
   int ret = 0;
158
159
 
160
161
 
162
      goto out;
163
164
 
165
166
 
167
168
 
169
out:
170
   if (ret)
171
      return NULL;
172
173
 
174
   return buf->ptr;
175
}
176
177
 
178
i915_drm_buffer_unmap(struct i915_winsys *iws,
179
                       struct i915_winsys_buffer *buffer)
180
{
181
   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
182
183
 
184
      return;
185
186
 
187
}
188
189
 
190
i915_drm_buffer_write(struct i915_winsys *iws,
191
                       struct i915_winsys_buffer *buffer,
192
                       size_t offset,
193
                       size_t size,
194
                       const void *data)
195
{
196
   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
197
198
 
199
}
200
201
 
202
i915_drm_buffer_destroy(struct i915_winsys *iws,
203
                         struct i915_winsys_buffer *buffer)
204
{
205
   drm_intel_bo_unreference(intel_bo(buffer));
206
207
 
208
   i915_drm_buffer(buffer)->magic = 0;
209
   i915_drm_buffer(buffer)->bo = NULL;
210
#endif
211
212
 
213
}
214
215
 
216
i915_drm_buffer_is_busy(struct i915_winsys *iws,
217
                        struct i915_winsys_buffer *buffer)
218
{
219
   struct i915_drm_buffer* i915_buffer = i915_drm_buffer(buffer);
220
   if (!i915_buffer)
221
      return FALSE;
222
   return drm_intel_bo_busy(i915_buffer->bo);
223
}
224
225
 
226
 
227
i915_drm_winsys_init_buffer_functions(struct i915_drm_winsys *idws)
228
{
229
   idws->base.buffer_create = i915_drm_buffer_create;
230
   idws->base.buffer_create_tiled = i915_drm_buffer_create_tiled;
231
   idws->base.buffer_from_handle = i915_drm_buffer_from_handle;
232
   idws->base.buffer_get_handle = i915_drm_buffer_get_handle;
233
   idws->base.buffer_map = i915_drm_buffer_map;
234
   idws->base.buffer_unmap = i915_drm_buffer_unmap;
235
   idws->base.buffer_write = i915_drm_buffer_write;
236
   idws->base.buffer_destroy = i915_drm_buffer_destroy;
237
   idws->base.buffer_is_busy = i915_drm_buffer_is_busy;
238
}
239