mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
r300g, radeong: De-specialize r300_winsys into radeon_winsys.
There's like five good reasons for this, I swear.
This commit is contained in:
parent
dad193d516
commit
4f77b0103d
13 changed files with 189 additions and 186 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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) \
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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->add_buffer = radeon_add_buffer;
|
||||
winsys->validate = radeon_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));
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
105
src/gallium/winsys/drm/radeon/core/radeon_winsys.h
Normal file
105
src/gallium/winsys/drm/radeon/core/radeon_winsys.h
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Reference in a new issue