diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/drivers/r300/Makefile | 3 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_context.c | 9 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_context.h | 2 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_cs.h | 5 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_screen.c | 13 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_screen.h | 4 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_vbo.c | 3 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_winsys.h | 70 | ||||
| -rw-r--r-- | src/gallium/winsys/drm/radeon/core/radeon_buffer.h | 10 | ||||
| -rw-r--r-- | src/gallium/winsys/drm/radeon/core/radeon_drm.c | 7 | ||||
| -rw-r--r-- | src/gallium/winsys/drm/radeon/core/radeon_r300.c | 139 | ||||
| -rw-r--r-- | src/gallium/winsys/drm/radeon/core/radeon_r300.h | 5 | ||||
| -rw-r--r-- | src/gallium/winsys/drm/radeon/core/radeon_winsys.h | 105 | 
13 files changed, 189 insertions, 186 deletions
| diff --git a/src/gallium/drivers/r300/Makefile b/src/gallium/drivers/r300/Makefile index d13bb7a36b..63ae5c2766 100644 --- a/src/gallium/drivers/r300/Makefile +++ b/src/gallium/drivers/r300/Makefile @@ -23,7 +23,8 @@ C_SOURCES = \  	r300_tgsi_to_rc.c  LIBRARY_INCLUDES = \ -	-I$(TOP)/src/mesa/drivers/dri/r300/compiler +	-I$(TOP)/src/mesa/drivers/dri/r300/compiler \ +	-I$(TOP)/src/gallium/winsys/drm/radeon/core  COMPILER_ARCHIVE = $(TOP)/src/mesa/drivers/dri/r300/compiler/libr300compiler.a diff --git a/src/gallium/drivers/r300/r300_context.c b/src/gallium/drivers/r300/r300_context.c index 769733b6dd..68a17dcb63 100644 --- a/src/gallium/drivers/r300/r300_context.c +++ b/src/gallium/drivers/r300/r300_context.c @@ -36,7 +36,8 @@  #include "r300_screen.h"  #include "r300_state_derived.h"  #include "r300_state_invariant.h" -#include "r300_winsys.h" + +#include "radeon_winsys.h"  static enum pipe_error r300_clear_hash_table(void* key, void* value,                                               void* data) @@ -105,7 +106,7 @@ static void r300_flush_cb(void *data)  }  struct pipe_context* r300_create_context(struct pipe_screen* screen, -                                         struct r300_winsys* r300_winsys) +                                         struct radeon_winsys* radeon_winsys)  {      struct r300_context* r300 = CALLOC_STRUCT(r300_context);      struct r300_screen* r300screen = r300_screen(screen); @@ -113,9 +114,9 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,      if (!r300)          return NULL; -    r300->winsys = r300_winsys; +    r300->winsys = radeon_winsys; -    r300->context.winsys = (struct pipe_winsys*)r300_winsys; +    r300->context.winsys = (struct pipe_winsys*)radeon_winsys;      r300->context.screen = screen;      r300_init_debug(r300); diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h index 39c0914cff..dd3f6ac143 100644 --- a/src/gallium/drivers/r300/r300_context.h +++ b/src/gallium/drivers/r300/r300_context.h @@ -237,7 +237,7 @@ struct r300_context {      struct pipe_context context;      /* The interface to the windowing system, etc. */ -    struct r300_winsys* winsys; +    struct radeon_winsys* winsys;      /* Draw module. Used mostly for SW TCL. */      struct draw_context* draw; diff --git a/src/gallium/drivers/r300/r300_cs.h b/src/gallium/drivers/r300/r300_cs.h index 86ba91db52..8b100375fd 100644 --- a/src/gallium/drivers/r300/r300_cs.h +++ b/src/gallium/drivers/r300/r300_cs.h @@ -26,7 +26,8 @@  #include "util/u_math.h"  #include "r300_reg.h" -#include "r300_winsys.h" + +#include "radeon_winsys.h"  /* Yes, I know macros are ugly. However, they are much prettier than the code   * that they neatly hide away, and don't have the cost of function setup,so @@ -50,7 +51,7 @@  #define CS_LOCALS(context) \      struct r300_context* const cs_context_copy = (context); \ -    struct r300_winsys* cs_winsys = cs_context_copy->winsys; \ +    struct radeon_winsys* cs_winsys = cs_context_copy->winsys; \      int cs_count = 0;  #define CHECK_CS(size) \ diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c index 390b63007e..2e7b1423e6 100644 --- a/src/gallium/drivers/r300/r300_screen.c +++ b/src/gallium/drivers/r300/r300_screen.c @@ -27,7 +27,8 @@  #include "r300_context.h"  #include "r300_screen.h"  #include "r300_texture.h" -#include "r300_winsys.h" + +#include "radeon_winsys.h"  /* Return the identifier behind whom the brave coders responsible for this   * amalgamation of code, sweat, and duct tape, routinely obscure their names. @@ -372,7 +373,7 @@ static void r300_destroy_screen(struct pipe_screen* pscreen)      FREE(r300screen);  } -struct pipe_screen* r300_create_screen(struct r300_winsys* r300_winsys) +struct pipe_screen* r300_create_screen(struct radeon_winsys* radeon_winsys)  {      struct r300_screen* r300screen = CALLOC_STRUCT(r300_screen);      struct r300_capabilities* caps = CALLOC_STRUCT(r300_capabilities); @@ -380,14 +381,14 @@ struct pipe_screen* r300_create_screen(struct r300_winsys* r300_winsys)      if (!r300screen || !caps)          return NULL; -    caps->pci_id = r300_winsys->pci_id; -    caps->num_frag_pipes = r300_winsys->gb_pipes; -    caps->num_z_pipes = r300_winsys->z_pipes; +    caps->pci_id = radeon_winsys->pci_id; +    caps->num_frag_pipes = radeon_winsys->gb_pipes; +    caps->num_z_pipes = radeon_winsys->z_pipes;      r300_parse_chipset(caps);      r300screen->caps = caps; -    r300screen->screen.winsys = (struct pipe_winsys*)r300_winsys; +    r300screen->screen.winsys = (struct pipe_winsys*)radeon_winsys;      r300screen->screen.destroy = r300_destroy_screen;      r300screen->screen.get_name = r300_get_name;      r300screen->screen.get_vendor = r300_get_vendor; diff --git a/src/gallium/drivers/r300/r300_screen.h b/src/gallium/drivers/r300/r300_screen.h index 1ce5ff3904..2217988add 100644 --- a/src/gallium/drivers/r300/r300_screen.h +++ b/src/gallium/drivers/r300/r300_screen.h @@ -27,7 +27,7 @@  #include "r300_chipset.h" -struct r300_winsys; +struct radeon_winsys;  struct r300_screen {      /* Parent class */ @@ -58,6 +58,6 @@ r300_transfer(struct pipe_transfer* transfer)  }  /* Creates a new r300 screen. */ -struct pipe_screen* r300_create_screen(struct r300_winsys* r300_winsys); +struct pipe_screen* r300_create_screen(struct radeon_winsys* radeon_winsys);  #endif /* R300_SCREEN_H */ diff --git a/src/gallium/drivers/r300/r300_vbo.c b/src/gallium/drivers/r300/r300_vbo.c index 6ebaf715dc..d8610dadfa 100644 --- a/src/gallium/drivers/r300/r300_vbo.c +++ b/src/gallium/drivers/r300/r300_vbo.c @@ -32,7 +32,8 @@  #include "r300_context.h"  #include "r300_state_inlines.h"  #include "r300_reg.h" -#include "r300_winsys.h" + +#include "radeon_winsys.h"  static INLINE int get_buffer_offset(struct r300_context *r300,                                      unsigned int buf_nr, diff --git a/src/gallium/drivers/r300/r300_winsys.h b/src/gallium/drivers/r300/r300_winsys.h index 864a6146b2..f86985841f 100644 --- a/src/gallium/drivers/r300/r300_winsys.h +++ b/src/gallium/drivers/r300/r300_winsys.h @@ -35,76 +35,8 @@ extern "C" {  #include "pipe/p_state.h"  #include "pipe/internal/p_winsys_screen.h" -struct r300_winsys { -    /* Parent class */ -    struct pipe_winsys base; - -    /* Opaque Radeon-specific winsys object. */ -    void* radeon_winsys; - -    /* PCI ID */ -    uint32_t pci_id; - -    /* GB pipe count */ -    uint32_t gb_pipes; - -    /* Z pipe count (rv530 only) */ -    uint32_t z_pipes; - -    /* GART size. */ -    uint32_t gart_size; - -    /* VRAM size. */ -    uint32_t vram_size; - -    /* Add a pipe_buffer to the list of buffer objects to validate. */ -    boolean (*add_buffer)(struct r300_winsys* winsys, -                          struct pipe_buffer* pbuffer, -                          uint32_t rd, -                          uint32_t wd); - -    /* Revalidate all currently setup pipe_buffers. -     * Returns TRUE if a flush is required. */ -    boolean (*validate)(struct r300_winsys* winsys); - -    /* Check to see if there's room for commands. */ -    boolean (*check_cs)(struct r300_winsys* winsys, int size); - -    /* Start a command emit. */ -    void (*begin_cs)(struct r300_winsys* winsys, -                     int size, -                     const char* file, -                     const char* function, -                     int line); - -    /* Write a dword to the command buffer. */ -    void (*write_cs_dword)(struct r300_winsys* winsys, uint32_t dword); - -    /* Write a relocated dword to the command buffer. */ -    void (*write_cs_reloc)(struct r300_winsys* winsys, -                           struct pipe_buffer* bo, -                           uint32_t rd, -                           uint32_t wd, -                           uint32_t flags); - -    /* Finish a command emit. */ -    void (*end_cs)(struct r300_winsys* winsys, -                   const char* file, -                   const char* function, -                   int line); - -    /* Flush the CS. */ -    void (*flush_cs)(struct r300_winsys* winsys); - -    /* winsys flush - callback from winsys when flush required */ -    void (*set_flush_cb)(struct r300_winsys *winsys, -			 void (*flush_cb)(void *), void *data); - -    void (*reset_bos)(struct r300_winsys *winsys); -}; -  struct pipe_context* r300_create_context(struct pipe_screen* screen, -                                         struct r300_winsys* r300_winsys); +                                         struct radeon_winsys* radeon_winsys);  boolean r300_get_texture_buffer(struct pipe_texture* texture,                                  struct pipe_buffer** buffer, diff --git a/src/gallium/winsys/drm/radeon/core/radeon_buffer.h b/src/gallium/winsys/drm/radeon/core/radeon_buffer.h index f5153b06af..bfe2221d1e 100644 --- a/src/gallium/winsys/drm/radeon/core/radeon_buffer.h +++ b/src/gallium/winsys/drm/radeon/core/radeon_buffer.h @@ -45,6 +45,8 @@  #include "radeon_drm.h" +#include "radeon_winsys.h" +  struct radeon_pipe_buffer {      struct pipe_buffer  base;      struct radeon_bo    *bo; @@ -68,14 +70,6 @@ struct radeon_winsys_priv {      struct radeon_cs* cs;  }; -struct radeon_winsys { -    /* Parent class. */ -    struct pipe_winsys base; - -    /* This corresponds to void* radeon_winsys in r300_winsys. */ -    struct radeon_winsys_priv* priv; -}; -  struct radeon_winsys* radeon_pipe_winsys(int fb);  #if 0  struct pipe_surface *radeon_surface_from_handle(struct radeon_context *radeon_context, diff --git a/src/gallium/winsys/drm/radeon/core/radeon_drm.c b/src/gallium/winsys/drm/radeon/core/radeon_drm.c index 69f14e54f2..770d7c73eb 100644 --- a/src/gallium/winsys/drm/radeon/core/radeon_drm.c +++ b/src/gallium/winsys/drm/radeon/core/radeon_drm.c @@ -41,9 +41,8 @@ struct pipe_screen* radeon_create_screen(struct drm_api* api,      if (debug_get_bool_option("RADEON_SOFTPIPE", FALSE)) {          return softpipe_create_screen((struct pipe_winsys*)winsys);      } else { -        struct r300_winsys* r300 = radeon_create_r300_winsys(drmFB, winsys); -        FREE(winsys); -        return r300_create_screen(r300); +        radeon_setup_winsys(drmFB, winsys); +        return r300_create_screen(winsys);      }  } @@ -55,7 +54,7 @@ struct pipe_context* radeon_create_context(struct drm_api* api,          return radeon_create_softpipe(screen->winsys);      } else {          return r300_create_context(screen, -                                   (struct r300_winsys*)screen->winsys); +                                   (struct radeon_winsys*)screen->winsys);      }  } diff --git a/src/gallium/winsys/drm/radeon/core/radeon_r300.c b/src/gallium/winsys/drm/radeon/core/radeon_r300.c index d3e468a9ef..b64e9c16e1 100644 --- a/src/gallium/winsys/drm/radeon/core/radeon_r300.c +++ b/src/gallium/winsys/drm/radeon/core/radeon_r300.c @@ -22,36 +22,27 @@  #include "radeon_r300.h" -static void radeon_r300_set_flush_cb(struct r300_winsys *winsys, -				     void (*flush_cb)(void *), -				     void *data) +static void radeon_set_flush_cb(struct radeon_winsys *winsys, +                                void (*flush_cb)(void *), +                                void *data)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys; - -    radeon_cs_space_set_flush(priv->cs, flush_cb, -			      data); +    radeon_cs_space_set_flush(winsys->priv->cs, flush_cb, data);  } -static boolean radeon_r300_add_buffer(struct r300_winsys* winsys, -                                      struct pipe_buffer* pbuffer, -                                      uint32_t rd, -                                      uint32_t wd) +static boolean radeon_add_buffer(struct radeon_winsys* winsys, +                                 struct pipe_buffer* pbuffer, +                                 uint32_t rd, +                                 uint32_t wd)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys;      struct radeon_bo* bo = ((struct radeon_pipe_buffer*)pbuffer)->bo; -    radeon_cs_space_add_persistent_bo(priv->cs, bo, rd, wd); +    radeon_cs_space_add_persistent_bo(winsys->priv->cs, bo, rd, wd);      return TRUE;  } -static boolean radeon_r300_validate(struct r300_winsys* winsys) +static boolean radeon_validate(struct radeon_winsys* winsys)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys; - -    if (radeon_cs_space_check(priv->cs) < 0) { +    if (radeon_cs_space_check(winsys->priv->cs) < 0) {          return FALSE;      } @@ -59,45 +50,37 @@ static boolean radeon_r300_validate(struct r300_winsys* winsys)      return TRUE;  } -static boolean radeon_r300_check_cs(struct r300_winsys* winsys, int size) +static boolean radeon_check_cs(struct radeon_winsys* winsys, int size)  {      /* XXX check size here, lazy ass! */      /* XXX also validate buffers */      return TRUE;  } -static void radeon_r300_begin_cs(struct r300_winsys* winsys, -                                 int size, -                                 const char* file, -                                 const char* function, -                                 int line) +static void radeon_begin_cs(struct radeon_winsys* winsys, +                            int size, +                            const char* file, +                            const char* function, +                            int line)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys; - -    radeon_cs_begin(priv->cs, size, file, function, line); +    radeon_cs_begin(winsys->priv->cs, size, file, function, line);  } -static void radeon_r300_write_cs_dword(struct r300_winsys* winsys, -                                       uint32_t dword) +static void radeon_write_cs_dword(struct radeon_winsys* winsys, +                                  uint32_t dword)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys; - -    radeon_cs_write_dword(priv->cs, dword); +    radeon_cs_write_dword(winsys->priv->cs, dword);  } -static void radeon_r300_write_cs_reloc(struct r300_winsys* winsys, -                                       struct pipe_buffer* pbuffer, -                                       uint32_t rd, -                                       uint32_t wd, -                                       uint32_t flags) +static void radeon_write_cs_reloc(struct radeon_winsys* winsys, +                                  struct pipe_buffer* pbuffer, +                                  uint32_t rd, +                                  uint32_t wd, +                                  uint32_t flags)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys;      int retval = 0; -    retval = radeon_cs_write_reloc(priv->cs, +    retval = radeon_cs_write_reloc(winsys->priv->cs,              ((struct radeon_pipe_buffer*)pbuffer)->bo, rd, wd, flags);      if (retval) { @@ -106,46 +89,39 @@ static void radeon_r300_write_cs_reloc(struct r300_winsys* winsys,      }  } -static void radeon_r300_reset_bos(struct r300_winsys *winsys) +static void radeon_reset_bos(struct radeon_winsys *winsys)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys; -    radeon_cs_space_reset_bos(priv->cs); +    radeon_cs_space_reset_bos(winsys->priv->cs);  } -static void radeon_r300_end_cs(struct r300_winsys* winsys, -                               const char* file, -                               const char* function, -                               int line) +static void radeon_end_cs(struct radeon_winsys* winsys, +                          const char* file, +                          const char* function, +                          int line)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys; - -    radeon_cs_end(priv->cs, file, function, line); +    radeon_cs_end(winsys->priv->cs, file, function, line);  } -static void radeon_r300_flush_cs(struct r300_winsys* winsys) +static void radeon_flush_cs(struct radeon_winsys* winsys)  { -    struct radeon_winsys_priv* priv = -        (struct radeon_winsys_priv*)winsys->radeon_winsys;      int retval;      /* Emit the CS. */ -    retval = radeon_cs_emit(priv->cs); +    retval = radeon_cs_emit(winsys->priv->cs);      if (retval) {          debug_printf("radeon: Bad CS, dumping...\n"); -        radeon_cs_print(priv->cs, stderr); +        radeon_cs_print(winsys->priv->cs, stderr);      }      /* Reset CS.       * Someday, when we care about performance, we should really find a way       * to rotate between two or three CS objects so that the GPU can be       * spinning through one CS while another one is being filled. */ -    radeon_cs_erase(priv->cs); +    radeon_cs_erase(winsys->priv->cs);  }  /* Helper function to do the ioctls needed for setup and init. */ -static void do_ioctls(struct r300_winsys* winsys, int fd) +static void do_ioctls(struct radeon_winsys* winsys, int fd)  {      struct drm_radeon_gem_info gem_info = {0};      struct drm_radeon_info info = {0}; @@ -207,18 +183,17 @@ static void do_ioctls(struct r300_winsys* winsys, int fd)      winsys->vram_size = gem_info.vram_visible;  } -struct r300_winsys* -radeon_create_r300_winsys(int fd, struct radeon_winsys* old_winsys) +void +radeon_setup_winsys(int fd, struct radeon_winsys* winsys)  { -    struct r300_winsys* winsys = CALLOC_STRUCT(r300_winsys); -    struct radeon_winsys_priv* priv; - +    /* XXX is this check needed now? */      if (winsys == NULL) { -        return NULL; +        return;      } -    priv = old_winsys->priv; +    struct radeon_winsys_priv* priv = winsys->priv; +    /* XXX backwards is bad precedent */      do_ioctls(winsys, fd);      priv->csm = radeon_cs_manager_gem_ctor(fd); @@ -229,19 +204,15 @@ radeon_create_r300_winsys(int fd, struct radeon_winsys* old_winsys)      radeon_cs_set_limit(priv->cs,              RADEON_GEM_DOMAIN_VRAM, winsys->vram_size); -    winsys->add_buffer = radeon_r300_add_buffer; -    winsys->validate = radeon_r300_validate; - -    winsys->check_cs = radeon_r300_check_cs; -    winsys->begin_cs = radeon_r300_begin_cs; -    winsys->write_cs_dword = radeon_r300_write_cs_dword; -    winsys->write_cs_reloc = radeon_r300_write_cs_reloc; -    winsys->end_cs = radeon_r300_end_cs; -    winsys->flush_cs = radeon_r300_flush_cs; -    winsys->reset_bos = radeon_r300_reset_bos; -    winsys->set_flush_cb = radeon_r300_set_flush_cb; - -    memcpy(winsys, old_winsys, sizeof(struct radeon_winsys)); +    winsys->add_buffer = radeon_add_buffer; +    winsys->validate = radeon_validate; -    return winsys; +    winsys->check_cs = radeon_check_cs; +    winsys->begin_cs = radeon_begin_cs; +    winsys->write_cs_dword = radeon_write_cs_dword; +    winsys->write_cs_reloc = radeon_write_cs_reloc; +    winsys->end_cs = radeon_end_cs; +    winsys->flush_cs = radeon_flush_cs; +    winsys->reset_bos = radeon_reset_bos; +    winsys->set_flush_cb = radeon_set_flush_cb;  } diff --git a/src/gallium/winsys/drm/radeon/core/radeon_r300.h b/src/gallium/winsys/drm/radeon/core/radeon_r300.h index 775d7937fd..cfbdb30266 100644 --- a/src/gallium/winsys/drm/radeon/core/radeon_r300.h +++ b/src/gallium/winsys/drm/radeon/core/radeon_r300.h @@ -34,9 +34,6 @@  #include "radeon_buffer.h" -struct radeon_winsys; - -struct r300_winsys* -radeon_create_r300_winsys(int fd, struct radeon_winsys* old_winsys); +void radeon_setup_winsys(int fd, struct radeon_winsys* winsys);  #endif /* RADEON_R300_H */ diff --git a/src/gallium/winsys/drm/radeon/core/radeon_winsys.h b/src/gallium/winsys/drm/radeon/core/radeon_winsys.h new file mode 100644 index 0000000000..9edc9e038c --- /dev/null +++ b/src/gallium/winsys/drm/radeon/core/radeon_winsys.h @@ -0,0 +1,105 @@ +/* + * Copyright © 2009 Corbin Simpson + * All Rights Reserved. + * + * 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 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 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 COPYRIGHT HOLDERS, AUTHORS + * AND/OR ITS 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. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + */ +/* + * Authors: + *      Corbin Simpson <MostAwesomeDude@gmail.com> + */ +#ifndef RADEON_WINSYS_H +#define RADEON_WINSYS_H + +#include "pipe/internal/p_winsys_screen.h" + +struct radeon_winsys_priv; + +struct radeon_winsys { +    /* Parent class. */ +    struct pipe_winsys base; + +    /* Winsys private */ +    struct radeon_winsys_priv* priv; + +    /* PCI ID */ +    uint32_t pci_id; + +    /* GB pipe count */ +    uint32_t gb_pipes; + +    /* Z pipe count (rv530 only) */ +    uint32_t z_pipes; + +    /* GART size. */ +    uint32_t gart_size; + +    /* VRAM size. */ +    uint32_t vram_size; + +    /* Add a pipe_buffer to the list of buffer objects to validate. */ +    boolean (*add_buffer)(struct radeon_winsys* winsys, +                          struct pipe_buffer* pbuffer, +                          uint32_t rd, +                          uint32_t wd); + +    /* Revalidate all currently setup pipe_buffers. +     * Returns TRUE if a flush is required. */ +    boolean (*validate)(struct radeon_winsys* winsys); + +    /* Check to see if there's room for commands. */ +    boolean (*check_cs)(struct radeon_winsys* winsys, int size); + +    /* Start a command emit. */ +    void (*begin_cs)(struct radeon_winsys* winsys, +                     int size, +                     const char* file, +                     const char* function, +                     int line); + +    /* Write a dword to the command buffer. */ +    void (*write_cs_dword)(struct radeon_winsys* winsys, uint32_t dword); + +    /* Write a relocated dword to the command buffer. */ +    void (*write_cs_reloc)(struct radeon_winsys* winsys, +                           struct pipe_buffer* bo, +                           uint32_t rd, +                           uint32_t wd, +                           uint32_t flags); + +    /* Finish a command emit. */ +    void (*end_cs)(struct radeon_winsys* winsys, +                   const char* file, +                   const char* function, +                   int line); + +    /* Flush the CS. */ +    void (*flush_cs)(struct radeon_winsys* winsys); + +    /* winsys flush - callback from winsys when flush required */ +    void (*set_flush_cb)(struct radeon_winsys *winsys, +			 void (*flush_cb)(void *), void *data); + +    void (*reset_bos)(struct radeon_winsys *winsys); +}; + +#endif | 
