struct cso_context *cso_create_context( struct pipe_context *pipe ) { struct cso_context *ctx = CALLOC_STRUCT(cso_context); if (ctx == NULL) goto out; assert(PIPE_MAX_SAMPLERS == PIPE_MAX_VERTEX_SAMPLERS); ctx->cache = cso_cache_create(); if (ctx->cache == NULL) goto out; cso_cache_set_sanitize_callback(ctx->cache, sanitize_hash, ctx); ctx->pipe = pipe; /* Enable for testing: */ if (0) cso_set_maximum_cache_size( ctx->cache, 4 ); return ctx; out: cso_destroy_context( ctx ); return NULL; }
struct cso_context *cso_create_context( struct pipe_context *pipe ) { struct cso_context *ctx = CALLOC_STRUCT(cso_context); if (!ctx) goto out; ctx->cache = cso_cache_create(); if (ctx->cache == NULL) goto out; cso_cache_set_sanitize_callback(ctx->cache, sanitize_hash, ctx); ctx->pipe = pipe; ctx->sample_mask = ~0; ctx->aux_vertex_buffer_index = 0; /* 0 for now */ cso_init_vbuf(ctx); /* Enable for testing: */ if (0) cso_set_maximum_cache_size( ctx->cache, 4 ); if (pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_GEOMETRY, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { ctx->has_geometry_shader = TRUE; } if (pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_TESS_CTRL, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { ctx->has_tessellation = TRUE; } if (pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_COMPUTE, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { int supported_irs = pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_COMPUTE, PIPE_SHADER_CAP_SUPPORTED_IRS); if (supported_irs & (1 << PIPE_SHADER_IR_TGSI)) { ctx->has_compute_shader = TRUE; } } if (pipe->screen->get_param(pipe->screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS) != 0) { ctx->has_streamout = TRUE; } return ctx; out: cso_destroy_context( ctx ); return NULL; }
struct u_vbuf * u_vbuf_create(struct pipe_context *pipe, struct u_vbuf_caps *caps, unsigned aux_vertex_buffer_index) { struct u_vbuf *mgr = CALLOC_STRUCT(u_vbuf); mgr->caps = *caps; mgr->aux_vertex_buffer_slot = aux_vertex_buffer_index; mgr->pipe = pipe; mgr->cso_cache = cso_cache_create(); mgr->translate_cache = translate_cache_create(); memset(mgr->fallback_vbs, ~0, sizeof(mgr->fallback_vbs)); return mgr; }
struct u_vbuf * u_vbuf_create(struct pipe_context *pipe, struct u_vbuf_caps *caps) { struct u_vbuf *mgr = CALLOC_STRUCT(u_vbuf); mgr->caps = *caps; mgr->pipe = pipe; mgr->cso_cache = cso_cache_create(); mgr->translate_cache = translate_cache_create(); memset(mgr->fallback_vbs, ~0, sizeof(mgr->fallback_vbs)); mgr->uploader = u_upload_create(pipe, 1024 * 1024, 4, PIPE_BIND_VERTEX_BUFFER); return mgr; }
struct cso_context *cso_create_context( struct pipe_context *pipe ) { struct cso_context *ctx = CALLOC_STRUCT(cso_context); if (ctx == NULL) goto out; ctx->cache = cso_cache_create(); if (ctx->cache == NULL) goto out; cso_cache_set_sanitize_callback(ctx->cache, sanitize_hash, ctx); ctx->pipe = pipe; ctx->sample_mask_saved = ~0; ctx->aux_vertex_buffer_index = 0; /* 0 for now */ cso_init_vbuf(ctx); /* Enable for testing: */ if (0) cso_set_maximum_cache_size( ctx->cache, 4 ); if (pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_GEOMETRY, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { ctx->has_geometry_shader = TRUE; } if (pipe->screen->get_param(pipe->screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS) != 0) { ctx->has_streamout = TRUE; } return ctx; out: cso_destroy_context( ctx ); return NULL; }