mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 19:58:09 +02:00
r300-gallium, radeon-winsys: Hide radeon_cs from r300 pipe.
This commit is contained in:
parent
c11ad489e7
commit
5b15cc312f
4 changed files with 36 additions and 20 deletions
|
|
@ -42,11 +42,6 @@ struct r300_winsys {
|
|||
/* Opaque Radeon-specific winsys object. */
|
||||
void* radeon_winsys;
|
||||
|
||||
/* CS object. This is very much like Intel's batchbuffer.
|
||||
* Fill it full of dwords and relocs and then submit.
|
||||
* Repeat as needed. */
|
||||
struct radeon_cs* cs;
|
||||
|
||||
/* PCI ID */
|
||||
uint32_t pci_id;
|
||||
|
||||
|
|
|
|||
|
|
@ -175,8 +175,7 @@ struct radeon_winsys* radeon_pipe_winsys(int fd)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
bom = radeon_bo_manager_gem_ctor(fd);
|
||||
radeon_ws->priv->bom = bom;
|
||||
radeon_ws->priv->bom = radeon_bo_manager_gem_ctor(fd);
|
||||
|
||||
radeon_ws->base.flush_frontbuffer = radeon_flush_frontbuffer;
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,12 @@ struct radeon_winsys_priv {
|
|||
struct radeon_cs_space_check sc[RADEON_MAX_BOS];
|
||||
/* Current BO count. */
|
||||
unsigned bo_count;
|
||||
|
||||
/* Radeon CS manager. */
|
||||
struct radeon_cs_manager* csm;
|
||||
|
||||
/* Current CS. */
|
||||
struct radeon_cs* cs;
|
||||
};
|
||||
|
||||
struct radeon_winsys {
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ static boolean radeon_r300_validate(struct r300_winsys* winsys)
|
|||
(struct radeon_winsys_priv*)winsys->radeon_winsys;
|
||||
struct radeon_cs_space_check* sc = priv->sc;
|
||||
|
||||
retval = radeon_cs_space_check(winsys->cs, sc, priv->bo_count);
|
||||
retval = radeon_cs_space_check(priv->cs, sc, priv->bo_count);
|
||||
|
||||
if (retval == RADEON_CS_SPACE_OP_TO_BIG) {
|
||||
/* XXX we need to failover here */
|
||||
|
|
@ -83,13 +83,19 @@ static void radeon_r300_begin_cs(struct r300_winsys* winsys,
|
|||
const char* function,
|
||||
int line)
|
||||
{
|
||||
radeon_cs_begin(winsys->cs, size, file, function, line);
|
||||
struct radeon_winsys_priv* priv =
|
||||
(struct radeon_winsys_priv*)winsys->radeon_winsys;
|
||||
|
||||
radeon_cs_begin(priv->cs, size, file, function, line);
|
||||
}
|
||||
|
||||
static void radeon_r300_write_cs_dword(struct r300_winsys* winsys,
|
||||
uint32_t dword)
|
||||
{
|
||||
radeon_cs_write_dword(winsys->cs, dword);
|
||||
struct radeon_winsys_priv* priv =
|
||||
(struct radeon_winsys_priv*)winsys->radeon_winsys;
|
||||
|
||||
radeon_cs_write_dword(priv->cs, dword);
|
||||
}
|
||||
|
||||
static void radeon_r300_write_cs_reloc(struct r300_winsys* winsys,
|
||||
|
|
@ -98,7 +104,10 @@ static void radeon_r300_write_cs_reloc(struct r300_winsys* winsys,
|
|||
uint32_t wd,
|
||||
uint32_t flags)
|
||||
{
|
||||
radeon_cs_write_reloc(winsys->cs,
|
||||
struct radeon_winsys_priv* priv =
|
||||
(struct radeon_winsys_priv*)winsys->radeon_winsys;
|
||||
|
||||
radeon_cs_write_reloc(priv->cs,
|
||||
((struct radeon_pipe_buffer*)pbuffer)->bo, rd, wd, flags);
|
||||
}
|
||||
|
||||
|
|
@ -107,19 +116,24 @@ static void radeon_r300_end_cs(struct r300_winsys* winsys,
|
|||
const char* function,
|
||||
int line)
|
||||
{
|
||||
radeon_cs_end(winsys->cs, file, function, line);
|
||||
struct radeon_winsys_priv* priv =
|
||||
(struct radeon_winsys_priv*)winsys->radeon_winsys;
|
||||
|
||||
radeon_cs_end(priv->cs, file, function, line);
|
||||
}
|
||||
|
||||
static void radeon_r300_flush_cs(struct r300_winsys* winsys)
|
||||
{
|
||||
struct radeon_winsys_priv* priv =
|
||||
(struct radeon_winsys_priv*)winsys->radeon_winsys;
|
||||
int retval = 0;
|
||||
|
||||
retval = radeon_cs_emit(winsys->cs);
|
||||
retval = radeon_cs_emit(priv->cs);
|
||||
if (retval) {
|
||||
debug_printf("radeon: Bad CS, dumping...\n");
|
||||
radeon_cs_print(winsys->cs, stderr);
|
||||
radeon_cs_print(priv->cs, stderr);
|
||||
}
|
||||
radeon_cs_erase(winsys->cs);
|
||||
radeon_cs_erase(priv->cs);
|
||||
}
|
||||
|
||||
/* Helper function to do the ioctls needed for setup and init. */
|
||||
|
|
@ -169,20 +183,22 @@ struct r300_winsys*
|
|||
radeon_create_r300_winsys(int fd, struct radeon_winsys* old_winsys)
|
||||
{
|
||||
struct r300_winsys* winsys = CALLOC_STRUCT(r300_winsys);
|
||||
struct radeon_cs_manager* csm;
|
||||
struct radeon_winsys_priv* priv;
|
||||
|
||||
if (winsys == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
priv = old_winsys->priv;
|
||||
|
||||
do_ioctls(winsys, fd);
|
||||
|
||||
csm = radeon_cs_manager_gem_ctor(fd);
|
||||
priv->csm = radeon_cs_manager_gem_ctor(fd);
|
||||
|
||||
winsys->cs = radeon_cs_create(csm, 1024 * 64 / 4);
|
||||
radeon_cs_set_limit(winsys->cs,
|
||||
priv->cs = radeon_cs_create(priv->csm, 1024 * 64 / 4);
|
||||
radeon_cs_set_limit(priv->cs,
|
||||
RADEON_GEM_DOMAIN_GTT, winsys->gart_size);
|
||||
radeon_cs_set_limit(winsys->cs,
|
||||
radeon_cs_set_limit(priv->cs,
|
||||
RADEON_GEM_DOMAIN_VRAM, winsys->vram_size);
|
||||
|
||||
winsys->add_buffer = radeon_r300_add_buffer;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue