#include "pipe/p_context.h"
#include "util/u_memory.h"
#include "util/u_inlines.h"
-#include "util/u_simple_list.h"
+#include "util/simple_list.h"
#include "rbug/rbug_context.h"
static void
rbug_destroy(struct pipe_context *_pipe)
{
+ struct rbug_screen *rb_screen = rbug_screen(_pipe->screen);
struct rbug_context *rb_pipe = rbug_context(_pipe);
struct pipe_context *pipe = rb_pipe->pipe;
- remove_from_list(&rb_pipe->list);
+ rbug_screen_remove_from_list(rb_screen, contexts, rb_pipe);
+
pipe_mutex_lock(rb_pipe->call_mutex);
pipe->destroy(pipe);
rb_pipe->pipe = NULL;
static struct pipe_query *
rbug_create_query(struct pipe_context *_pipe,
- unsigned query_type)
+ unsigned query_type,
+ unsigned index)
{
struct rbug_context *rb_pipe = rbug_context(_pipe);
struct pipe_context *pipe = rb_pipe->pipe;
+ struct pipe_query *query;
pipe_mutex_lock(rb_pipe->call_mutex);
- return pipe->create_query(pipe,
- query_type);
+ query = pipe->create_query(pipe,
+ query_type,
+ index);
pipe_mutex_unlock(rb_pipe->call_mutex);
+ return query;
}
static void
pipe_mutex_unlock(rb_pipe->call_mutex);
}
-static void
+static boolean
rbug_begin_query(struct pipe_context *_pipe,
struct pipe_query *query)
{
struct rbug_context *rb_pipe = rbug_context(_pipe);
struct pipe_context *pipe = rb_pipe->pipe;
+ boolean ret;
pipe_mutex_lock(rb_pipe->call_mutex);
- pipe->begin_query(pipe,
- query);
+ ret = pipe->begin_query(pipe, query);
pipe_mutex_unlock(rb_pipe->call_mutex);
+ return ret;
}
static void
struct pipe_context *pipe = rb_pipe->pipe;
pipe_mutex_lock(rb_pipe->call_mutex);
- if (pipe->bind_sampler_states) {
- pipe->bind_sampler_states(pipe, shader, start, count, samplers);
- }
- else {
- assert(start == 0);
- switch (shader) {
- case PIPE_SHADER_VERTEX:
- pipe->bind_vertex_sampler_states(pipe, count, samplers);
- break;
- case PIPE_SHADER_FRAGMENT:
- pipe->bind_fragment_sampler_states(pipe, count, samplers);
- break;
- case PIPE_SHADER_GEOMETRY:
- pipe->bind_geometry_sampler_states(pipe, count, samplers);
- break;
- default:
- ;
- }
- }
-
- pipe_mutex_unlock(rb_pipe->call_mutex);
-}
-
-
-static void
-rbug_bind_fragment_sampler_states(struct pipe_context *_pipe,
- unsigned num_samplers,
- void **samplers)
-{
- struct rbug_context *rb_pipe = rbug_context(_pipe);
- struct pipe_context *pipe = rb_pipe->pipe;
-
- pipe_mutex_lock(rb_pipe->call_mutex);
- pipe->bind_fragment_sampler_states(pipe,
- num_samplers,
- samplers);
- pipe_mutex_unlock(rb_pipe->call_mutex);
-}
-
-static void
-rbug_bind_vertex_sampler_states(struct pipe_context *_pipe,
- unsigned num_samplers,
- void **samplers)
-{
- struct rbug_context *rb_pipe = rbug_context(_pipe);
- struct pipe_context *pipe = rb_pipe->pipe;
-
- pipe_mutex_lock(rb_pipe->call_mutex);
- pipe->bind_vertex_sampler_states(pipe,
- num_samplers,
- samplers);
+ pipe->bind_sampler_states(pipe, shader, start, count, samplers);
pipe_mutex_unlock(rb_pipe->call_mutex);
}
{
struct rbug_context *rb_pipe = rbug_context(_pipe);
struct pipe_context *pipe = rb_pipe->pipe;
- struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS];
+ struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SHADER_SAMPLER_VIEWS];
struct pipe_sampler_view **views = NULL;
unsigned i;
views = unwrapped_views;
}
- switch (shader) {
- case PIPE_SHADER_VERTEX:
- pipe->set_vertex_sampler_views(pipe, num, views);
- break;
- case PIPE_SHADER_FRAGMENT:
- pipe->set_fragment_sampler_views(pipe, num, views);
- break;
- default:
- assert(0);
- }
+ pipe->set_sampler_views(pipe, shader, start, num, views);
pipe_mutex_unlock(rb_pipe->call_mutex);
}
-static void
-rbug_set_vertex_sampler_views(struct pipe_context *_pipe,
- unsigned num,
- struct pipe_sampler_view **_views)
-{
- rbug_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, 0, num, _views);
-}
-
-static void
-rbug_set_fragment_sampler_views(struct pipe_context *_pipe,
- unsigned num,
- struct pipe_sampler_view **_views)
-{
- rbug_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, 0, num, _views);
-}
-
static void
rbug_set_vertex_buffers(struct pipe_context *_pipe,
unsigned start_slot, unsigned num_buffers,
pipe_mutex_lock(rb_pipe->call_mutex);
- if (num_buffers) {
+ if (num_buffers && _buffers) {
memcpy(unwrapped_buffers, _buffers, num_buffers * sizeof(*_buffers));
for (i = 0; i < num_buffers; i++)
unwrapped_buffers[i].buffer = rbug_resource_unwrap(_buffers[i].buffer);
pipe_mutex_unlock(rb_pipe->call_mutex);
}
+static struct pipe_stream_output_target *
+rbug_create_stream_output_target(struct pipe_context *_pipe,
+ struct pipe_resource *_res,
+ unsigned buffer_offset, unsigned buffer_size)
+{
+ struct rbug_context *rb_pipe = rbug_context(_pipe);
+ struct pipe_context *pipe = rb_pipe->pipe;
+ struct pipe_resource *res = rbug_resource_unwrap(_res);
+ struct pipe_stream_output_target *target;
+
+ pipe_mutex_lock(rb_pipe->call_mutex);
+ target = pipe->create_stream_output_target(pipe, res, buffer_offset,
+ buffer_size);
+ pipe_mutex_unlock(rb_pipe->call_mutex);
+ return target;
+}
+
+static void
+rbug_stream_output_target_destroy(struct pipe_context *_pipe,
+ struct pipe_stream_output_target *target)
+{
+ struct rbug_context *rb_pipe = rbug_context(_pipe);
+ struct pipe_context *pipe = rb_pipe->pipe;
+
+ pipe_mutex_lock(rb_pipe->call_mutex);
+ pipe->stream_output_target_destroy(pipe, target);
+ pipe_mutex_unlock(rb_pipe->call_mutex);
+}
+
+static void
+rbug_set_stream_output_targets(struct pipe_context *_pipe,
+ unsigned num_targets,
+ struct pipe_stream_output_target **targets,
+ const unsigned *offsets)
+{
+ struct rbug_context *rb_pipe = rbug_context(_pipe);
+ struct pipe_context *pipe = rb_pipe->pipe;
+
+ pipe_mutex_lock(rb_pipe->call_mutex);
+ pipe->set_stream_output_targets(pipe, num_targets, targets, offsets);
+ pipe_mutex_unlock(rb_pipe->call_mutex);
+}
+
static void
rbug_resource_copy_region(struct pipe_context *_pipe,
struct pipe_resource *_dst,
pipe_mutex_unlock(rb_pipe->call_mutex);
}
+static void
+rbug_blit(struct pipe_context *_pipe, const struct pipe_blit_info *_blit_info)
+{
+ struct rbug_context *rb_pipe = rbug_context(_pipe);
+ struct rbug_resource *rb_resource_dst = rbug_resource(_blit_info->dst.resource);
+ struct rbug_resource *rb_resource_src = rbug_resource(_blit_info->src.resource);
+ struct pipe_context *pipe = rb_pipe->pipe;
+ struct pipe_resource *dst = rb_resource_dst->resource;
+ struct pipe_resource *src = rb_resource_src->resource;
+ struct pipe_blit_info blit_info;
+
+ blit_info = *_blit_info;
+ blit_info.dst.resource = dst;
+ blit_info.src.resource = src;
+
+ pipe_mutex_lock(rb_pipe->call_mutex);
+ pipe->blit(pipe, &blit_info);
+ pipe_mutex_unlock(rb_pipe->call_mutex);
+}
+
static void
rbug_flush_resource(struct pipe_context *_pipe,
struct pipe_resource *_res)
rb_pipe->base.delete_blend_state = rbug_delete_blend_state;
rb_pipe->base.create_sampler_state = rbug_create_sampler_state;
rb_pipe->base.bind_sampler_states = rbug_bind_sampler_states;
- rb_pipe->base.bind_fragment_sampler_states = rbug_bind_fragment_sampler_states;
- rb_pipe->base.bind_vertex_sampler_states = rbug_bind_vertex_sampler_states;
rb_pipe->base.delete_sampler_state = rbug_delete_sampler_state;
rb_pipe->base.create_rasterizer_state = rbug_create_rasterizer_state;
rb_pipe->base.bind_rasterizer_state = rbug_bind_rasterizer_state;
rb_pipe->base.set_polygon_stipple = rbug_set_polygon_stipple;
rb_pipe->base.set_scissor_states = rbug_set_scissor_states;
rb_pipe->base.set_viewport_states = rbug_set_viewport_states;
- rb_pipe->base.set_fragment_sampler_views = rbug_set_fragment_sampler_views;
- rb_pipe->base.set_vertex_sampler_views = rbug_set_vertex_sampler_views;
+ rb_pipe->base.set_sampler_views = rbug_set_sampler_views;
rb_pipe->base.set_vertex_buffers = rbug_set_vertex_buffers;
rb_pipe->base.set_index_buffer = rbug_set_index_buffer;
rb_pipe->base.set_sample_mask = rbug_set_sample_mask;
+ rb_pipe->base.create_stream_output_target = rbug_create_stream_output_target;
+ rb_pipe->base.stream_output_target_destroy = rbug_stream_output_target_destroy;
+ rb_pipe->base.set_stream_output_targets = rbug_set_stream_output_targets;
rb_pipe->base.resource_copy_region = rbug_resource_copy_region;
+ rb_pipe->base.blit = rbug_blit;
rb_pipe->base.flush_resource = rbug_flush_resource;
rb_pipe->base.clear = rbug_clear;
rb_pipe->base.clear_render_target = rbug_clear_render_target;