X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fidentity%2Fid_context.c;h=d0b67ef3a975b70c8aa39dd42c986cc41043309f;hb=598cc1f74d7ae924e84dee801b456ab7b0b22f84;hp=026793484db2a184609195b3e8f254413452ec14;hpb=0ad95b923a2bfd91677872765946b6a2f8d11260;p=mesa.git diff --git a/src/gallium/drivers/identity/id_context.c b/src/gallium/drivers/identity/id_context.c index 026793484db..d0b67ef3a97 100644 --- a/src/gallium/drivers/identity/id_context.c +++ b/src/gallium/drivers/identity/id_context.c @@ -161,12 +161,16 @@ identity_create_sampler_state(struct pipe_context *_pipe, static void identity_bind_sampler_states(struct pipe_context *_pipe, unsigned shader, + unsigned start, unsigned num_samplers, void **samplers) { struct identity_context *id_pipe = identity_context(_pipe); struct pipe_context *pipe = id_pipe->pipe; + /* remove this when we have pipe->bind_sampler_states(..., start, ...) */ + assert(start == 0); + switch (shader) { case PIPE_SHADER_VERTEX: pipe->bind_vertex_sampler_states(pipe, num_samplers, samplers); @@ -188,7 +192,7 @@ identity_bind_fragment_sampler_states(struct pipe_context *_pipe, void **samplers) { identity_bind_sampler_states(_pipe, PIPE_SHADER_FRAGMENT, - num_samplers, samplers); + 0, num_samplers, samplers); } static void @@ -197,7 +201,7 @@ identity_bind_vertex_sampler_states(struct pipe_context *_pipe, void **samplers) { identity_bind_sampler_states(_pipe, PIPE_SHADER_VERTEX, - num_samplers, samplers); + 0, num_samplers, samplers); } static void @@ -506,6 +510,7 @@ identity_set_viewport_state(struct pipe_context *_pipe, static void identity_set_sampler_views(struct pipe_context *_pipe, unsigned shader, + unsigned start, unsigned num, struct pipe_sampler_view **_views) { @@ -515,6 +520,9 @@ identity_set_sampler_views(struct pipe_context *_pipe, struct pipe_sampler_view **views = NULL; unsigned i; + /* remove this when we have pipe->set_sampler_views(..., start, ...) */ + assert(start == 0); + if (_views) { for (i = 0; i < num; i++) unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]); @@ -544,7 +552,7 @@ identity_set_fragment_sampler_views(struct pipe_context *_pipe, unsigned num, struct pipe_sampler_view **_views) { - identity_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, num, _views); + identity_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, 0, num, _views); } static void @@ -552,12 +560,12 @@ identity_set_vertex_sampler_views(struct pipe_context *_pipe, unsigned num, struct pipe_sampler_view **_views) { - identity_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, num, _views); + identity_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, 0, num, _views); } static void identity_set_vertex_buffers(struct pipe_context *_pipe, - unsigned num_buffers, + unsigned start_slot, unsigned num_buffers, const struct pipe_vertex_buffer *_buffers) { struct identity_context *id_pipe = identity_context(_pipe); @@ -574,7 +582,7 @@ identity_set_vertex_buffers(struct pipe_context *_pipe, } pipe->set_vertex_buffers(pipe, - num_buffers, + start_slot, num_buffers, buffers); } @@ -624,6 +632,20 @@ identity_resource_copy_region(struct pipe_context *_pipe, src_box); } +static void +identity_blit(struct pipe_context *_pipe, + const struct pipe_blit_info *info) +{ + struct identity_context *id_pipe = identity_context(_pipe); + struct pipe_context *pipe = id_pipe->pipe; + struct pipe_blit_info blit = *info; + + blit.src.resource = identity_resource(blit.src.resource)->resource; + blit.dst.resource = identity_resource(blit.dst.resource)->resource; + + pipe->blit(pipe, &blit); +} + static void identity_clear(struct pipe_context *_pipe, unsigned buffers, @@ -689,13 +711,13 @@ identity_clear_depth_stencil(struct pipe_context *_pipe, static void identity_flush(struct pipe_context *_pipe, - struct pipe_fence_handle **fence) + struct pipe_fence_handle **fence, + enum pipe_flush_flags flags) { struct identity_context *id_pipe = identity_context(_pipe); struct pipe_context *pipe = id_pipe->pipe; - pipe->flush(pipe, - fence); + pipe->flush(pipe, fence, flags); } static struct pipe_sampler_view * @@ -754,53 +776,34 @@ identity_context_surface_destroy(struct pipe_context *_pipe, identity_surface(_surf)); } -static struct pipe_transfer * -identity_context_get_transfer(struct pipe_context *_context, +static void * +identity_context_transfer_map(struct pipe_context *_context, struct pipe_resource *_resource, unsigned level, unsigned usage, - const struct pipe_box *box) + const struct pipe_box *box, + struct pipe_transfer **transfer) { struct identity_context *id_context = identity_context(_context); struct identity_resource *id_resource = identity_resource(_resource); struct pipe_context *context = id_context->pipe; struct pipe_resource *resource = id_resource->resource; struct pipe_transfer *result; + void *map; - result = context->get_transfer(context, - resource, - level, - usage, - box); + map = context->transfer_map(context, + resource, + level, + usage, + box, &result); - if (result) - return identity_transfer_create(id_context, id_resource, result); - return NULL; -} - -static void -identity_context_transfer_destroy(struct pipe_context *_pipe, - struct pipe_transfer *_transfer) -{ - identity_transfer_destroy(identity_context(_pipe), - identity_transfer(_transfer)); -} - -static void * -identity_context_transfer_map(struct pipe_context *_context, - struct pipe_transfer *_transfer) -{ - struct identity_context *id_context = identity_context(_context); - struct identity_transfer *id_transfer = identity_transfer(_transfer); - struct pipe_context *context = id_context->pipe; - struct pipe_transfer *transfer = id_transfer->transfer; + if (!map) + return NULL; - return context->transfer_map(context, - transfer); + *transfer = identity_transfer_map(id_context, id_resource, result); + return *transfer ? map : NULL; } - - static void identity_context_transfer_flush_region(struct pipe_context *_context, struct pipe_transfer *_transfer, @@ -828,6 +831,9 @@ identity_context_transfer_unmap(struct pipe_context *_context, context->transfer_unmap(context, transfer); + + identity_transfer_destroy(identity_context(_context), + identity_transfer(_transfer)); } @@ -923,12 +929,11 @@ identity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe) id_pipe->base.surface_destroy = identity_context_surface_destroy; id_pipe->base.create_sampler_view = identity_context_create_sampler_view; id_pipe->base.sampler_view_destroy = identity_context_sampler_view_destroy; - id_pipe->base.get_transfer = identity_context_get_transfer; - id_pipe->base.transfer_destroy = identity_context_transfer_destroy; id_pipe->base.transfer_map = identity_context_transfer_map; id_pipe->base.transfer_unmap = identity_context_transfer_unmap; id_pipe->base.transfer_flush_region = identity_context_transfer_flush_region; id_pipe->base.transfer_inline_write = identity_context_transfer_inline_write; + id_pipe->base.blit = identity_blit; id_pipe->pipe = pipe;