cso: cso_context should install u_vbuf by itself and not st/mesa
so that it's installed in the other state trackers too
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user