i965g: add constant buffer setter
authorKeith Whitwell <keithw@vmware.com>
Wed, 4 Nov 2009 19:41:02 +0000 (19:41 +0000)
committerKeith Whitwell <keithw@vmware.com>
Wed, 4 Nov 2009 19:41:02 +0000 (19:41 +0000)
src/gallium/drivers/i965/brw_pipe_shader.c

index 2422f77f345f3532b367993ef17aff1350f69861..8e10edb459306bec11f0f358b56c21edeae30dc2 100644 (file)
@@ -159,11 +159,33 @@ static void brw_delete_vs_state( struct pipe_context *pipe, void *prog )
 }
 
 
+static void brw_set_constant_buffer(struct pipe_context *pipe,
+                                     uint shader, uint index,
+                                     const struct pipe_constant_buffer *buf)
+{
+   struct brw_context *brw = brw_context(pipe);
 
+   assert(index == 0);
+
+   if (shader == PIPE_SHADER_FRAGMENT) {
+      pipe_buffer_reference( &brw->curr.fragment_constants,
+                             buf->buffer );
+
+      brw->state.dirty.mesa |= PIPE_NEW_FRAGMENT_CONSTANTS;
+   }
+   else {
+      pipe_buffer_reference( &brw->curr.vertex_constants,
+                             buf->buffer );
+
+      brw->state.dirty.mesa |= PIPE_NEW_VERTEX_CONSTANTS;
+   }
+}
 
 
 void brw_pipe_shader_init( struct brw_context *brw )
 {
+   brw->base.set_constant_buffer = brw_set_constant_buffer;
+
    brw->base.create_vs_state = brw_create_vs_state;
    brw->base.bind_vs_state = brw_bind_vs_state;
    brw->base.delete_vs_state = brw_delete_vs_state;
@@ -175,4 +197,6 @@ void brw_pipe_shader_init( struct brw_context *brw )
 
 void brw_pipe_shader_cleanup( struct brw_context *brw )
 {
+   pipe_buffer_reference( &brw->curr.fragment_constants, NULL );
+   pipe_buffer_reference( &brw->curr.vertex_constants, NULL );
 }