-static INLINE void *
-trace_context_create_fs_state(struct pipe_context *_pipe,
- const struct pipe_shader_state *state)
-{
- struct trace_context *tr_ctx = trace_context(_pipe);
- struct pipe_context *pipe = tr_ctx->pipe;
- void * result;
-
- trace_dump_call_begin("pipe_context", "create_fs_state");
-
- trace_dump_arg(ptr, pipe);
- trace_dump_arg(shader_state, state);
-
- result = pipe->create_fs_state(pipe, state);
-
- trace_dump_ret(ptr, result);
-
- trace_dump_call_end();
-
- result = trace_shader_create(tr_ctx, state, result, TRACE_SHADER_FRAGMENT);
-
- return result;
-}
-
-
-static INLINE void
-trace_context_bind_fs_state(struct pipe_context *_pipe,
- void *_state)
-{
- struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_shader *tr_shdr = trace_shader(_state);
- struct pipe_context *pipe = tr_ctx->pipe;
- void *state = tr_shdr ? tr_shdr->state : NULL;
-
- trace_dump_call_begin("pipe_context", "bind_fs_state");
-
- trace_dump_arg(ptr, pipe);
- trace_dump_arg(ptr, state);
-
- tr_ctx->curr.fs = tr_shdr;
-
- if (tr_shdr && tr_shdr->replaced)
- state = tr_shdr->replaced;
-
- pipe->bind_fs_state(pipe, state);
-
- trace_dump_call_end();
-}
-
-
-static INLINE void
-trace_context_delete_fs_state(struct pipe_context *_pipe,
- void *_state)
-{
- struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_shader *tr_shdr = trace_shader(_state);
- struct pipe_context *pipe = tr_ctx->pipe;
- void *state = tr_shdr->state;
-
- trace_dump_call_begin("pipe_context", "delete_fs_state");
-
- trace_dump_arg(ptr, pipe);
- trace_dump_arg(ptr, state);
-
- pipe->delete_fs_state(pipe, state);
-
- trace_dump_call_end();
-
- trace_shader_destroy(tr_ctx, tr_shdr);
-}
-
-
-static INLINE void *
-trace_context_create_vs_state(struct pipe_context *_pipe,
- const struct pipe_shader_state *state)
-{
- struct trace_context *tr_ctx = trace_context(_pipe);
- struct pipe_context *pipe = tr_ctx->pipe;
- void * result;
-
- trace_dump_call_begin("pipe_context", "create_vs_state");
-
- trace_dump_arg(ptr, pipe);
- trace_dump_arg(shader_state, state);
-
- result = pipe->create_vs_state(pipe, state);
-
- trace_dump_ret(ptr, result);
-
- trace_dump_call_end();
-
- result = trace_shader_create(tr_ctx, state, result, TRACE_SHADER_VERTEX);
-
- return result;
-}
-
-
-static INLINE void
-trace_context_bind_vs_state(struct pipe_context *_pipe,
- void *_state)
-{
- struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_shader *tr_shdr = trace_shader(_state);
- struct pipe_context *pipe = tr_ctx->pipe;
- void *state = tr_shdr ? tr_shdr->state : NULL;
-
- trace_dump_call_begin("pipe_context", "bind_vs_state");
-
- trace_dump_arg(ptr, pipe);
- trace_dump_arg(ptr, state);
-
- tr_ctx->curr.vs = tr_shdr;
-
- if (tr_shdr && tr_shdr->replaced)
- state = tr_shdr->replaced;
-
- pipe->bind_vs_state(pipe, state);
-
- trace_dump_call_end();
-}
-
-
-static INLINE void
-trace_context_delete_vs_state(struct pipe_context *_pipe,
- void *_state)
-{
- struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_shader *tr_shdr = trace_shader(_state);
- struct pipe_context *pipe = tr_ctx->pipe;
- void *state = tr_shdr->state;
-
- trace_dump_call_begin("pipe_context", "delete_vs_state");
-
- trace_dump_arg(ptr, pipe);
- trace_dump_arg(ptr, state);
-
- pipe->delete_vs_state(pipe, state);
+#define TRACE_SHADER_STATE(shader_type) \
+ static INLINE void * \
+ trace_context_create_##shader_type##_state(struct pipe_context *_pipe, \
+ const struct pipe_shader_state *state) \
+ { \
+ struct trace_context *tr_ctx = trace_context(_pipe); \
+ struct pipe_context *pipe = tr_ctx->pipe; \
+ void * result; \
+ trace_dump_call_begin("pipe_context", "create_" #shader_type "_state"); \
+ trace_dump_arg(ptr, pipe); \
+ trace_dump_arg(shader_state, state); \
+ result = pipe->create_##shader_type##_state(pipe, state); \
+ trace_dump_ret(ptr, result); \
+ trace_dump_call_end(); \
+ return result; \
+ } \
+ \
+ static INLINE void \
+ trace_context_bind_##shader_type##_state(struct pipe_context *_pipe, \
+ void *state) \
+ { \
+ struct trace_context *tr_ctx = trace_context(_pipe); \
+ struct pipe_context *pipe = tr_ctx->pipe; \
+ trace_dump_call_begin("pipe_context", "bind_" #shader_type "_state"); \
+ trace_dump_arg(ptr, pipe); \
+ trace_dump_arg(ptr, state); \
+ pipe->bind_##shader_type##_state(pipe, state); \
+ trace_dump_call_end(); \
+ } \
+ \
+ static INLINE void \
+ trace_context_delete_##shader_type##_state(struct pipe_context *_pipe, \
+ void *state) \
+ { \
+ struct trace_context *tr_ctx = trace_context(_pipe); \
+ struct pipe_context *pipe = tr_ctx->pipe; \
+ trace_dump_call_begin("pipe_context", "delete_" #shader_type "_state"); \
+ trace_dump_arg(ptr, pipe); \
+ trace_dump_arg(ptr, state); \
+ pipe->delete_##shader_type##_state(pipe, state); \
+ trace_dump_call_end(); \
+ }