X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fidentity%2Fid_context.c;h=97b39671fce71a33cd6e620a031dcc55bc23cb50;hb=43e4b3e311df3bede930229380a7aa389ac7019a;hp=2d47296f230df969f5c9a5361299a5a654d8a461;hpb=7435c043988dd83b430f3d3a7ca5a5a1b2f30d61;p=mesa.git diff --git a/src/gallium/drivers/identity/id_context.c b/src/gallium/drivers/identity/id_context.c index 2d47296f230..97b39671fce 100644 --- a/src/gallium/drivers/identity/id_context.c +++ b/src/gallium/drivers/identity/id_context.c @@ -57,13 +57,15 @@ identity_draw_vbo(struct pipe_context *_pipe, static struct pipe_query * identity_create_query(struct pipe_context *_pipe, - unsigned query_type) + unsigned query_type, + unsigned index) { struct identity_context *id_pipe = identity_context(_pipe); struct pipe_context *pipe = id_pipe->pipe; return pipe->create_query(pipe, - query_type); + query_type, + index); } static void @@ -159,29 +161,16 @@ identity_create_sampler_state(struct pipe_context *_pipe, } static void -identity_bind_fragment_sampler_states(struct pipe_context *_pipe, - unsigned num_samplers, - void **samplers) +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; - pipe->bind_fragment_sampler_states(pipe, - num_samplers, - samplers); -} - -static void -identity_bind_vertex_sampler_states(struct pipe_context *_pipe, - unsigned num_samplers, - void **samplers) -{ - struct identity_context *id_pipe = identity_context(_pipe); - struct pipe_context *pipe = id_pipe->pipe; - - pipe->bind_vertex_sampler_states(pipe, - num_samplers, - samplers); + pipe->bind_sampler_states(pipe, shader, start, num_samplers, samplers); } static void @@ -466,76 +455,50 @@ identity_set_polygon_stipple(struct pipe_context *_pipe, } static void -identity_set_scissor_state(struct pipe_context *_pipe, - const struct pipe_scissor_state *scissor) +identity_set_scissor_states(struct pipe_context *_pipe, + unsigned start_slot, + unsigned num_scissors, + const struct pipe_scissor_state *scissor) { struct identity_context *id_pipe = identity_context(_pipe); struct pipe_context *pipe = id_pipe->pipe; - pipe->set_scissor_state(pipe, - scissor); + pipe->set_scissor_states(pipe, start_slot, num_scissors, scissor); } static void -identity_set_viewport_state(struct pipe_context *_pipe, - const struct pipe_viewport_state *viewport) +identity_set_viewport_states(struct pipe_context *_pipe, + unsigned start_slot, + unsigned num_viewports, + const struct pipe_viewport_state *viewport) { struct identity_context *id_pipe = identity_context(_pipe); struct pipe_context *pipe = id_pipe->pipe; - pipe->set_viewport_state(pipe, - viewport); + pipe->set_viewport_states(pipe, start_slot, num_viewports, viewport); } static void -identity_set_fragment_sampler_views(struct pipe_context *_pipe, - unsigned num, - struct pipe_sampler_view **_views) +identity_set_sampler_views(struct pipe_context *_pipe, + unsigned shader, + unsigned start, + unsigned num, + struct pipe_sampler_view **_views) { struct identity_context *id_pipe = identity_context(_pipe); struct pipe_context *pipe = id_pipe->pipe; - struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS]; - struct pipe_sampler_view **views = NULL; + struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SHADER_SAMPLER_VIEWS]; unsigned i; - if (_views) { - for (i = 0; i < num; i++) - unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]); - for (; i < PIPE_MAX_SAMPLERS; i++) - unwrapped_views[i] = NULL; - - views = unwrapped_views; - } + for (i = 0; i < num; i++) + unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]); - pipe->set_fragment_sampler_views(pipe, num, views); -} - -static void -identity_set_vertex_sampler_views(struct pipe_context *_pipe, - unsigned num, - struct pipe_sampler_view **_views) -{ - struct identity_context *id_pipe = identity_context(_pipe); - struct pipe_context *pipe = id_pipe->pipe; - struct pipe_sampler_view *unwrapped_views[PIPE_MAX_VERTEX_SAMPLERS]; - struct pipe_sampler_view **views = NULL; - unsigned i; - - if (_views) { - for (i = 0; i < num; i++) - unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]); - for (; i < PIPE_MAX_VERTEX_SAMPLERS; i++) - unwrapped_views[i] = NULL; - - views = unwrapped_views; - } - - pipe->set_vertex_sampler_views(pipe, num, views); + pipe->set_sampler_views(pipe, shader, start, num, unwrapped_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); @@ -552,7 +515,7 @@ identity_set_vertex_buffers(struct pipe_context *_pipe, } pipe->set_vertex_buffers(pipe, - num_buffers, + start_slot, num_buffers, buffers); } @@ -602,6 +565,30 @@ 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_flush_resource(struct pipe_context *_pipe, + struct pipe_resource *resource) +{ + struct identity_context *id_pipe = identity_context(_pipe); + struct pipe_context *pipe = id_pipe->pipe; + + pipe->flush_resource(pipe, resource); +} + static void identity_clear(struct pipe_context *_pipe, unsigned buffers, @@ -667,13 +654,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, + unsigned 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 * @@ -732,53 +719,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); - - if (result) - return identity_transfer_create(id_context, id_resource, result); - return NULL; -} + map = context->transfer_map(context, + resource, + level, + usage, + box, &result); -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, @@ -806,6 +774,9 @@ identity_context_transfer_unmap(struct pipe_context *_context, context->transfer_unmap(context, transfer); + + identity_transfer_destroy(identity_context(_context), + identity_transfer(_transfer)); } @@ -861,8 +832,7 @@ identity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe) id_pipe->base.bind_blend_state = identity_bind_blend_state; id_pipe->base.delete_blend_state = identity_delete_blend_state; id_pipe->base.create_sampler_state = identity_create_sampler_state; - id_pipe->base.bind_fragment_sampler_states = identity_bind_fragment_sampler_states; - id_pipe->base.bind_vertex_sampler_states = identity_bind_vertex_sampler_states; + id_pipe->base.bind_sampler_states = identity_bind_sampler_states; id_pipe->base.delete_sampler_state = identity_delete_sampler_state; id_pipe->base.create_rasterizer_state = identity_create_rasterizer_state; id_pipe->base.bind_rasterizer_state = identity_bind_rasterizer_state; @@ -886,10 +856,9 @@ identity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe) id_pipe->base.set_constant_buffer = identity_set_constant_buffer; id_pipe->base.set_framebuffer_state = identity_set_framebuffer_state; id_pipe->base.set_polygon_stipple = identity_set_polygon_stipple; - id_pipe->base.set_scissor_state = identity_set_scissor_state; - id_pipe->base.set_viewport_state = identity_set_viewport_state; - id_pipe->base.set_fragment_sampler_views = identity_set_fragment_sampler_views; - id_pipe->base.set_vertex_sampler_views = identity_set_vertex_sampler_views; + id_pipe->base.set_scissor_states = identity_set_scissor_states; + id_pipe->base.set_viewport_states = identity_set_viewport_states; + id_pipe->base.set_sampler_views = identity_set_sampler_views; id_pipe->base.set_vertex_buffers = identity_set_vertex_buffers; id_pipe->base.set_index_buffer = identity_set_index_buffer; id_pipe->base.resource_copy_region = identity_resource_copy_region; @@ -901,12 +870,12 @@ 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->base.flush_resource = identity_flush_resource; id_pipe->pipe = pipe;