gallium: make image views non-persistent objects
Make them akin to shader buffers, with no refcounting/etc. Just used to pass data about the bound image in ->set_shader_images. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -173,17 +173,6 @@ pipe_sampler_view_release(struct pipe_context *ctx,
|
||||
*ptr = NULL;
|
||||
}
|
||||
|
||||
static inline void
|
||||
pipe_image_view_reference(struct pipe_image_view **ptr, struct pipe_image_view *view)
|
||||
{
|
||||
struct pipe_image_view *old_view = *ptr;
|
||||
|
||||
if (pipe_reference_described(&(*ptr)->reference, &view->reference,
|
||||
(debug_reference_descriptor)debug_describe_image_view))
|
||||
old_view->context->image_view_destroy(old_view->context, old_view);
|
||||
*ptr = view;
|
||||
}
|
||||
|
||||
static inline void
|
||||
pipe_so_target_reference(struct pipe_stream_output_target **ptr,
|
||||
struct pipe_stream_output_target *target)
|
||||
|
||||
@@ -415,30 +415,6 @@ dd_context_sampler_view_destroy(struct pipe_context *_pipe,
|
||||
pipe->sampler_view_destroy(pipe, view);
|
||||
}
|
||||
|
||||
static struct pipe_image_view *
|
||||
dd_context_create_image_view(struct pipe_context *_pipe,
|
||||
struct pipe_resource *resource,
|
||||
const struct pipe_image_view *templ)
|
||||
{
|
||||
struct pipe_context *pipe = dd_context(_pipe)->pipe;
|
||||
struct pipe_image_view *view =
|
||||
pipe->create_image_view(pipe, resource, templ);
|
||||
|
||||
if (!view)
|
||||
return NULL;
|
||||
view->context = _pipe;
|
||||
return view;
|
||||
}
|
||||
|
||||
static void
|
||||
dd_context_image_view_destroy(struct pipe_context *_pipe,
|
||||
struct pipe_image_view *view)
|
||||
{
|
||||
struct pipe_context *pipe = dd_context(_pipe)->pipe;
|
||||
|
||||
pipe->image_view_destroy(pipe, view);
|
||||
}
|
||||
|
||||
static struct pipe_stream_output_target *
|
||||
dd_context_create_stream_output_target(struct pipe_context *_pipe,
|
||||
struct pipe_resource *res,
|
||||
@@ -486,7 +462,7 @@ dd_context_set_sampler_views(struct pipe_context *_pipe, unsigned shader,
|
||||
static void
|
||||
dd_context_set_shader_images(struct pipe_context *_pipe, unsigned shader,
|
||||
unsigned start, unsigned num,
|
||||
struct pipe_image_view **views)
|
||||
struct pipe_image_view *views)
|
||||
{
|
||||
struct dd_context *dctx = dd_context(_pipe);
|
||||
struct pipe_context *pipe = dctx->pipe;
|
||||
@@ -744,8 +720,6 @@ dd_context_create(struct dd_screen *dscreen, struct pipe_context *pipe)
|
||||
CTX_INIT(sampler_view_destroy);
|
||||
CTX_INIT(create_surface);
|
||||
CTX_INIT(surface_destroy);
|
||||
CTX_INIT(create_image_view);
|
||||
CTX_INIT(image_view_destroy);
|
||||
CTX_INIT(transfer_map);
|
||||
CTX_INIT(transfer_flush_region);
|
||||
CTX_INIT(transfer_unmap);
|
||||
|
||||
@@ -94,7 +94,7 @@ struct dd_context
|
||||
struct pipe_constant_buffer constant_buffers[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS];
|
||||
struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
|
||||
struct dd_state *sampler_states[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
|
||||
struct pipe_image_view *shader_images[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_IMAGES];
|
||||
struct pipe_image_view shader_images[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_IMAGES];
|
||||
struct pipe_shader_buffer shader_buffers[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_BUFFERS];
|
||||
|
||||
struct dd_state *velems;
|
||||
|
||||
@@ -1851,7 +1851,7 @@ ilo_set_sampler_views(struct pipe_context *pipe, unsigned shader,
|
||||
static void
|
||||
ilo_set_shader_images(struct pipe_context *pipe, unsigned shader,
|
||||
unsigned start, unsigned count,
|
||||
struct pipe_image_view **views)
|
||||
struct pipe_image_view *views)
|
||||
{
|
||||
#if 0
|
||||
struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
|
||||
|
||||
@@ -1231,7 +1231,7 @@ nvc0_set_compute_resources(struct pipe_context *pipe,
|
||||
static void
|
||||
nvc0_set_shader_images(struct pipe_context *pipe, unsigned shader,
|
||||
unsigned start_slot, unsigned count,
|
||||
struct pipe_image_view **views)
|
||||
struct pipe_image_view *views)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -313,14 +313,14 @@ struct pipe_context {
|
||||
* \param shader selects shader stage
|
||||
* \param start_slot first image slot to bind.
|
||||
* \param count number of consecutive images to bind.
|
||||
* \param buffers array of pointers to the images to bind, it
|
||||
* \param buffers array of the images to bind, it
|
||||
* should contain at least \a count elements
|
||||
* unless it's NULL, in which case no images will
|
||||
* be bound.
|
||||
*/
|
||||
void (*set_shader_images)(struct pipe_context *, unsigned shader,
|
||||
unsigned start_slot, unsigned count,
|
||||
struct pipe_image_view **images);
|
||||
struct pipe_image_view *images);
|
||||
|
||||
void (*set_vertex_buffers)( struct pipe_context *,
|
||||
unsigned start_slot,
|
||||
@@ -478,16 +478,6 @@ struct pipe_context {
|
||||
void (*surface_destroy)(struct pipe_context *ctx,
|
||||
struct pipe_surface *);
|
||||
|
||||
/**
|
||||
* Create an image view into a buffer or texture to be used with load,
|
||||
* store, and atomic instructions by a shader stage.
|
||||
*/
|
||||
struct pipe_image_view * (*create_image_view)(struct pipe_context *ctx,
|
||||
struct pipe_resource *texture,
|
||||
const struct pipe_image_view *templat);
|
||||
|
||||
void (*image_view_destroy)(struct pipe_context *ctx,
|
||||
struct pipe_image_view *view);
|
||||
|
||||
/**
|
||||
* Map a resource.
|
||||
|
||||
@@ -393,14 +393,12 @@ struct pipe_sampler_view
|
||||
|
||||
|
||||
/**
|
||||
* A view into a writable buffer or texture that can be bound to a shader
|
||||
* A description of a writable buffer or texture that can be bound to a shader
|
||||
* stage.
|
||||
*/
|
||||
struct pipe_image_view
|
||||
{
|
||||
struct pipe_reference reference;
|
||||
struct pipe_resource *resource; /**< resource into which this is a view */
|
||||
struct pipe_context *context; /**< context this view belongs to */
|
||||
enum pipe_format format; /**< typed PIPE_FORMAT_x */
|
||||
|
||||
union {
|
||||
|
||||
Reference in New Issue
Block a user