3 #include "state_tracker/drm_api.h"
5 #include "i965_drm_winsys.h"
6 #include "util/u_memory.h"
8 #include "i965/brw_context.h" /* XXX: shouldn't be doing this */
9 #include "i965/brw_screen.h" /* XXX: shouldn't be doing this */
11 #include "trace/tr_drm.h"
13 #include "../../sw/sw_drm_api.h"
21 i965_libdrm_get_device_id(unsigned int *device_id
)
28 * FIXME: Fix this up to use a drm ioctl or whatever.
31 snprintf(path
, sizeof(path
), "/sys/class/drm/card0/device/device");
32 file
= fopen(path
, "r");
37 shutup_gcc
= fgets(path
, sizeof(path
), file
);
38 sscanf(path
, "%x", device_id
);
43 i965_libdrm_winsys_destroy(struct brw_winsys_screen
*iws
)
45 struct i965_libdrm_winsys
*idws
= i965_libdrm_winsys(iws
);
48 debug_printf("%s\n", __FUNCTION__
);
50 drm_intel_bufmgr_destroy(idws
->gem
);
55 static struct pipe_screen
*
56 i965_libdrm_create_screen(struct drm_api
*api
, int drmFD
,
57 struct drm_create_screen_arg
*arg
)
59 struct i965_libdrm_winsys
*idws
;
60 unsigned int deviceID
;
62 debug_printf("%s\n", __FUNCTION__
);
66 case DRM_CREATE_NORMAL
:
73 idws
= CALLOC_STRUCT(i965_libdrm_winsys
);
77 i965_libdrm_get_device_id(&deviceID
);
79 i965_libdrm_winsys_init_buffer_functions(idws
);
84 idws
->base
.destroy
= i965_libdrm_winsys_destroy
;
86 idws
->gem
= drm_intel_bufmgr_gem_init(idws
->fd
, BRW_BATCH_SIZE
);
87 drm_intel_bufmgr_gem_enable_reuse(idws
->gem
);
89 idws
->send_cmd
= !debug_get_bool_option("BRW_NO_HW", FALSE
);
91 return brw_create_screen(&idws
->base
, deviceID
);
96 destroy(struct drm_api
*api
)
99 debug_printf("%s\n", __FUNCTION__
);
103 struct drm_api i965_libdrm_api
=
106 .create_screen
= i965_libdrm_create_screen
,
113 struct drm_api
*api
= NULL
;
115 if (api
== NULL
&& debug_get_bool_option("BRW_SOFTPIPE", FALSE
))
116 api
= sw_drm_api_create(&i965_libdrm_api
);
119 api
= &i965_libdrm_api
;
121 return trace_drm_create(api
);