cso: cso_context should install u_vbuf by itself and not st/mesa
authorMarek Olšák <maraeo@gmail.com>
Sun, 29 Apr 2012 19:24:39 +0000 (21:24 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sun, 29 Apr 2012 23:18:49 +0000 (01:18 +0200)
so that it's installed in the other state trackers too

src/gallium/auxiliary/cso_cache/cso_context.c
src/gallium/auxiliary/cso_cache/cso_context.h
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h

index 1cd5f8de18400131e47c75f022c1a1315f6b2d80..7f2dc431ae53ebf7436ac24c40270cbf524885bb 100644 (file)
@@ -233,6 +233,25 @@ static INLINE void sanitize_hash(struct cso_hash *hash, enum cso_cache_type type
    }
 }
 
+static void cso_init_vbuf(struct cso_context *cso)
+{
+   struct u_vbuf_caps caps;
+
+   u_vbuf_get_caps(cso->pipe->screen, &caps);
+
+   /* Install u_vbuf if there is anything unsupported. */
+   if (!caps.buffer_offset_unaligned ||
+       !caps.buffer_stride_unaligned ||
+       !caps.velem_src_offset_unaligned ||
+       !caps.format_fixed32 ||
+       !caps.format_float16 ||
+       !caps.format_float64 ||
+       !caps.format_norm32 ||
+       !caps.format_scaled32 ||
+       !caps.user_vertex_buffers) {
+      cso->vbuf = u_vbuf_create(cso->pipe, &caps);
+   }
+}
 
 struct cso_context *cso_create_context( struct pipe_context *pipe )
 {
@@ -251,6 +270,8 @@ struct cso_context *cso_create_context( struct pipe_context *pipe )
 
    ctx->pipe = pipe;
 
+   cso_init_vbuf(ctx);
+
    /* Enable for testing: */
    if (0) cso_set_maximum_cache_size( ctx->cache, 4 );
 
@@ -270,11 +291,6 @@ out:
    return NULL;
 }
 
-void cso_install_vbuf(struct cso_context *ctx, struct u_vbuf *vbuf)
-{
-   ctx->vbuf = vbuf;
-}
-
 /**
  * Prior to context destruction, this function unbinds all state objects.
  */
@@ -343,6 +359,8 @@ void cso_release_all( struct cso_context *ctx )
 void cso_destroy_context( struct cso_context *ctx )
 {
    if (ctx) {
+      if (ctx->vbuf)
+         u_vbuf_destroy(ctx->vbuf);
       FREE( ctx );
    }
 }
index 79279343c392aa09f13fff72f0e271950a4d8b5b..4de08a8364c948737efc7eb056b9994371ef6e0d 100644 (file)
@@ -43,8 +43,6 @@ struct u_vbuf;
 
 struct cso_context *cso_create_context( struct pipe_context *pipe );
 
-void cso_install_vbuf(struct cso_context *ctx, struct u_vbuf *vbuf);
-
 void cso_release_all( struct cso_context *ctx );
 
 void cso_destroy_context( struct cso_context *cso );
index d7124087b11738038849f31af52c155079c99794..93f4216f34eca2b33b3a8cf972da8c0616c68ff5 100644 (file)
@@ -65,7 +65,6 @@
 #include "util/u_inlines.h"
 #include "util/u_upload_mgr.h"
 #include "cso_cache/cso_context.h"
-#include "util/u_vbuf.h"
 
 
 DEBUG_GET_ONCE_BOOL_OPTION(mesa_mvp_dp4, "MESA_MVP_DP4", FALSE)
@@ -112,27 +111,6 @@ st_get_msaa(void)
 }
 
 
-static void st_init_vbuf(struct st_context *st)
-{
-   struct u_vbuf_caps caps;
-
-   u_vbuf_get_caps(st->pipe->screen, &caps);
-
-   /* Create u_vbuf if there is anything unsupported. */
-   if (!caps.buffer_offset_unaligned ||
-       !caps.buffer_stride_unaligned ||
-       !caps.velem_src_offset_unaligned ||
-       !caps.format_fixed32 ||
-       !caps.format_float16 ||
-       !caps.format_float64 ||
-       !caps.format_norm32 ||
-       !caps.format_scaled32 ||
-       !caps.user_vertex_buffers) {
-      /* XXX user vertex buffers are always uploaded regardless of the CAP. */
-      st->vbuf = u_vbuf_create(st->pipe, &caps);
-      cso_install_vbuf(st->cso_context, st->vbuf);
-   }
-}
 
 
 static struct st_context *
@@ -173,7 +151,6 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe )
 
    st->cso_context = cso_create_context(pipe);
 
-   st_init_vbuf(st);
    st_init_atoms( st );
    st_init_bitmap(st);
    st_init_clear(st);
@@ -286,7 +263,6 @@ static void st_destroy_context_priv( struct st_context *st )
 void st_destroy_context( struct st_context *st )
 {
    struct pipe_context *pipe = st->pipe;
-   struct u_vbuf *vbuf = st->vbuf;
    struct cso_context *cso = st->cso_context;
    struct gl_context *ctx = st->ctx;
    GLuint i;
@@ -322,9 +298,6 @@ void st_destroy_context( struct st_context *st )
    st_destroy_context_priv(st);
    st = NULL;
 
-   if (vbuf)
-      u_vbuf_destroy(vbuf);
-
    cso_destroy_context(cso);
 
    pipe->destroy( pipe );
index 8b8d69e995ab4f99f2882e5edeed46bb70774086..49b8316842ee2b6452f7c57726825c305da009c1 100644 (file)
@@ -41,7 +41,6 @@ struct gen_mipmap_state;
 struct st_context;
 struct st_fragment_program;
 struct u_upload_mgr;
-struct u_vbuf;
 
 
 #define ST_NEW_MESA                    (1 << 0) /* Mesa state has changed */
@@ -74,7 +73,6 @@ struct st_context
    struct pipe_context *pipe;
 
    struct u_upload_mgr *uploader, *indexbuf_uploader, *constbuf_uploader;
-   struct u_vbuf *vbuf;
 
    struct draw_context *draw;  /**< For selection/feedback/rastpos only */
    struct draw_stage *feedback_stage;  /**< For GL_FEEDBACK rendermode */