trace: Implement separate vertex sampler state.
This commit is contained in:
@@ -143,10 +143,16 @@ trace_context_draw_block(struct trace_context *tr_ctx, int flag)
|
||||
for (k = 0; k < tr_ctx->curr.nr_cbufs; k++)
|
||||
if (tr_ctx->draw_rule.surf == tr_ctx->curr.cbufs[k])
|
||||
block = TRUE;
|
||||
if (tr_ctx->draw_rule.tex)
|
||||
if (tr_ctx->draw_rule.tex) {
|
||||
for (k = 0; k < tr_ctx->curr.num_texs; k++)
|
||||
if (tr_ctx->draw_rule.tex == tr_ctx->curr.tex[k])
|
||||
block = TRUE;
|
||||
for (k = 0; k < tr_ctx->curr.num_vert_texs; k++) {
|
||||
if (tr_ctx->draw_rule.tex == tr_ctx->curr.vert_tex[k]) {
|
||||
block = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (block)
|
||||
tr_ctx->draw_blocked |= (flag | 4);
|
||||
@@ -480,8 +486,9 @@ trace_context_create_sampler_state(struct pipe_context *_pipe,
|
||||
|
||||
|
||||
static INLINE void
|
||||
trace_context_bind_sampler_states(struct pipe_context *_pipe,
|
||||
unsigned num_states, void **states)
|
||||
trace_context_bind_fragment_sampler_states(struct pipe_context *_pipe,
|
||||
unsigned num_states,
|
||||
void **states)
|
||||
{
|
||||
struct trace_context *tr_ctx = trace_context(_pipe);
|
||||
struct pipe_context *pipe = tr_ctx->pipe;
|
||||
@@ -498,6 +505,26 @@ trace_context_bind_sampler_states(struct pipe_context *_pipe,
|
||||
}
|
||||
|
||||
|
||||
static INLINE void
|
||||
trace_context_bind_vertex_sampler_states(struct pipe_context *_pipe,
|
||||
unsigned num_states,
|
||||
void **states)
|
||||
{
|
||||
struct trace_context *tr_ctx = trace_context(_pipe);
|
||||
struct pipe_context *pipe = tr_ctx->pipe;
|
||||
|
||||
trace_dump_call_begin("pipe_context", "bind_vertex_sampler_states");
|
||||
|
||||
trace_dump_arg(ptr, pipe);
|
||||
trace_dump_arg(uint, num_states);
|
||||
trace_dump_arg_array(ptr, states, num_states);
|
||||
|
||||
pipe->bind_vertex_sampler_states(pipe, num_states, states);
|
||||
|
||||
trace_dump_call_end();
|
||||
}
|
||||
|
||||
|
||||
static INLINE void
|
||||
trace_context_delete_sampler_state(struct pipe_context *_pipe,
|
||||
void *state)
|
||||
@@ -941,9 +968,9 @@ trace_context_set_viewport_state(struct pipe_context *_pipe,
|
||||
|
||||
|
||||
static INLINE void
|
||||
trace_context_set_sampler_textures(struct pipe_context *_pipe,
|
||||
unsigned num_textures,
|
||||
struct pipe_texture **textures)
|
||||
trace_context_set_fragment_sampler_textures(struct pipe_context *_pipe,
|
||||
unsigned num_textures,
|
||||
struct pipe_texture **textures)
|
||||
{
|
||||
struct trace_context *tr_ctx = trace_context(_pipe);
|
||||
struct trace_texture *tr_tex;
|
||||
@@ -971,6 +998,37 @@ trace_context_set_sampler_textures(struct pipe_context *_pipe,
|
||||
}
|
||||
|
||||
|
||||
static INLINE void
|
||||
trace_context_set_vertex_sampler_textures(struct pipe_context *_pipe,
|
||||
unsigned num_textures,
|
||||
struct pipe_texture **textures)
|
||||
{
|
||||
struct trace_context *tr_ctx = trace_context(_pipe);
|
||||
struct trace_texture *tr_tex;
|
||||
struct pipe_context *pipe = tr_ctx->pipe;
|
||||
struct pipe_texture *unwrapped_textures[PIPE_MAX_VERTEX_SAMPLERS];
|
||||
unsigned i;
|
||||
|
||||
tr_ctx->curr.num_vert_texs = num_textures;
|
||||
for(i = 0; i < num_textures; ++i) {
|
||||
tr_tex = trace_texture(textures[i]);
|
||||
tr_ctx->curr.vert_tex[i] = tr_tex;
|
||||
unwrapped_textures[i] = tr_tex ? tr_tex->texture : NULL;
|
||||
}
|
||||
textures = unwrapped_textures;
|
||||
|
||||
trace_dump_call_begin("pipe_context", "set_vertex_sampler_textures");
|
||||
|
||||
trace_dump_arg(ptr, pipe);
|
||||
trace_dump_arg(uint, num_textures);
|
||||
trace_dump_arg_array(ptr, textures, num_textures);
|
||||
|
||||
pipe->set_vertex_sampler_textures(pipe, num_textures, textures);
|
||||
|
||||
trace_dump_call_end();
|
||||
}
|
||||
|
||||
|
||||
static INLINE void
|
||||
trace_context_set_vertex_buffers(struct pipe_context *_pipe,
|
||||
unsigned num_buffers,
|
||||
@@ -1253,7 +1311,8 @@ trace_context_create(struct pipe_screen *_screen,
|
||||
tr_ctx->base.bind_blend_state = trace_context_bind_blend_state;
|
||||
tr_ctx->base.delete_blend_state = trace_context_delete_blend_state;
|
||||
tr_ctx->base.create_sampler_state = trace_context_create_sampler_state;
|
||||
tr_ctx->base.bind_fragment_sampler_states = trace_context_bind_sampler_states;
|
||||
tr_ctx->base.bind_fragment_sampler_states = trace_context_bind_fragment_sampler_states;
|
||||
tr_ctx->base.bind_vertex_sampler_states = trace_context_bind_vertex_sampler_states;
|
||||
tr_ctx->base.delete_sampler_state = trace_context_delete_sampler_state;
|
||||
tr_ctx->base.create_rasterizer_state = trace_context_create_rasterizer_state;
|
||||
tr_ctx->base.bind_rasterizer_state = trace_context_bind_rasterizer_state;
|
||||
@@ -1274,7 +1333,8 @@ trace_context_create(struct pipe_screen *_screen,
|
||||
tr_ctx->base.set_polygon_stipple = trace_context_set_polygon_stipple;
|
||||
tr_ctx->base.set_scissor_state = trace_context_set_scissor_state;
|
||||
tr_ctx->base.set_viewport_state = trace_context_set_viewport_state;
|
||||
tr_ctx->base.set_fragment_sampler_textures = trace_context_set_sampler_textures;
|
||||
tr_ctx->base.set_fragment_sampler_textures = trace_context_set_fragment_sampler_textures;
|
||||
tr_ctx->base.set_vertex_sampler_textures = trace_context_set_vertex_sampler_textures;
|
||||
tr_ctx->base.set_vertex_buffers = trace_context_set_vertex_buffers;
|
||||
tr_ctx->base.set_vertex_elements = trace_context_set_vertex_elements;
|
||||
if (pipe->surface_copy)
|
||||
|
||||
@@ -54,6 +54,9 @@ struct trace_context
|
||||
struct trace_texture *tex[PIPE_MAX_SAMPLERS];
|
||||
unsigned num_texs;
|
||||
|
||||
struct trace_texture *vert_tex[PIPE_MAX_VERTEX_SAMPLERS];
|
||||
unsigned num_vert_texs;
|
||||
|
||||
unsigned nr_cbufs;
|
||||
struct trace_texture *cbufs[PIPE_MAX_COLOR_BUFS];
|
||||
struct trace_texture *zsbuf;
|
||||
|
||||
Reference in New Issue
Block a user