radeonsi: move radeonsi-specific functions out of r600_texture.c
This commit is contained in:
@@ -546,42 +546,6 @@ struct pipe_resource *si_texture_create(struct pipe_screen *screen,
|
||||
0, NULL, &surface);
|
||||
}
|
||||
|
||||
static struct pipe_surface *r600_create_surface(struct pipe_context *pipe,
|
||||
struct pipe_resource *texture,
|
||||
const struct pipe_surface *surf_tmpl)
|
||||
{
|
||||
struct r600_texture *rtex = (struct r600_texture*)texture;
|
||||
struct r600_surface *surface = CALLOC_STRUCT(r600_surface);
|
||||
unsigned level = surf_tmpl->u.tex.level;
|
||||
|
||||
assert(surf_tmpl->u.tex.first_layer <= util_max_layer(texture, surf_tmpl->u.tex.level));
|
||||
assert(surf_tmpl->u.tex.last_layer <= util_max_layer(texture, surf_tmpl->u.tex.level));
|
||||
assert(surf_tmpl->u.tex.first_layer == surf_tmpl->u.tex.last_layer);
|
||||
if (surface == NULL)
|
||||
return NULL;
|
||||
/* XXX no offset */
|
||||
/* offset = r600_texture_get_offset(rtex, level, surf_tmpl->u.tex.first_layer);*/
|
||||
pipe_reference_init(&surface->base.reference, 1);
|
||||
pipe_resource_reference(&surface->base.texture, texture);
|
||||
surface->base.context = pipe;
|
||||
surface->base.format = surf_tmpl->format;
|
||||
surface->base.width = rtex->surface.level[level].npix_x;
|
||||
surface->base.height = rtex->surface.level[level].npix_y;
|
||||
surface->base.texture = texture;
|
||||
surface->base.u.tex.first_layer = surf_tmpl->u.tex.first_layer;
|
||||
surface->base.u.tex.last_layer = surf_tmpl->u.tex.last_layer;
|
||||
surface->base.u.tex.level = level;
|
||||
|
||||
return &surface->base;
|
||||
}
|
||||
|
||||
static void r600_surface_destroy(struct pipe_context *pipe,
|
||||
struct pipe_surface *surface)
|
||||
{
|
||||
pipe_resource_reference(&surface->texture, NULL);
|
||||
FREE(surface);
|
||||
}
|
||||
|
||||
struct pipe_resource *si_texture_from_handle(struct pipe_screen *screen,
|
||||
const struct pipe_resource *templ,
|
||||
struct winsys_handle *whandle)
|
||||
@@ -881,12 +845,6 @@ static void si_texture_transfer_unmap(struct pipe_context *ctx,
|
||||
FREE(transfer);
|
||||
}
|
||||
|
||||
void si_init_surface_functions(struct r600_context *r600)
|
||||
{
|
||||
r600->b.b.create_surface = r600_create_surface;
|
||||
r600->b.b.surface_destroy = r600_surface_destroy;
|
||||
}
|
||||
|
||||
static const struct u_resource_vtbl r600_texture_vtbl =
|
||||
{
|
||||
r600_texture_get_handle, /* get_handle */
|
||||
|
||||
@@ -228,7 +228,6 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
|
||||
si_init_blit_functions(rctx);
|
||||
r600_init_query_functions(rctx);
|
||||
r600_init_context_resource_functions(rctx);
|
||||
si_init_surface_functions(rctx);
|
||||
si_init_compute_functions(rctx);
|
||||
|
||||
if (rscreen->b.info.has_uvd) {
|
||||
|
||||
@@ -240,9 +240,6 @@ void r600_init_query_functions(struct r600_context *rctx);
|
||||
/* r600_resource.c */
|
||||
void r600_init_context_resource_functions(struct r600_context *r600);
|
||||
|
||||
/* r600_texture.c */
|
||||
void si_init_surface_functions(struct r600_context *r600);
|
||||
|
||||
/* r600_translate.c */
|
||||
void r600_translate_index_buffer(struct r600_context *r600,
|
||||
struct pipe_index_buffer *ib,
|
||||
|
||||
@@ -2919,6 +2919,42 @@ static void *si_create_blend_custom(struct r600_context *rctx, unsigned mode)
|
||||
return si_create_blend_state_mode(&rctx->b.b, &blend, mode);
|
||||
}
|
||||
|
||||
static struct pipe_surface *r600_create_surface(struct pipe_context *pipe,
|
||||
struct pipe_resource *texture,
|
||||
const struct pipe_surface *surf_tmpl)
|
||||
{
|
||||
struct r600_texture *rtex = (struct r600_texture*)texture;
|
||||
struct r600_surface *surface = CALLOC_STRUCT(r600_surface);
|
||||
unsigned level = surf_tmpl->u.tex.level;
|
||||
|
||||
if (surface == NULL)
|
||||
return NULL;
|
||||
|
||||
assert(surf_tmpl->u.tex.first_layer <= util_max_layer(texture, surf_tmpl->u.tex.level));
|
||||
assert(surf_tmpl->u.tex.last_layer <= util_max_layer(texture, surf_tmpl->u.tex.level));
|
||||
assert(surf_tmpl->u.tex.first_layer == surf_tmpl->u.tex.last_layer);
|
||||
|
||||
pipe_reference_init(&surface->base.reference, 1);
|
||||
pipe_resource_reference(&surface->base.texture, texture);
|
||||
surface->base.context = pipe;
|
||||
surface->base.format = surf_tmpl->format;
|
||||
surface->base.width = rtex->surface.level[level].npix_x;
|
||||
surface->base.height = rtex->surface.level[level].npix_y;
|
||||
surface->base.texture = texture;
|
||||
surface->base.u.tex.first_layer = surf_tmpl->u.tex.first_layer;
|
||||
surface->base.u.tex.last_layer = surf_tmpl->u.tex.last_layer;
|
||||
surface->base.u.tex.level = level;
|
||||
|
||||
return &surface->base;
|
||||
}
|
||||
|
||||
static void r600_surface_destroy(struct pipe_context *pipe,
|
||||
struct pipe_surface *surface)
|
||||
{
|
||||
pipe_resource_reference(&surface->texture, NULL);
|
||||
FREE(surface);
|
||||
}
|
||||
|
||||
void si_init_state_functions(struct r600_context *rctx)
|
||||
{
|
||||
int i;
|
||||
@@ -2980,6 +3016,8 @@ void si_init_state_functions(struct r600_context *rctx)
|
||||
|
||||
rctx->b.b.texture_barrier = si_texture_barrier;
|
||||
rctx->b.b.set_polygon_stipple = si_set_polygon_stipple;
|
||||
rctx->b.b.create_surface = r600_create_surface;
|
||||
rctx->b.b.surface_destroy = r600_surface_destroy;
|
||||
|
||||
rctx->b.b.draw_vbo = si_draw_vbo;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user