~apachelogger/+junk/plymouth-stop-kdm

« back to all changes in this revision

Viewing changes to src/plugins/renderers/drm/ply-renderer-radeon-driver.c

  • Committer: Scott James Remnant
  • Date: 2010-03-25 16:44:25 UTC
  • mfrom: (1016.2.1 upstream)
  • Revision ID: scott@netsplit.com-20100325164425-daotztzazohftmt4
Merge upstream 0.8.1 release

Show diffs side-by-side

added added

removed removed

Lines of Context:
60
60
  unsigned long width;
61
61
  unsigned long height;
62
62
  unsigned long row_stride;
 
63
 
 
64
  uint32_t added_fb : 1;
63
65
};
64
66
 
65
67
struct _ply_renderer_driver
81
83
  driver->manager = radeon_bo_manager_gem_ctor (driver->device_fd);
82
84
  if (driver->manager == NULL)
83
85
    {
 
86
      ply_trace ("radeon buffer manager could not be initialized");
84
87
      free (driver);
85
88
      return NULL;
86
89
    }
96
99
{
97
100
  ply_hashtable_free (driver->buffers);
98
101
 
 
102
  ply_trace ("uninitializing radeon buffer manager");
99
103
  radeon_bo_manager_gem_dtor (driver->manager);
100
104
  free (driver);
101
105
}
117
121
  buffer->height = height;
118
122
  buffer->row_stride = row_stride;
119
123
 
 
124
  ply_trace ("returning %lux%lu buffer with stride %lu",
 
125
             width, height, row_stride);
 
126
 
120
127
  return buffer;
121
128
}
122
129
 
150
157
  flink_request.handle = handle;
151
158
 
152
159
  if (ioctl (driver->device_fd, DRM_IOCTL_GEM_FLINK, &flink_request) < 0)
153
 
    return NULL;
 
160
    {
 
161
      ply_trace ("Could not export global name for handle %u", handle);
 
162
      return NULL;
 
163
    }
154
164
 
155
165
  buffer_object = radeon_bo_open (driver->manager, flink_request.name,
156
166
                                  0, 0, RADEON_GEM_DOMAIN_GTT, 0);
169
179
  fb = drmModeGetFB (driver->device_fd, buffer_id);
170
180
 
171
181
  if (fb == NULL)
172
 
    return NULL;
 
182
    {
 
183
      ply_trace ("could not get FB with buffer id %u", buffer_id);
 
184
      return NULL;
 
185
    }
173
186
 
174
187
  buffer_object = create_radeon_bo_from_handle (driver, fb->handle);
175
188
 
176
189
  if (buffer_object == NULL)
177
190
    {
 
191
      ply_trace ("could not create buffer object from handle %lu",
 
192
                 (unsigned long) fb->handle);
178
193
      drmModeFreeFB (fb);
179
194
      return NULL;
180
195
    }
200
215
 
201
216
  if (buffer == NULL)
202
217
    {
 
218
      ply_trace ("could not fetch buffer %u, creating one", buffer_id);
203
219
      buffer = ply_renderer_buffer_new_from_id (driver, buffer_id);
204
220
 
205
221
      if (buffer == NULL)
206
 
        return false;
 
222
        {
 
223
          ply_trace ("could not create buffer either %u", buffer_id);
 
224
          return false;
 
225
        }
207
226
 
208
227
      ply_hashtable_insert (driver->buffers,
209
228
                            (void *) (uintptr_t) buffer_id,
219
238
  if (row_stride != NULL)
220
239
    *row_stride = buffer->row_stride;
221
240
 
 
241
  ply_trace ("fetched %lux%lu buffer with stride %lu",
 
242
             buffer->width, buffer->height, buffer->row_stride);
222
243
  return true;
223
244
}
224
245
 
256
277
  buffer = ply_renderer_buffer_new (driver,
257
278
                                    buffer_object, buffer_id,
258
279
                                    width, height, *row_stride);
 
280
  buffer->added_fb = true;
259
281
  ply_hashtable_insert (driver->buffers,
260
282
                        (void *) (uintptr_t) buffer_id,
261
283
                        buffer);
323
345
 
324
346
  assert (buffer != NULL);
325
347
 
326
 
  drmModeRmFB (driver->device_fd, buffer->id);
 
348
  if (buffer->added_fb)
 
349
    drmModeRmFB (driver->device_fd, buffer->id);
327
350
 
328
351
  radeon_bo_unref (buffer->object);
329
352