mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
i915g: Use slab allocator for transfers
Also remove unused i915_transfer struct
This commit is contained in:
parent
484edfc815
commit
7287964f94
5 changed files with 55 additions and 21 deletions
|
|
@ -140,6 +140,10 @@ i915_create_context(struct pipe_screen *screen, void *priv)
|
|||
|
||||
i915->base.draw_vbo = i915_draw_vbo;
|
||||
|
||||
/* init this before draw */
|
||||
util_slab_create(&i915->transfer_pool, sizeof(struct pipe_transfer),
|
||||
16, UTIL_SLAB_SINGLETHREADED);
|
||||
|
||||
/*
|
||||
* Create drawing context and plug our rendering stage into it.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@
|
|||
|
||||
#include "tgsi/tgsi_scan.h"
|
||||
|
||||
#include "util/u_slab.h"
|
||||
|
||||
|
||||
struct i915_winsys;
|
||||
struct i915_winsys_buffer;
|
||||
|
|
@ -237,6 +239,8 @@ struct i915_context {
|
|||
|
||||
struct i915_state current;
|
||||
unsigned hardware_dirty;
|
||||
|
||||
struct util_slab_mempool transfer_pool;
|
||||
};
|
||||
|
||||
/* A flag for each state_tracker state object:
|
||||
|
|
|
|||
|
|
@ -60,6 +60,38 @@ i915_buffer_destroy(struct pipe_screen *screen,
|
|||
}
|
||||
|
||||
|
||||
static struct pipe_transfer *
|
||||
i915_get_transfer(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box)
|
||||
{
|
||||
struct i915_context *i915 = i915_context(pipe);
|
||||
struct pipe_transfer *transfer = util_slab_alloc(&i915->transfer_pool);
|
||||
|
||||
if (transfer == NULL)
|
||||
return NULL;
|
||||
|
||||
transfer->resource = resource;
|
||||
transfer->level = level;
|
||||
transfer->usage = usage;
|
||||
transfer->box = *box;
|
||||
|
||||
/* Note strides are zero, this is ok for buffers, but not for
|
||||
* textures 2d & higher at least.
|
||||
*/
|
||||
return transfer;
|
||||
}
|
||||
|
||||
static void
|
||||
i915_transfer_destroy(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
struct i915_context *i915 = i915_context(pipe);
|
||||
util_slab_free(&i915->transfer_pool, transfer);
|
||||
}
|
||||
|
||||
static void *
|
||||
i915_buffer_transfer_map( struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer )
|
||||
|
|
@ -92,8 +124,8 @@ struct u_resource_vtbl i915_buffer_vtbl =
|
|||
i915_buffer_get_handle, /* get_handle */
|
||||
i915_buffer_destroy, /* resource_destroy */
|
||||
NULL, /* is_resource_referenced */
|
||||
u_default_get_transfer, /* get_transfer */
|
||||
u_default_transfer_destroy, /* transfer_destroy */
|
||||
i915_get_transfer, /* get_transfer */
|
||||
i915_transfer_destroy, /* transfer_destroy */
|
||||
i915_buffer_transfer_map, /* transfer_map */
|
||||
u_default_transfer_flush_region, /* transfer_flush_region */
|
||||
u_default_transfer_unmap, /* transfer_unmap */
|
||||
|
|
|
|||
|
|
@ -716,14 +716,16 @@ i915_texture_destroy(struct pipe_screen *screen,
|
|||
}
|
||||
|
||||
static struct pipe_transfer *
|
||||
i915_texture_get_transfer(struct pipe_context *context,
|
||||
i915_texture_get_transfer(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box)
|
||||
{
|
||||
struct i915_context *i915 = i915_context(pipe);
|
||||
struct i915_texture *tex = i915_texture(resource);
|
||||
struct pipe_transfer *transfer = CALLOC_STRUCT(pipe_transfer);
|
||||
struct pipe_transfer *transfer = util_slab_alloc(&i915->transfer_pool);
|
||||
|
||||
if (transfer == NULL)
|
||||
return NULL;
|
||||
|
||||
|
|
@ -737,6 +739,14 @@ i915_texture_get_transfer(struct pipe_context *context,
|
|||
return transfer;
|
||||
}
|
||||
|
||||
static void
|
||||
i915_transfer_destroy(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
struct i915_context *i915 = i915_context(pipe);
|
||||
util_slab_free(&i915->transfer_pool, transfer);
|
||||
}
|
||||
|
||||
static void *
|
||||
i915_texture_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer)
|
||||
|
|
@ -781,7 +791,7 @@ struct u_resource_vtbl i915_texture_vtbl =
|
|||
i915_texture_destroy, /* resource_destroy */
|
||||
NULL, /* is_resource_referenced */
|
||||
i915_texture_get_transfer, /* get_transfer */
|
||||
u_default_transfer_destroy, /* transfer_destroy */
|
||||
i915_transfer_destroy, /* transfer_destroy */
|
||||
i915_texture_transfer_map, /* transfer_map */
|
||||
u_default_transfer_flush_region, /* transfer_flush_region */
|
||||
i915_texture_transfer_unmap, /* transfer_unmap */
|
||||
|
|
|
|||
|
|
@ -47,16 +47,6 @@ struct i915_screen
|
|||
boolean is_i945;
|
||||
};
|
||||
|
||||
/**
|
||||
* Subclass of pipe_transfer
|
||||
*/
|
||||
struct i915_transfer
|
||||
{
|
||||
struct pipe_transfer base;
|
||||
|
||||
unsigned offset;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Cast wrappers
|
||||
|
|
@ -69,11 +59,5 @@ i915_screen(struct pipe_screen *pscreen)
|
|||
return (struct i915_screen *) pscreen;
|
||||
}
|
||||
|
||||
static INLINE struct i915_transfer *
|
||||
i915_transfer(struct pipe_transfer *transfer)
|
||||
{
|
||||
return (struct i915_transfer *)transfer;
|
||||
}
|
||||
|
||||
|
||||
#endif /* I915_SCREEN_H */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue