Home | History | Annotate | Download | only in r300
      1 /*
      2  * Copyright 2008 Corbin Simpson <MostAwesomeDude (at) gmail.com>
      3  * Copyright 2010 Marek Olk <maraeo (at) gmail.com>
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the "Software"),
      7  * to deal in the Software without restriction, including without limitation
      8  * on the rights to use, copy, modify, merge, publish, distribute, sub
      9  * license, and/or sell copies of the Software, and to permit persons to whom
     10  * the Software is furnished to do so, subject to the following conditions:
     11  *
     12  * The above copyright notice and this permission notice (including the next
     13  * paragraph) shall be included in all copies or substantial portions of the
     14  * 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 NON-INFRINGEMENT. IN NO EVENT SHALL
     19  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
     20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
     21  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
     22  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
     23 
     24 #ifndef R300_SCREEN_H
     25 #define R300_SCREEN_H
     26 
     27 #include "r300_chipset.h"
     28 #include "radeon/radeon_winsys.h"
     29 #include "pipe/p_screen.h"
     30 #include "util/slab.h"
     31 #include "os/os_thread.h"
     32 #include <stdio.h>
     33 
     34 struct r300_screen {
     35     /* Parent class */
     36     struct pipe_screen screen;
     37 
     38     struct radeon_winsys *rws;
     39 
     40     /* Chipset info and capabilities. */
     41     struct radeon_info info;
     42     struct r300_capabilities caps;
     43 
     44     /** Combination of DBG_xxx flags */
     45     unsigned debug;
     46 
     47     struct slab_parent_pool pool_transfers;
     48 
     49     /* The MSAA texture with CMASK access; */
     50     struct pipe_resource *cmask_resource;
     51     pipe_mutex cmask_mutex;
     52 };
     53 
     54 
     55 /* Convenience cast wrappers. */
     56 static inline struct r300_screen* r300_screen(struct pipe_screen* screen) {
     57     return (struct r300_screen*)screen;
     58 }
     59 
     60 static inline struct radeon_winsys *
     61 radeon_winsys(struct pipe_screen *screen) {
     62     return r300_screen(screen)->rws;
     63 }
     64 
     65 /* Debug functionality. */
     66 
     67 /**
     68  * Debug flags to disable/enable certain groups of debugging outputs.
     69  *
     70  * \note These may be rather coarse, and the grouping may be impractical.
     71  * If you find, while debugging the driver, that a different grouping
     72  * of these flags would be beneficial, just feel free to change them
     73  * but make sure to update the documentation in r300_debug.c to reflect
     74  * those changes.
     75  */
     76 /*@{*/
     77 
     78 /* Logging. */
     79 #define DBG_PSC         (1 << 0)
     80 #define DBG_FP          (1 << 1)
     81 #define DBG_VP          (1 << 2)
     82 #define DBG_SWTCL       (1 << 3)
     83 #define DBG_DRAW        (1 << 4)
     84 #define DBG_TEX         (1 << 5)
     85 #define DBG_TEXALLOC    (1 << 6)
     86 #define DBG_RS          (1 << 7)
     87 #define DBG_FB          (1 << 8)
     88 #define DBG_RS_BLOCK    (1 << 9)
     89 #define DBG_CBZB        (1 << 10)
     90 #define DBG_HYPERZ      (1 << 11)
     91 #define DBG_SCISSOR     (1 << 12)
     92 #define DBG_INFO        (1 << 13)
     93 #define DBG_MSAA        (1 << 14)
     94 /* Features. */
     95 #define DBG_ANISOHQ     (1 << 16)
     96 #define DBG_NO_TILING   (1 << 17)
     97 #define DBG_NO_IMMD     (1 << 18)
     98 #define DBG_NO_OPT      (1 << 19)
     99 #define DBG_NO_CBZB     (1 << 20)
    100 #define DBG_NO_ZMASK    (1 << 21)
    101 #define DBG_NO_HIZ      (1 << 22)
    102 #define DBG_NO_CMASK    (1 << 23)
    103 /* Statistics. */
    104 #define DBG_P_STAT      (1 << 25)
    105 /*@}*/
    106 
    107 static inline boolean SCREEN_DBG_ON(struct r300_screen * screen, unsigned flags)
    108 {
    109     return (screen->debug & flags) ? TRUE : FALSE;
    110 }
    111 
    112 static inline void SCREEN_DBG(struct r300_screen * screen, unsigned flags,
    113                               const char * fmt, ...)
    114 {
    115     if (SCREEN_DBG_ON(screen, flags)) {
    116         va_list va;
    117         va_start(va, fmt);
    118         vfprintf(stderr, fmt, va);
    119         va_end(va);
    120     }
    121 }
    122 
    123 void r300_init_debug(struct r300_screen* ctx);
    124 
    125 void r300_init_screen_resource_functions(struct r300_screen *r300screen);
    126 
    127 #endif /* R300_SCREEN_H */
    128