cl_context ctx = NULL;
TRY_ALLOC_NO_ERR (ctx, CALLOC(struct _cl_context));
- TRY_ALLOC_NO_ERR (ctx->intel_drv, cl_genx_driver_new());
+ TRY_ALLOC_NO_ERR (ctx->intel_drv, cl_intel_driver_new());
ctx->magic = CL_MAGIC_CONTEXT_HEADER;
ctx->ref_n = 1;
pthread_mutex_init(&ctx->program_lock, NULL);
assert(ctx->programs == NULL);
assert(ctx->buffers == NULL);
assert(ctx->intel_drv);
- cl_genx_driver_delete(ctx->intel_drv);
+ cl_intel_driver_delete(ctx->intel_drv);
ctx->magic = CL_MAGIC_DEAD_HEADER; /* For safety */
cl_free(ctx);
}
#include <pthread.h>
/* DRI device created at create context */
-struct genx_driver;
+struct intel_driver;
/* Encapsulate the whole device */
struct _cl_context {
uint64_t magic; /* To identify it as a context */
volatile int ref_n; /* We reference count this object */
- struct genx_driver *intel_drv; /* Handles the real HW */
+ struct intel_driver *intel_drv; /* Handles the real HW */
cl_device_id device; /* All information about the GPU device */
cl_command_queue queues; /* All command queues currently allocated */
cl_program programs; /* All programs currently allocated */
cl_get_gt_device(void)
{
cl_device_id ret = NULL;
- int device_id = cl_intel_get_device_id();
+ const int device_id = cl_intel_get_device_id();
if (device_id == PCI_CHIP_IVYBRIDGE_GT1 ||
device_id == PCI_CHIP_IVYBRIDGE_M_GT1 ||
* Author: Benjamin Segovia <benjamin.segovia@intel.com>
*/
-#ifndef __CL_GENX_DRIVER_H__
-#define __CL_GENX_DRIVER_H__
+#ifndef __CL_INTEL_DRIVER_H__
+#define __CL_INTEL_DRIVER_H__
/* They are mostly wrapper around C++ delete / new to avoid c++ in c files */
-struct genx_driver;
+struct intel_driver;
/* Allocate and initialize the gen driver */
-extern struct genx_driver* cl_genx_driver_new(void);
+extern struct intel_driver* cl_intel_driver_new(void);
/* Destroy and deallocate the gen driver */
-extern void cl_genx_driver_delete(struct genx_driver*);
+extern void cl_intel_driver_delete(struct intel_driver*);
-#endif /* __CL_GENX_DRIVER_H__ */
+#endif /* __CL_INTEL_DRIVER_H__ */
genx->dri_ctx = NULL;
genx->x11_display = NULL;
}
-
+#if 0
LOCAL int
cl_intel_get_device_id(void)
{
genx_driver_terminate(driver);
genx_driver_delete(driver);
}
+#endif
#include "intel_driver.h"
#include <stdint.h>
-struct dri_state;
-typedef struct _XDisplay Display;
-
/* Provides more functionnalitites to setup gen state while using X */
typedef struct genx_driver
{
#include <sys/ioctl.h>
#include <xf86drm.h>
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
#include "cl_utils.h"
#include "cl_alloc.h"
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+#include "cl_genx_driver.h"
#define SET_BLOCKED_SIGSET(DRIVER) do { \
sigset_t bl_mask; \
else
FATAL ("Unsupported Gen for emulation");
#else
- if (IS_GEN&(driver->device_id))
+ if (IS_GEN7(driver->device_id))
driver->gen_ver = 7;
else if (IS_GEN6(driver->device_id))
driver->gen_ver = 6;
#endif /* EMULATE_GEN */
}
+LOCAL void
+intel_driver_open(intel_driver_t *intel)
+{
+ int cardi;
+ intel->x11_display = XOpenDisplay(":0.0");
+
+ if(intel->x11_display) {
+ if((intel->dri_ctx = getDRI2State(intel->x11_display,
+ DefaultScreen(intel->x11_display),
+ NULL)))
+ intel_driver_init_shared(intel, intel->dri_ctx);
+ else
+ printf("X server found. dri2 connection failed! \n");
+ } else {
+ printf("Can't find X server!\n");
+ }
+
+ if(!intel_driver_is_active(intel)) {
+ printf("Trying to open directly...");
+ char card_name[20];
+ for(cardi = 0; cardi < 16; cardi++) {
+ sprintf(card_name, "/dev/dri/card%d", cardi);
+ if(intel_driver_init_master(intel, card_name)) {
+ printf("Success at %s.\n", card_name);
+ break;
+ }
+ }
+ }
+ if(!intel_driver_is_active(intel)) {
+ printf("Device open failed\n");
+ exit(-1);
+ }
+}
+
+LOCAL void
+intel_driver_close(intel_driver_t *intel)
+{
+ if(intel->dri_ctx) dri_state_release(intel->dri_ctx);
+ if(intel->x11_display) XCloseDisplay(intel->x11_display);
+ intel->dri_ctx = NULL;
+ intel->x11_display = NULL;
+}
+
LOCAL int
intel_driver_get_param(intel_driver_t *driver, int param, int *value)
{
return drv->bufmgr;
}
+LOCAL int
+cl_intel_get_device_id(void)
+{
+ intel_driver_t *driver = NULL;
+ int intel_device_id;
+
+ driver = intel_driver_new();
+ assert(driver != NULL);
+ intel_driver_open(driver);
+ intel_device_id = driver->device_id;
+ intel_driver_close(driver);
+ intel_driver_delete(driver);
+
+ return intel_device_id;
+}
+
+LOCAL void
+cl_intel_driver_delete(intel_driver_t *driver)
+{
+ if (driver == NULL)
+ return;
+ intel_driver_close(driver);
+ intel_driver_terminate(driver);
+ intel_driver_delete(driver);
+}
+
+LOCAL intel_driver_t*
+cl_intel_driver_new(void)
+{
+ intel_driver_t *driver = NULL;
+ TRY_ALLOC_NO_ERR (driver, intel_driver_new());
+ intel_driver_open(driver);
+
+exit:
+ return driver;
+error:
+ cl_intel_driver_delete(driver);
+ driver = NULL;
+ goto exit;
+}
+
#define BR13_8888 (0x3 << 24)
struct dri_state;
+typedef struct _XDisplay Display;
typedef struct intel_driver
{
pthread_mutex_t ctxmutex;
int locked;
int master;
+ Display *x11_display;
+ struct dri_state *dri_ctx;
} intel_driver_t;
/* create / destroy device */
uint32_t pad22:22;
uint32_t scoreboard_type:1; /* 0 stalling, 1 - non-stalling */
uint32_t scoreboard_enable:1; /* 0 disabled, 1 enabled */
-
} vfe4;
struct {
};
#define MAX_IF_DESC 32
-#define MAX_THREADS 72
-#define MAX_SCRATCH_KB 12
/* Device abstraction */
struct intel_driver;
/* Insert the performance counter command */
if (state->perf_b.bo) {
BEGIN_BATCH(state->batch, 3);
- OUT_BATCH(state->batch, (0x28 << 23) | /* MI_REPORT_PERF_COUNT */
- (3 - 2)); /* length-2 */
+ OUT_BATCH(state->batch,
+ (0x28 << 23) | /* MI_REPORT_PERF_COUNT */
+ (3 - 2)); /* length-2 */
OUT_RELOC(state->batch, state->perf_b.bo,
I915_GEM_DOMAIN_RENDER,
I915_GEM_DOMAIN_RENDER,