3 #include "state_tracker/drm_api.h"
5 #include "intel_drm_winsys.h"
6 #include "util/u_memory.h"
8 #include "i915/i915_context.h"
9 #include "i915/i915_screen.h"
11 #include "trace/tr_drm.h"
19 intel_drm_get_device_id(unsigned int *device_id
)
26 * FIXME: Fix this up to use a drm ioctl or whatever.
29 snprintf(path
, sizeof(path
), "/sys/class/drm/card0/device/device");
30 file
= fopen(path
, "r");
35 shutup_gcc
= fgets(path
, sizeof(path
), file
);
37 sscanf(path
, "%x", device_id
);
42 intel_drm_winsys_destroy(struct intel_winsys
*iws
)
44 struct intel_drm_winsys
*idws
= intel_drm_winsys(iws
);
46 drm_intel_bufmgr_destroy(idws
->pools
.gem
);
51 static struct pipe_screen
*
52 intel_drm_create_screen(struct drm_api
*api
, int drmFD
,
53 struct drm_create_screen_arg
*arg
)
55 struct intel_drm_winsys
*idws
;
56 unsigned int deviceID
;
60 case DRM_CREATE_NORMAL
:
67 idws
= CALLOC_STRUCT(intel_drm_winsys
);
71 intel_drm_get_device_id(&deviceID
);
73 intel_drm_winsys_init_batchbuffer_functions(idws
);
74 intel_drm_winsys_init_buffer_functions(idws
);
75 intel_drm_winsys_init_fence_functions(idws
);
79 idws
->max_batch_size
= 16 * 4096;
81 idws
->base
.destroy
= intel_drm_winsys_destroy
;
83 idws
->pools
.gem
= drm_intel_bufmgr_gem_init(idws
->fd
, idws
->max_batch_size
);
84 drm_intel_bufmgr_gem_enable_reuse(idws
->pools
.gem
);
86 idws
->dump_cmd
= debug_get_bool_option("INTEL_DUMP_CMD", FALSE
);
88 return i915_create_screen(&idws
->base
, deviceID
);
92 destroy(struct drm_api
*api
)
97 struct drm_api intel_drm_api
=
100 .driver_name
= "i915",
101 .create_screen
= intel_drm_create_screen
,
108 return trace_drm_create(&intel_drm_api
);