summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/drm/intel/egl/intel_device.c
blob: 6b281402d53dc728c468056b3a50c1cb7ecf5700 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

#include <stdio.h>
#include "pipe/p_defines.h"
#include "intel_be_device.h"
#include "i915simple/i915_screen.h"

#include "intel_api.h"

struct intel_device
{
	struct intel_be_device base;

	int deviceID;
};

static void
intel_destroy_winsys(struct pipe_winsys *winsys)
{
	struct intel_device *dev = (struct intel_device *)winsys;

	intel_be_destroy_device(&dev->base);

	free(dev);
}

struct pipe_screen *
intel_create_screen(int drmFD, int deviceID)
{
	struct intel_device *dev;
	struct pipe_screen *screen;

	/* Allocate the private area */
	dev = malloc(sizeof(*dev));
	if (!dev)
		return NULL;
	memset(dev, 0, sizeof(*dev));

	dev->deviceID = deviceID;

	intel_be_init_device(&dev->base, drmFD, deviceID);

	/* we need to hock our own destroy function in here */
	dev->base.base.destroy = intel_destroy_winsys;

	screen = i915_create_screen(&dev->base.base, deviceID);

	return screen;
}