tgsi: Pass pipe_context as a parameter to ureg_create_shader.
authorJosé Fonseca <jfonseca@vmware.com>
Mon, 24 Aug 2009 10:40:29 +0000 (11:40 +0100)
committerKeith Whitwell <keithw@vmware.com>
Mon, 24 Aug 2009 11:11:22 +0000 (12:11 +0100)
Simplifies migration to tgsi_ureg.
(cherry picked from commit f574398c07c41cb8d31249a7186fc178ef7d552a)

src/gallium/auxiliary/tgsi/tgsi_ureg.c
src/gallium/auxiliary/tgsi/tgsi_ureg.h

index 7762243ef89bdf981e5e113a9012014b67112137..63ae26776673c4e7dbf32be5eda0665f2b9e9b9d 100644 (file)
@@ -788,9 +788,9 @@ emit_header( struct ureg_program *ureg )
 }
 
 
-void *ureg_create_shader( struct ureg_program *ureg )
+const struct tgsi_token *ureg_finalize( struct ureg_program *ureg )
 {
-   struct pipe_shader_state state;
+   const struct tgsi_token *tokens;
 
    emit_header( ureg );
    emit_decls( ureg );
@@ -804,31 +804,42 @@ void *ureg_create_shader( struct ureg_program *ureg )
       return NULL;
    }
 
-   state.tokens = (const struct tgsi_token *)ureg->domain[DOMAIN_DECL].tokens;
+   tokens = &ureg->domain[DOMAIN_DECL].tokens[0].token;
 
    if (0) {
       debug_printf("%s: emitted shader %d tokens:\n", __FUNCTION__, 
                    ureg->domain[DOMAIN_DECL].count);
-      tgsi_dump( state.tokens, 0 );
+      tgsi_dump( tokens, 0 );
    }
+   
+   return tokens;
+}
+
+
+void *ureg_create_shader( struct ureg_program *ureg,
+                          struct pipe_context *pipe )
+{
+   struct pipe_shader_state state;
+
+   state.tokens = ureg_finalize(ureg);
+   if(!state.tokens)
+      return NULL;
 
    if (ureg->processor == TGSI_PROCESSOR_VERTEX)
-      return ureg->pipe->create_vs_state( ureg->pipe, &state );
+      return pipe->create_vs_state( pipe, &state );
    else
-      return ureg->pipe->create_fs_state( ureg->pipe, &state );
+      return pipe->create_fs_state( pipe, &state );
 }
 
 
 
 
-struct ureg_program *ureg_create( struct pipe_context *pipe,
-                                  unsigned processor )
+struct ureg_program *ureg_create( unsigned processor )
 {
    struct ureg_program *ureg = CALLOC_STRUCT( ureg_program );
    if (ureg == NULL)
       return NULL;
 
-   ureg->pipe = pipe;
    ureg->processor = processor;
    return ureg;
 }
index fbf174b20992fae09e30cb080d4c3e6eac882434..8836a1ea0ebb821786ebf842b2fd83f763db7390 100644 (file)
@@ -69,11 +69,14 @@ struct ureg_dst
 struct pipe_context;
 
 struct ureg_program *
-ureg_create( struct pipe_context *pipe,
-             unsigned processor );
+ureg_create( unsigned processor );
+
+const struct tgsi_token *
+ureg_finalize( struct ureg_program * );
 
 void *
-ureg_create_shader( struct ureg_program * );
+ureg_create_shader( struct ureg_program *,
+                    struct pipe_context *pipe );
 
 void 
 ureg_destroy( struct ureg_program * );
@@ -82,9 +85,11 @@ ureg_destroy( struct ureg_program * );
 /***********************************************************************
  * Convenience routine:
  */
-static INLINE void *ureg_create_shader_and_destroy( struct ureg_program *p )
+static INLINE void *
+ureg_create_shader_and_destroy( struct ureg_program *p,
+                                struct pipe_context *pipe )
 {
-   void *result = ureg_create_shader( p );
+   void *result = ureg_create_shader( p, pipe );
    ureg_destroy( p );
    return result;
 }