r600g: remove the cache buffer manager from winsys/r600

As we've just started using the one from winsys/radeon.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Marek Olšák
2011-08-03 01:34:39 +02:00
parent 11daa7e325
commit 60ff68ad00
6 changed files with 3 additions and 223 deletions
+1 -2
View File
@@ -10,8 +10,7 @@ C_SOURCES = \
radeon_pciid.c \
r600_bo.c \
r600_drm.c \
r600_hw_context.c \
r600_bomgr.c
r600_hw_context.c
LIBRARY_INCLUDES = -I$(TOP)/src/gallium/drivers/r600 \
-I$(TOP)/include \
-1
View File
@@ -9,7 +9,6 @@ r600_sources = [
'r600_bo.c',
'r600_drm.c',
'r600_hw_context.c',
'r600_bomgr.c',
]
env.PkgUseModules('DRM_RADEON')
+2 -20
View File
@@ -47,14 +47,6 @@ struct r600_bo *r600_bo(struct radeon *radeon,
RADEON_GEM_DOMAIN_GTT |
RADEON_GEM_DOMAIN_VRAM);
if (binding & (PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER)) {
bo = r600_bomgr_bo_create(radeon->bomgr, size, alignment, *radeon->cfence);
if (bo) {
bo->domains = domains;
return bo;
}
}
switch(usage) {
case PIPE_USAGE_DYNAMIC:
case PIPE_USAGE_STREAM:
@@ -75,12 +67,8 @@ struct r600_bo *r600_bo(struct radeon *radeon,
bo = calloc(1, sizeof(struct r600_bo));
bo->size = size;
bo->alignment = alignment;
bo->domains = domains;
bo->bo = rbo;
if (binding & (PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER)) {
r600_bomgr_bo_init(radeon->bomgr, bo);
}
pipe_reference_init(&bo->reference, 1);
return bo;
@@ -128,7 +116,7 @@ void *r600_bo_map(struct radeon *radeon, struct r600_bo *bo, unsigned usage, voi
if (usage & PIPE_TRANSFER_UNSYNCHRONIZED) {
radeon_bo_map(radeon, bo->bo);
return (uint8_t *) bo->bo->data + bo->offset;
return (uint8_t *) bo->bo->data;
}
if (p_atomic_read(&bo->bo->reference.count) > 1) {
@@ -158,7 +146,7 @@ void *r600_bo_map(struct radeon *radeon, struct r600_bo *bo, unsigned usage, voi
}
out:
return (uint8_t *) bo->bo->data + bo->offset;
return (uint8_t *) bo->bo->data;
}
void r600_bo_unmap(struct radeon *radeon, struct r600_bo *bo)
@@ -168,12 +156,6 @@ void r600_bo_unmap(struct radeon *radeon, struct r600_bo *bo)
void r600_bo_destroy(struct radeon *radeon, struct r600_bo *bo)
{
if (bo->manager_id) {
if (!r600_bomgr_bo_destroy(radeon->bomgr, bo)) {
/* destroy is delayed by buffer manager */
return;
}
}
radeon_bo_reference(radeon, &bo->bo, NULL);
free(bo);
}
-159
View File
@@ -1,159 +0,0 @@
/*
* Copyright 2010 VMWare.
* Copyright 2010 Red Hat Inc.
*
* 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.
*
* Authors:
* Jose Fonseca <jrfonseca-at-vmware-dot-com>
* Thomas Hellström <thomas-at-vmware-dot-com>
* Jerome Glisse <jglisse@redhat.com>
*/
#include "r600_priv.h"
#include "util/u_memory.h"
#include "util/u_time.h"
static void r600_bomgr_timeout_flush(struct r600_bomgr *mgr)
{
struct r600_bo *bo, *tmp;
int64_t now;
now = os_time_get();
LIST_FOR_EACH_ENTRY_SAFE(bo, tmp, &mgr->delayed, list) {
if(!os_time_timeout(bo->start, bo->end, now))
break;
mgr->num_delayed--;
bo->manager_id = 0;
LIST_DEL(&bo->list);
r600_bo_destroy(mgr->radeon, bo);
}
}
static INLINE int r600_bo_is_compat(struct r600_bomgr *mgr,
struct r600_bo *bo,
unsigned size,
unsigned alignment,
unsigned cfence)
{
if(bo->size < size) {
return 0;
}
/* be lenient with size */
if(bo->size >= 2*size) {
return 0;
}
if(!pb_check_alignment(alignment, bo->alignment)) {
return 0;
}
if (!fence_is_after(cfence, bo->fence)) {
return 0;
}
return 1;
}
struct r600_bo *r600_bomgr_bo_create(struct r600_bomgr *mgr,
unsigned size,
unsigned alignment,
unsigned cfence)
{
struct r600_bo *bo, *tmp;
int64_t now;
pipe_mutex_lock(mgr->mutex);
now = os_time_get();
LIST_FOR_EACH_ENTRY_SAFE(bo, tmp, &mgr->delayed, list) {
if(r600_bo_is_compat(mgr, bo, size, alignment, cfence)) {
LIST_DEL(&bo->list);
--mgr->num_delayed;
r600_bomgr_timeout_flush(mgr);
pipe_mutex_unlock(mgr->mutex);
LIST_INITHEAD(&bo->list);
pipe_reference_init(&bo->reference, 1);
return bo;
}
if(os_time_timeout(bo->start, bo->end, now)) {
mgr->num_delayed--;
bo->manager_id = 0;
LIST_DEL(&bo->list);
r600_bo_destroy(mgr->radeon, bo);
}
}
pipe_mutex_unlock(mgr->mutex);
return NULL;
}
void r600_bomgr_bo_init(struct r600_bomgr *mgr, struct r600_bo *bo)
{
LIST_INITHEAD(&bo->list);
bo->manager_id = 1;
}
boolean r600_bomgr_bo_destroy(struct r600_bomgr *mgr, struct r600_bo *bo)
{
bo->start = os_time_get();
bo->end = bo->start + mgr->usecs;
pipe_mutex_lock(mgr->mutex);
LIST_ADDTAIL(&bo->list, &mgr->delayed);
++mgr->num_delayed;
pipe_mutex_unlock(mgr->mutex);
return FALSE;
}
void r600_bomgr_destroy(struct r600_bomgr *mgr)
{
struct r600_bo *bo, *tmp;
pipe_mutex_lock(mgr->mutex);
LIST_FOR_EACH_ENTRY_SAFE(bo, tmp, &mgr->delayed, list) {
mgr->num_delayed--;
bo->manager_id = 0;
LIST_DEL(&bo->list);
r600_bo_destroy(mgr->radeon, bo);
}
pipe_mutex_unlock(mgr->mutex);
FREE(mgr);
}
struct r600_bomgr *r600_bomgr_create(struct radeon *radeon, unsigned usecs)
{
struct r600_bomgr *mgr;
mgr = CALLOC_STRUCT(r600_bomgr);
if (mgr == NULL)
return NULL;
mgr->radeon = radeon;
mgr->usecs = usecs;
LIST_INITHEAD(&mgr->delayed);
mgr->num_delayed = 0;
pipe_mutex_init(mgr->mutex);
return mgr;
}
-7
View File
@@ -305,10 +305,6 @@ struct radeon *radeon_create(struct radeon_winsys *ws)
radeon_get_backend_map(radeon);
}
radeon->bomgr = r600_bomgr_create(radeon, 1000000);
if (radeon->bomgr == NULL) {
return NULL;
}
r = radeon_init_fence(radeon);
if (r) {
radeon_destroy(radeon);
@@ -327,9 +323,6 @@ struct radeon *radeon_destroy(struct radeon *radeon)
r600_bo_reference(radeon, &radeon->fence_bo, NULL);
}
if (radeon->bomgr)
r600_bomgr_destroy(radeon->bomgr);
FREE(radeon);
return NULL;
}
-34
View File
@@ -34,7 +34,6 @@
#define PKT_COUNT_C 0xC000FFFF
#define PKT_COUNT_S(x) (((x) & 0x3FFF) << 16)
struct r600_bomgr;
struct r600_bo;
struct radeon {
@@ -43,7 +42,6 @@ struct radeon {
unsigned family;
enum chip_class chip_class;
struct r600_tiling_info tiling_info;
struct r600_bomgr *bomgr;
unsigned fence;
unsigned *cfence;
struct r600_bo *fence_bo;
@@ -94,21 +92,6 @@ struct r600_bo {
unsigned domains;
struct radeon_bo *bo;
unsigned fence;
/* manager data */
struct list_head list;
unsigned manager_id;
unsigned alignment;
unsigned offset;
int64_t start;
int64_t end;
};
struct r600_bomgr {
struct radeon *radeon;
unsigned usecs;
pipe_mutex mutex;
struct list_head delayed;
unsigned num_delayed;
};
/*
@@ -174,23 +157,6 @@ static INLINE void r600_context_bo_reloc(struct r600_context *ctx, u32 *pm4, str
*/
void r600_bo_destroy(struct radeon *radeon, struct r600_bo *bo);
/*
* r600_bomgr.c
*/
struct r600_bomgr *r600_bomgr_create(struct radeon *radeon, unsigned usecs);
void r600_bomgr_destroy(struct r600_bomgr *mgr);
boolean r600_bomgr_bo_destroy(struct r600_bomgr *mgr, struct r600_bo *bo);
void r600_bomgr_bo_init(struct r600_bomgr *mgr, struct r600_bo *bo);
struct r600_bo *r600_bomgr_bo_create(struct r600_bomgr *mgr,
unsigned size,
unsigned alignment,
unsigned cfence);
/*
* helpers
*/
/*
* radeon_bo.c