r300g: cleanup buffer_{from, get}_handle
This commit is contained in:
@@ -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));
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user