summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r300/r300_screen.h
blob: 576f9c1f4a96e65595b3ba35048b21fee03bb2d9 (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * Copyright 2008 Corbin Simpson <MostAwesomeDude@gmail.com>
 * Copyright 2010 Marek Olšák <maraeo@gmail.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * on the rights to use, copy, modify, merge, publish, distribute, sub
 * license, and/or sell copies of the Software, and to permit persons to whom
 * the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
 * USE OR OTHER DEALINGS IN THE SOFTWARE. */

#ifndef R300_SCREEN_H
#define R300_SCREEN_H

#include "pipe/p_screen.h"

#include "r300_chipset.h"

#include "util/u_slab.h"

#include <stdio.h>

struct r300_winsys_screen;

struct r300_screen {
    /* Parent class */
    struct pipe_screen screen;

    struct r300_winsys_screen *rws;

    /* Chipset capabilities */
    struct r300_capabilities caps;

    /* Memory pools. */
    struct util_slab_mempool pool_buffers;

    /** Combination of DBG_xxx flags */
    unsigned debug;

    /* The number of created contexts to know whether we have multiple
     * contexts or not. */
    int num_contexts;
    pipe_mutex num_contexts_mutex;
};


/* Convenience cast wrappers. */
static INLINE struct r300_screen* r300_screen(struct pipe_screen* screen) {
    return (struct r300_screen*)screen;
}

static INLINE struct r300_winsys_screen *
r300_winsys_screen(struct pipe_screen *screen) {
    return r300_screen(screen)->rws;
}

/* Debug functionality. */

/**
 * Debug flags to disable/enable certain groups of debugging outputs.
 *
 * \note These may be rather coarse, and the grouping may be impractical.
 * If you find, while debugging the driver, that a different grouping
 * of these flags would be beneficial, just feel free to change them
 * but make sure to update the documentation in r300_debug.c to reflect
 * those changes.
 */
/*@{*/

/* Logging. */
#define DBG_PSC         (1 << 0)
#define DBG_FP          (1 << 1)
#define DBG_VP          (1 << 2)
#define DBG_SWTCL       (1 << 3)
#define DBG_DRAW        (1 << 4)
#define DBG_TEX         (1 << 5)
#define DBG_TEXALLOC    (1 << 6)
#define DBG_RS          (1 << 7)
#define DBG_FALL        (1 << 8)
#define DBG_FB          (1 << 9)
#define DBG_RS_BLOCK    (1 << 10)
#define DBG_CBZB        (1 << 11)
#define DBG_HYPERZ      (1 << 12)
#define DBG_SCISSOR     (1 << 13)
#define DBG_UPLOAD      (1 << 14)
#define DBG_INFO        (1 << 15)
/* Features. */
#define DBG_ANISOHQ     (1 << 16)
#define DBG_NO_TILING   (1 << 17)
#define DBG_NO_IMMD     (1 << 18)
#define DBG_FAKE_OCC    (1 << 19)
#define DBG_NO_OPT      (1 << 20)
#define DBG_NO_CBZB     (1 << 21)
#define DBG_NO_ZMASK    (1 << 22)
#define DBG_NO_HIZ      (1 << 23)
/* Statistics. */
#define DBG_P_STAT      (1 << 25)
/*@}*/

static INLINE boolean SCREEN_DBG_ON(struct r300_screen * screen, unsigned flags)
{
    return (screen->debug & flags) ? TRUE : FALSE;
}

static INLINE void SCREEN_DBG(struct r300_screen * screen, unsigned flags,
                              const char * fmt, ...)
{
    if (SCREEN_DBG_ON(screen, flags)) {
        va_list va;
        va_start(va, fmt);
        vfprintf(stderr, fmt, va);
        va_end(va);
    }
}

void r300_init_debug(struct r300_screen* ctx);

void r300_init_screen_resource_functions(struct r300_screen *r300screen);

#endif /* R300_SCREEN_H */