r300g: cleanup buffer_{from, get}_handle

This commit is contained in:
Marek Olšák
2010-06-20 03:37:14 +02:00
parent 6e96cfa39a
commit e4fe18a620
4 changed files with 13 additions and 29 deletions

View File

@@ -931,17 +931,14 @@ static boolean r300_texture_get_handle(struct pipe_screen* screen,
{ {
struct r300_winsys_screen *rws = (struct r300_winsys_screen *)screen->winsys; struct r300_winsys_screen *rws = (struct r300_winsys_screen *)screen->winsys;
struct r300_texture* tex = (struct r300_texture*)texture; struct r300_texture* tex = (struct r300_texture*)texture;
unsigned stride;
if (!tex) { if (!tex) {
return FALSE; return FALSE;
} }
stride = r300_texture_get_stride(r300_screen(screen), tex, 0); whandle->stride = r300_texture_get_stride(r300_screen(screen), tex, 0);
rws->buffer_get_handle(rws, tex->buffer, stride, whandle); return rws->buffer_get_handle(rws, tex->buffer, whandle);
return TRUE;
} }
struct u_resource_vtbl r300_texture_vtbl = struct u_resource_vtbl r300_texture_vtbl =
@@ -1075,7 +1072,6 @@ r300_texture_from_handle(struct pipe_screen* screen,
struct r300_screen* rscreen = r300_screen(screen); struct r300_screen* rscreen = r300_screen(screen);
struct r300_winsys_buffer *buffer; struct r300_winsys_buffer *buffer;
struct r300_texture* tex; struct r300_texture* tex;
unsigned stride;
boolean override_zb_flags; boolean override_zb_flags;
/* Support only 2D textures without mipmaps */ /* Support only 2D textures without mipmaps */
@@ -1085,7 +1081,7 @@ r300_texture_from_handle(struct pipe_screen* screen,
return NULL; return NULL;
} }
buffer = rws->buffer_from_handle(rws, screen, whandle, &stride); buffer = rws->buffer_from_handle(rws, whandle->handle);
if (!buffer) { if (!buffer) {
return NULL; return NULL;
} }
@@ -1101,7 +1097,7 @@ r300_texture_from_handle(struct pipe_screen* screen,
tex->b.b.screen = screen; tex->b.b.screen = screen;
tex->domain = R300_DOMAIN_VRAM; tex->domain = R300_DOMAIN_VRAM;
tex->stride_override = stride; tex->stride_override = whandle->stride;
/* one ref already taken */ /* one ref already taken */
tex->buffer = buffer; tex->buffer = buffer;
@@ -1113,7 +1109,7 @@ r300_texture_from_handle(struct pipe_screen* screen,
"Pitch: % 4i, Dim: %ix%i, Format: %s\n", "Pitch: % 4i, Dim: %ix%i, Format: %s\n",
tex->macrotile ? "YES" : " NO", tex->macrotile ? "YES" : " NO",
tex->microtile ? "YES" : " NO", tex->microtile ? "YES" : " NO",
stride / util_format_get_blocksize(base->format), whandle->stride / util_format_get_blocksize(base->format),
base->width0, base->height0, base->width0, base->height0,
util_format_short_name(base->format)); util_format_short_name(base->format));

View File

@@ -143,12 +143,10 @@ struct r300_winsys_screen {
enum r300_value_id vid); enum r300_value_id vid);
struct r300_winsys_buffer *(*buffer_from_handle)(struct r300_winsys_screen *winsys, struct r300_winsys_buffer *(*buffer_from_handle)(struct r300_winsys_screen *winsys,
struct pipe_screen *screen, unsigned handle);
struct winsys_handle *whandle,
unsigned *stride);
boolean (*buffer_get_handle)(struct r300_winsys_screen *winsys, boolean (*buffer_get_handle)(struct r300_winsys_screen *winsys,
struct r300_winsys_buffer *buffer, struct r300_winsys_buffer *buffer,
unsigned stride,
struct winsys_handle *whandle); struct winsys_handle *whandle);
boolean (*is_buffer_referenced)(struct r300_winsys_screen *winsys, boolean (*is_buffer_referenced)(struct r300_winsys_screen *winsys,

View File

@@ -267,16 +267,14 @@ static struct radeon_drm_buffer *get_drm_buffer(struct pb_buffer *_buf)
boolean radeon_drm_bufmgr_get_handle(struct pb_buffer *_buf, boolean radeon_drm_bufmgr_get_handle(struct pb_buffer *_buf,
struct winsys_handle *whandle) struct winsys_handle *whandle)
{ {
int retval, fd;
struct drm_gem_flink flink; struct drm_gem_flink flink;
struct radeon_drm_buffer *buf = get_drm_buffer(_buf); struct radeon_drm_buffer *buf = get_drm_buffer(_buf);
if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) { if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) {
if (!buf->flinked) { if (!buf->flinked) {
fd = buf->mgr->rws->fd;
flink.handle = buf->bo->handle; flink.handle = buf->bo->handle;
retval = ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink); if (ioctl(buf->mgr->rws->fd, DRM_IOCTL_GEM_FLINK, &flink)) {
if (retval) {
return FALSE; return FALSE;
} }

View File

@@ -136,29 +136,21 @@ static boolean radeon_r300_winsys_is_buffer_referenced(struct r300_winsys_screen
} }
static struct r300_winsys_buffer *radeon_r300_winsys_buffer_from_handle(struct r300_winsys_screen *rws, static struct r300_winsys_buffer *radeon_r300_winsys_buffer_from_handle(struct r300_winsys_screen *rws,
struct pipe_screen *screen, unsigned handle)
struct winsys_handle *whandle,
unsigned *stride)
{ {
struct radeon_libdrm_winsys *ws = radeon_winsys_screen(rws); struct radeon_libdrm_winsys *ws = radeon_winsys_screen(rws);
struct pb_buffer *_buf; struct pb_buffer *_buf;
_buf = radeon_drm_bufmgr_create_buffer_from_handle(ws->kman, whandle->handle); _buf = radeon_drm_bufmgr_create_buffer_from_handle(ws->kman, handle);
*stride = whandle->stride;
return radeon_libdrm_winsys_buffer(_buf); return radeon_libdrm_winsys_buffer(_buf);
} }
static boolean radeon_r300_winsys_buffer_get_handle(struct r300_winsys_screen *rws, static boolean radeon_r300_winsys_buffer_get_handle(struct r300_winsys_screen *rws,
struct r300_winsys_buffer *buffer, struct r300_winsys_buffer *buffer,
unsigned stride, struct winsys_handle *whandle)
struct winsys_handle *whandle)
{ {
struct pb_buffer *_buf = radeon_pb_buffer(buffer); struct pb_buffer *_buf = radeon_pb_buffer(buffer);
boolean ret; return radeon_drm_bufmgr_get_handle(_buf, whandle);
ret = radeon_drm_bufmgr_get_handle(_buf, whandle);
if (ret)
whandle->stride = stride;
return ret;
} }
static void radeon_set_flush_cb(struct r300_winsys_screen *rws, static void radeon_set_flush_cb(struct r300_winsys_screen *rws,