This is the initial step towards removing u_resource_vtbl.
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10659>
pipe_transfer_unmap(pipe, transfer);
}
-
-bool u_default_resource_get_handle(UNUSED struct pipe_screen *screen,
- UNUSED struct pipe_resource *resource,
- UNUSED struct winsys_handle *handle)
-{
- return FALSE;
-}
-
-
-
void u_default_transfer_flush_region(UNUSED struct pipe_context *pipe,
UNUSED struct pipe_transfer *transfer,
UNUSED const struct pipe_box *box)
return (struct u_resource *)res;
}
-bool u_resource_get_handle_vtbl(struct pipe_screen *screen,
- UNUSED struct pipe_context *ctx,
- struct pipe_resource *resource,
- struct winsys_handle *handle,
- UNUSED unsigned usage)
-{
- struct u_resource *ur = u_resource(resource);
- return ur->vtbl->resource_get_handle(screen, resource, handle);
-}
-
void u_resource_destroy_vtbl(struct pipe_screen *screen,
struct pipe_resource *resource)
{
extern "C" {
#endif
-bool u_default_resource_get_handle(struct pipe_screen *screen,
- struct pipe_resource *resource,
- struct winsys_handle *handle);
-
void u_default_buffer_subdata(struct pipe_context *pipe,
struct pipe_resource *resource,
unsigned usage, unsigned offset,
* to exist in a single driver. This is intended to be transitionary!
*/
struct u_resource_vtbl {
-
- bool (*resource_get_handle)(struct pipe_screen *,
- struct pipe_resource *tex,
- struct winsys_handle *handle);
-
void (*resource_destroy)(struct pipe_screen *,
struct pipe_resource *pt);
};
-bool u_resource_get_handle_vtbl(struct pipe_screen *screen,
- struct pipe_context *ctx,
- struct pipe_resource *resource,
- struct winsys_handle *handle,
- unsigned usage);
-
void u_resource_destroy_vtbl(struct pipe_screen *screen,
struct pipe_resource *resource);
{
is->base.resource_create = i915_resource_create;
is->base.resource_from_handle = i915_resource_from_handle;
- is->base.resource_get_handle = u_resource_get_handle_vtbl;
+ is->base.resource_get_handle = i915_resource_get_handle;
is->base.resource_destroy = u_resource_destroy_vtbl;
}
const struct pipe_resource *template,
boolean force_untiled);
+bool
+i915_resource_get_handle(struct pipe_screen *screen,
+ struct pipe_context *context,
+ struct pipe_resource *texture,
+ struct winsys_handle *whandle,
+ unsigned usage);
+
struct pipe_resource *
i915_texture_from_handle(struct pipe_screen * screen,
const struct pipe_resource *template,
#include "i915_resource.h"
-
-static bool
-i915_buffer_get_handle(struct pipe_screen *screen,
- struct pipe_resource *resource,
- struct winsys_handle *handle)
-{
- return FALSE;
-}
-
static void
i915_buffer_destroy(struct pipe_screen *screen,
struct pipe_resource *resource)
struct u_resource_vtbl i915_buffer_vtbl =
{
- i915_buffer_get_handle, /* get_handle */
i915_buffer_destroy, /* resource_destroy */
i915_buffer_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
-static bool
-i915_texture_get_handle(struct pipe_screen * screen,
- struct pipe_resource *texture,
- struct winsys_handle *whandle)
+bool
+i915_resource_get_handle(struct pipe_screen *screen,
+ struct pipe_context *context,
+ struct pipe_resource *texture,
+ struct winsys_handle *whandle,
+ unsigned usage)
{
+ if (texture->target == PIPE_BUFFER)
+ return false;
+
struct i915_screen *is = i915_screen(screen);
struct i915_texture *tex = i915_texture(texture);
struct i915_winsys *iws = is->iws;
struct u_resource_vtbl i915_texture_vtbl =
{
- i915_texture_get_handle, /* get_handle */
i915_texture_destroy, /* resource_destroy */
i915_texture_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
const struct u_resource_vtbl nouveau_buffer_vtbl =
{
- u_default_resource_get_handle, /* get_handle */
nouveau_buffer_destroy, /* resource_destroy */
nouveau_buffer_transfer_map, /* transfer_map */
nouveau_buffer_transfer_flush_region, /* transfer_flush_region */
const struct u_resource_vtbl nouveau_user_ptr_buffer_vtbl =
{
- u_default_resource_get_handle, /* get_handle */
nouveau_user_ptr_destroy, /* resource_destroy */
nouveau_user_ptr_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
return lvl->offset + (layer * lvl->zslice_size);
}
-static bool
+bool
nv30_miptree_get_handle(struct pipe_screen *pscreen,
+ struct pipe_context *context,
struct pipe_resource *pt,
- struct winsys_handle *handle)
+ struct winsys_handle *handle,
+ unsigned usage)
{
+ if (pt->target == PIPE_BUFFER)
+ return false;
+
struct nv30_miptree *mt = nv30_miptree(pt);
unsigned stride;
}
const struct u_resource_vtbl nv30_miptree_vtbl = {
- nv30_miptree_get_handle,
nv30_miptree_destroy,
nv30_miptree_transfer_map,
u_default_transfer_flush_region,
{
pscreen->resource_create = nv30_resource_create;
pscreen->resource_from_handle = nv30_resource_from_handle;
- pscreen->resource_get_handle = u_resource_get_handle_vtbl;
+ pscreen->resource_get_handle = nv30_miptree_get_handle;
pscreen->resource_destroy = u_resource_destroy_vtbl;
}
void
nv30_miptree_surface_del(struct pipe_context *, struct pipe_surface *);
+bool
+nv30_miptree_get_handle(struct pipe_screen *pscreen,
+ struct pipe_context *context,
+ struct pipe_resource *pt,
+ struct winsys_handle *handle,
+ unsigned usage);
+
void
nv30_resource_copy_region(struct pipe_context *pipe,
struct pipe_resource *dst, unsigned dst_level,
bool
nv50_miptree_get_handle(struct pipe_screen *pscreen,
+ struct pipe_context *context,
struct pipe_resource *pt,
- struct winsys_handle *whandle)
+ struct winsys_handle *whandle,
+ unsigned usage)
{
+ if (pt->target == PIPE_BUFFER)
+ return false;
+
struct nv50_miptree *mt = nv50_miptree(pt);
unsigned stride;
const struct u_resource_vtbl nv50_miptree_vtbl =
{
- nv50_miptree_get_handle, /* get_handle */
nv50_miptree_destroy, /* resource_destroy */
nv50_miptree_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
{
pscreen->resource_create = nv50_resource_create;
pscreen->resource_from_handle = nv50_resource_from_handle;
- pscreen->resource_get_handle = u_resource_get_handle_vtbl;
+ pscreen->resource_get_handle = nv50_miptree_get_handle;
pscreen->resource_destroy = u_resource_destroy_vtbl;
}
bool
nv50_miptree_get_handle(struct pipe_screen *pscreen,
+ struct pipe_context *context,
struct pipe_resource *pt,
- struct winsys_handle *whandle);
+ struct winsys_handle *whandle,
+ unsigned usage);
struct nv50_surface {
struct pipe_surface base;
NVC0_TILE_MODE_Y(config->nvc0.tile_mode));
}
-static bool
+bool
nvc0_miptree_get_handle(struct pipe_screen *pscreen,
+ struct pipe_context *context,
struct pipe_resource *pt,
- struct winsys_handle *whandle)
+ struct winsys_handle *whandle,
+ unsigned usage)
{
struct nv50_miptree *mt = nv50_miptree(pt);
bool ret;
- ret = nv50_miptree_get_handle(pscreen, pt, whandle);
+ ret = nv50_miptree_get_handle(pscreen, context, pt, whandle, usage);
if (!ret)
return ret;
const struct u_resource_vtbl nvc0_miptree_vtbl =
{
- nvc0_miptree_get_handle, /* get_handle */
nv50_miptree_destroy, /* resource_destroy */
nvc0_miptree_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
pscreen->query_dmabuf_modifiers = nvc0_query_dmabuf_modifiers;
pscreen->is_dmabuf_modifier_supported = nvc0_is_dmabuf_modifier_supported;
pscreen->resource_from_handle = nvc0_resource_from_handle;
- pscreen->resource_get_handle = u_resource_get_handle_vtbl;
+ pscreen->resource_get_handle = nvc0_miptree_get_handle;
pscreen->resource_destroy = u_resource_destroy_vtbl;
pscreen->resource_from_user_memory = nvc0_resource_from_user_memory;
}
const struct pipe_resource *tmp,
const uint64_t *modifiers, unsigned int count);
+bool
+nvc0_miptree_get_handle(struct pipe_screen *pscreen,
+ struct pipe_context *context,
+ struct pipe_resource *pt,
+ struct winsys_handle *whandle,
+ unsigned usage);
+
extern const struct u_resource_vtbl nvc0_miptree_vtbl;
struct pipe_surface *
static const struct u_resource_vtbl r300_buffer_vtbl =
{
- NULL, /* get_handle */
r300_buffer_destroy, /* resource_destroy */
r300_buffer_transfer_map, /* transfer_map */
NULL, /* transfer_flush_region */
static const struct u_resource_vtbl r300_texture_vtbl =
{
- NULL, /* get_handle */
r300_texture_destroy, /* resource_destroy */
r300_texture_transfer_map, /* transfer_map */
NULL, /* transfer_flush_region */
static const struct u_resource_vtbl r600_global_buffer_vtbl =
{
- u_default_resource_get_handle, /* get_handle */
r600_compute_global_buffer_destroy, /* resource_destroy */
r600_compute_global_transfer_map, /* transfer_map */
r600_compute_global_transfer_flush_region,/* transfer_flush_region */
static const struct u_resource_vtbl r600_buffer_vtbl =
{
- NULL, /* get_handle */
r600_buffer_destroy, /* resource_destroy */
r600_buffer_transfer_map, /* transfer_map */
r600_buffer_flush_region, /* transfer_flush_region */
static const struct u_resource_vtbl r600_texture_vtbl =
{
- NULL, /* get_handle */
r600_texture_destroy, /* resource_destroy */
r600_texture_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
}
static const struct u_resource_vtbl si_buffer_vtbl = {
- NULL, /* get_handle */
si_buffer_destroy, /* resource_destroy */
si_buffer_transfer_map, /* transfer_map */
si_buffer_flush_region, /* transfer_flush_region */
}
static const struct u_resource_vtbl si_auxiliary_texture_vtbl = {
- NULL, /* get_handle */
si_auxiliary_texture_destroy, /* resource_destroy */
NULL, /* transfer_map */
NULL, /* transfer_flush_region */
}
static const struct u_resource_vtbl si_texture_vtbl = {
- NULL, /* get_handle */
si_texture_destroy, /* resource_destroy */
si_texture_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
{
is->screen.resource_create = svga_resource_create;
is->screen.resource_from_handle = svga_resource_from_handle;
- is->screen.resource_get_handle = u_resource_get_handle_vtbl;
+ is->screen.resource_get_handle = svga_resource_get_handle;
is->screen.resource_destroy = u_resource_destroy_vtbl;
is->screen.can_create_resource = svga_can_create_resource;
}
struct u_resource_vtbl svga_buffer_vtbl =
{
- u_default_resource_get_handle, /* get_handle */
svga_buffer_destroy, /* resource_destroy */
svga_buffer_transfer_map, /* transfer_map */
svga_buffer_transfer_flush_region, /* transfer_flush_region */
-static bool
-svga_texture_get_handle(struct pipe_screen *screen,
- struct pipe_resource *texture,
- struct winsys_handle *whandle)
+bool
+svga_resource_get_handle(struct pipe_screen *screen,
+ struct pipe_context *context,
+ struct pipe_resource *texture,
+ struct winsys_handle *whandle,
+ unsigned usage)
{
struct svga_winsys_screen *sws = svga_winsys_screen(texture->screen);
unsigned stride;
+ if (texture->target == PIPE_BUFFER)
+ return false;
+
assert(svga_texture(texture)->key.cachable == 0);
svga_texture(texture)->key.cachable = 0;
struct u_resource_vtbl svga_texture_vtbl =
{
- svga_texture_get_handle, /* get_handle */
svga_texture_destroy, /* resource_destroy */
svga_texture_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */
svga_texture_create(struct pipe_screen *screen,
const struct pipe_resource *template);
+bool
+svga_resource_get_handle(struct pipe_screen *screen,
+ struct pipe_context *context,
+ struct pipe_resource *texture,
+ struct winsys_handle *whandle,
+ unsigned usage);
+
struct pipe_resource *
svga_texture_from_handle(struct pipe_screen * screen,
const struct pipe_resource *template,
static const struct u_resource_vtbl virgl_buffer_vtbl =
{
- u_default_resource_get_handle, /* get_handle */
virgl_resource_destroy, /* resource_destroy */
virgl_resource_transfer_map, /* transfer_map */
virgl_buffer_transfer_flush_region, /* transfer_flush_region */
{
screen->resource_create = virgl_resource_create;
screen->resource_from_handle = virgl_resource_from_handle;
- screen->resource_get_handle = u_resource_get_handle_vtbl;
+ screen->resource_get_handle = virgl_resource_get_handle;
screen->resource_destroy = u_resource_destroy_vtbl;
}
}
bool virgl_resource_get_handle(struct pipe_screen *screen,
+ struct pipe_context *context,
struct pipe_resource *resource,
- struct winsys_handle *whandle)
+ struct winsys_handle *whandle,
+ unsigned usage)
{
struct virgl_screen *vs = virgl_screen(screen);
struct virgl_resource *res = virgl_resource(resource);
struct pipe_resource *resource);
bool virgl_resource_get_handle(struct pipe_screen *screen,
+ struct pipe_context *context,
struct pipe_resource *resource,
- struct winsys_handle *whandle);
+ struct winsys_handle *whandle,
+ unsigned usage);
void virgl_resource_dirty(struct virgl_resource *res, uint32_t level);
static const struct u_resource_vtbl virgl_texture_vtbl =
{
- virgl_resource_get_handle, /* get_handle */
virgl_resource_destroy, /* resource_destroy */
virgl_texture_transfer_map, /* transfer_map */
NULL, /* transfer_flush_region */