cso: provide functions to bind fs/vs handles directly

This commit is contained in:
Keith Whitwell 2008-04-21 20:25:47 +01:00
parent c2afa182f3
commit 1dc5e56f3e
2 changed files with 28 additions and 8 deletions

View file

@ -422,6 +422,16 @@ void cso_restore_rasterizer(struct cso_context *ctx)
}
void cso_set_fragment_shader_handle(struct cso_context *ctx,
void *handle )
{
if (ctx->fragment_shader != handle) {
ctx->fragment_shader = handle;
ctx->pipe->bind_fs_state(ctx->pipe, handle);
}
}
void cso_set_fragment_shader(struct cso_context *ctx,
const struct pipe_shader_state *templ)
{
@ -453,10 +463,7 @@ void cso_set_fragment_shader(struct cso_context *ctx,
handle = ((struct cso_fragment_shader *)cso_hash_iter_data(iter))->data;
}
if (ctx->fragment_shader != handle) {
ctx->fragment_shader = handle;
ctx->pipe->bind_fs_state(ctx->pipe, handle);
}
cso_set_fragment_shader_handle( ctx, handle );
}
void cso_save_fragment_shader(struct cso_context *ctx)
@ -476,6 +483,16 @@ void cso_restore_fragment_shader(struct cso_context *ctx)
}
void cso_set_vertex_shader_handle(struct cso_context *ctx,
void *handle )
{
if (ctx->vertex_shader != handle) {
ctx->vertex_shader = handle;
ctx->pipe->bind_vs_state(ctx->pipe, handle);
}
}
void cso_set_vertex_shader(struct cso_context *ctx,
const struct pipe_shader_state *templ)
@ -503,12 +520,11 @@ void cso_set_vertex_shader(struct cso_context *ctx,
handle = ((struct cso_vertex_shader *)cso_hash_iter_data(iter))->data;
}
if (ctx->vertex_shader != handle) {
ctx->vertex_shader = handle;
ctx->pipe->bind_vs_state(ctx->pipe, handle);
}
cso_set_vertex_shader_handle( ctx, handle );
}
void cso_save_vertex_shader(struct cso_context *ctx)
{
assert(!ctx->vertex_shader_saved);

View file

@ -96,6 +96,8 @@ void cso_restore_sampler_textures( struct cso_context *cso );
* (eg mesa's internall-generated texenv programs), it will be up to
* the state tracker to implement their own specialized caching.
*/
void cso_set_fragment_shader_handle(struct cso_context *ctx,
void *handle );
void cso_set_fragment_shader( struct cso_context *cso,
const struct pipe_shader_state *shader );
void cso_save_fragment_shader(struct cso_context *cso);
@ -103,6 +105,8 @@ void cso_restore_fragment_shader(struct cso_context *cso);
void cso_set_vertex_shader_handle(struct cso_context *ctx,
void *handle );
void cso_set_vertex_shader( struct cso_context *cso,
const struct pipe_shader_state *shader );
void cso_save_vertex_shader(struct cso_context *cso);