summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/auxiliary/cso_cache/cso_context.c17
-rw-r--r--src/gallium/auxiliary/cso_cache/cso_context.h6
2 files changed, 23 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c
index d246dff433d..cfb91d31dee 100644
--- a/src/gallium/auxiliary/cso_cache/cso_context.c
+++ b/src/gallium/auxiliary/cso_cache/cso_context.c
@@ -471,6 +471,8 @@ void cso_restore_rasterizer(struct cso_context *ctx)
ctx->rasterizer_saved = NULL;
}
+
+
enum pipe_error cso_set_fragment_shader_handle(struct cso_context *ctx,
void *handle )
{
@@ -481,6 +483,13 @@ enum pipe_error cso_set_fragment_shader_handle(struct cso_context *ctx,
return PIPE_OK;
}
+void cso_delete_fragment_shader(struct cso_context *ctx, void *handle )
+{
+ if (handle == ctx->fragment_shader)
+ ctx->pipe->bind_fs_state(ctx->pipe, NULL);
+ ctx->pipe->delete_fs_state(ctx->pipe, handle);
+ ctx->fragment_shader = NULL;
+}
/* Not really working:
*/
@@ -553,6 +562,14 @@ enum pipe_error cso_set_vertex_shader_handle(struct cso_context *ctx,
return PIPE_OK;
}
+void cso_delete_vertex_shader(struct cso_context *ctx, void *handle )
+{
+ if (handle == ctx->vertex_shader)
+ ctx->pipe->bind_vs_state(ctx->pipe, NULL);
+ ctx->pipe->delete_vs_state(ctx->pipe, handle);
+ ctx->vertex_shader = NULL;
+}
+
/* Not really working:
*/
diff --git a/src/gallium/auxiliary/cso_cache/cso_context.h b/src/gallium/auxiliary/cso_cache/cso_context.h
index 0405944132b..cb46f71d51f 100644
--- a/src/gallium/auxiliary/cso_cache/cso_context.h
+++ b/src/gallium/auxiliary/cso_cache/cso_context.h
@@ -99,16 +99,22 @@ void cso_restore_sampler_textures( struct cso_context *cso );
*/
enum pipe_error cso_set_fragment_shader_handle(struct cso_context *ctx,
void *handle );
+void cso_delete_fragment_shader(struct cso_context *ctx, void *handle );
+/*
enum pipe_error cso_set_fragment_shader( struct cso_context *cso,
const struct pipe_shader_state *shader );
+*/
void cso_save_fragment_shader(struct cso_context *cso);
void cso_restore_fragment_shader(struct cso_context *cso);
enum pipe_error cso_set_vertex_shader_handle(struct cso_context *ctx,
void *handle );
+void cso_delete_vertex_shader(struct cso_context *ctx, void *handle );
+/*
enum pipe_error cso_set_vertex_shader( struct cso_context *cso,
const struct pipe_shader_state *shader );
+*/
void cso_save_vertex_shader(struct cso_context *cso);
void cso_restore_vertex_shader(struct cso_context *cso);