blob: 7f890a56426b72b905b4cc3bfeff1b400e57a206 [file] [log] [blame]
Chia-I Wuc6fb9af2014-08-04 11:28:43 +08001/*
2 * XGL
3 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
Chia-I Wu44e42362014-09-02 08:32:09 +080023 *
24 * Authors:
25 * Chia-I Wu <olv@lunarg.com>
Chia-I Wuc6fb9af2014-08-04 11:28:43 +080026 */
27
28#ifndef INTEL_H
29#define INTEL_H
30
Chia-I Wu214dac62014-08-05 11:07:40 +080031#include <stdlib.h>
Chia-I Wuc6fb9af2014-08-04 11:28:43 +080032#include <stdbool.h>
Chia-I Wuaabb3602014-08-19 14:18:23 +080033#include <stdint.h>
Chia-I Wu214dac62014-08-05 11:07:40 +080034#include <string.h>
Chia-I Wuc6fb9af2014-08-04 11:28:43 +080035#include <assert.h>
36
37#include <xgl.h>
38#include <xglDbg.h>
Chia-I Wub8dceae2014-09-23 10:37:23 +080039#include <xglWsiX11Ext.h>
Chia-I Wu924c1fc2015-01-19 11:14:00 +080040#include <xglIcd.h>
Chia-I Wuc6fb9af2014-08-04 11:28:43 +080041
42#include "icd.h"
Chia-I Wu900364b2015-01-03 13:55:22 +080043#include "icd-alloc.h"
Chia-I Wu4115c892014-08-28 11:56:29 +080044#include "icd-bil.h"
Chia-I Wu1bf06df2014-08-16 12:33:13 +080045#include "icd-format.h"
Chia-I Wu8e270b52015-01-03 14:47:32 +080046#include "icd-log.h"
Chia-I Wu69abeac2014-08-16 12:43:53 +080047#include "icd-utils.h"
Chia-I Wuc6fb9af2014-08-04 11:28:43 +080048
Courtney Goeltzenleuchter211cc542015-02-23 17:40:15 -070049#define INTEL_API_VERSION XGL_API_VERSION
Chia-I Wu214dac62014-08-05 11:07:40 +080050#define INTEL_DRIVER_VERSION 0
51
52#define INTEL_GEN(gen) ((int) ((gen) * 100))
53
Chia-I Wu24693712014-11-08 11:54:47 +080054#define INTEL_MAX_VERTEX_BINDING_COUNT 33
55#define INTEL_MAX_VERTEX_ELEMENT_COUNT (INTEL_MAX_VERTEX_BINDING_COUNT + 1)
Tony Barbourfa6cac72015-01-16 14:27:35 -070056#define INTEL_MAX_RENDER_TARGETS 8
57
Chia-I Wu1c527012014-08-23 14:57:35 +080058enum intel_debug_flags {
59 INTEL_DEBUG_BATCH = 1 << 0,
Chia-I Wu93ada312014-08-23 15:02:25 +080060
61 INTEL_DEBUG_NOHW = 1 << 20,
Chia-I Wu3fb47ce2014-10-28 11:19:36 +080062 INTEL_DEBUG_NOCACHE = 1 << 21,
Chia-I Wuc45db532015-02-19 11:20:38 -070063 INTEL_DEBUG_NOHIZ = 1 << 22,
64 INTEL_DEBUG_HANG = 1 << 23,
Chia-I Wu1c527012014-08-23 14:57:35 +080065};
66
Chia-I Wu924c1fc2015-01-19 11:14:00 +080067struct intel_handle {
68 /* the loader expects a "void *" at the beginning */
69 void *loader_data;
70
71 uint32_t magic;
72};
73
Chia-I Wu1c527012014-08-23 14:57:35 +080074extern int intel_debug;
75
Chia-I Wu924c1fc2015-01-19 11:14:00 +080076static const uint32_t intel_handle_magic = 0x494e544c;
77
78static inline void intel_handle_init(struct intel_handle *handle,
79 XGL_DBG_OBJECT_TYPE type)
80{
81 set_loader_magic_value(handle);
82
83 handle->magic = intel_handle_magic + type;
84}
85
86/**
87 * Return true if \p handle is a valid intel_handle. This assumes the first
88 * sizeof(intel_handle) bytes are readable, and they does not happen to have
89 * our magic values.
90 */
91static inline bool intel_handle_validate(const void *handle)
92{
93 const uint32_t handle_type =
94 ((const struct intel_handle *) handle)->magic - intel_handle_magic;
95
96 return (handle_type <= XGL_DBG_OBJECT_TYPE_END_RANGE);
97}
98
99/**
100 * Return true if \p handle is a valid intel_handle of \p type.
101 *
102 * \see intel_handle_validate().
103 */
104static inline bool intel_handle_validate_type(const void *handle,
105 XGL_DBG_OBJECT_TYPE type)
106{
107 const uint32_t handle_type =
108 ((const struct intel_handle *) handle)->magic - intel_handle_magic;
109
110 return (handle_type == (uint32_t) type);
111}
112
Chia-I Wuc6fb9af2014-08-04 11:28:43 +0800113#endif /* INTEL_H */