diff options
author | Marek Olšák <[email protected]> | 2017-02-10 01:09:27 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-02-14 21:47:51 +0100 |
commit | e0f95ddd3e1217e5710cdd12e733b6440592cc7d (patch) | |
tree | 28356a6fbc3fb384b9465e365a8d52f7dda59c13 /src/gallium/auxiliary/util | |
parent | 0561b3c75af2e4bb216b686bf62ae9d89c584dc8 (diff) |
gallium: let state trackers tell u_vbuf whether user VBOs are possible
This can affect whether u_vbuf will be enabled or not.
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/util')
-rw-r--r-- | src/gallium/auxiliary/util/u_tests.c | 8 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_vbuf.c | 5 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_vbuf.h | 5 |
3 files changed, 11 insertions, 7 deletions
diff --git a/src/gallium/auxiliary/util/u_tests.c b/src/gallium/auxiliary/util/u_tests.c index c33c1f69e83..687e5118d7c 100644 --- a/src/gallium/auxiliary/util/u_tests.c +++ b/src/gallium/auxiliary/util/u_tests.c @@ -304,7 +304,7 @@ tgsi_vs_window_space_position(struct pipe_context *ctx) return; } - cso = cso_create_context(ctx); + cso = cso_create_context(ctx, 0); cb = util_create_texture2d(ctx->screen, 256, 256, PIPE_FORMAT_R8G8B8A8_UNORM); util_set_common_states_and_clear(cso, ctx, cb); @@ -364,7 +364,7 @@ null_sampler_view(struct pipe_context *ctx, unsigned tgsi_tex_target) return; } - cso = cso_create_context(ctx); + cso = cso_create_context(ctx, 0); cb = util_create_texture2d(ctx->screen, 256, 256, PIPE_FORMAT_R8G8B8A8_UNORM); util_set_common_states_and_clear(cso, ctx, cb); @@ -406,7 +406,7 @@ null_constant_buffer(struct pipe_context *ctx) bool pass = true; static const float zero[] = {0, 0, 0, 0}; - cso = cso_create_context(ctx); + cso = cso_create_context(ctx, 0); cb = util_create_texture2d(ctx->screen, 256, 256, PIPE_FORMAT_R8G8B8A8_UNORM); util_set_common_states_and_clear(cso, ctx, cb); @@ -462,7 +462,7 @@ null_fragment_shader(struct pipe_context *ctx) struct pipe_query *query; union pipe_query_result qresult; - cso = cso_create_context(ctx); + cso = cso_create_context(ctx, 0); cb = util_create_texture2d(ctx->screen, 256, 256, PIPE_FORMAT_R8G8B8A8_UNORM); util_set_common_states_and_clear(cso, ctx, cb); diff --git a/src/gallium/auxiliary/util/u_vbuf.c b/src/gallium/auxiliary/util/u_vbuf.c index c26a923c7f3..f040f4a882d 100644 --- a/src/gallium/auxiliary/util/u_vbuf.c +++ b/src/gallium/auxiliary/util/u_vbuf.c @@ -255,7 +255,8 @@ static const struct { { PIPE_FORMAT_R8G8B8A8_SSCALED, PIPE_FORMAT_R32G32B32A32_FLOAT }, }; -boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps) +boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps, + unsigned flags) { unsigned i; boolean fallback = FALSE; @@ -293,7 +294,7 @@ boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps) if (!caps->buffer_offset_unaligned || !caps->buffer_stride_unaligned || !caps->velem_src_offset_unaligned || - !caps->user_vertex_buffers) { + (!(flags & U_VBUF_FLAG_NO_USER_VBOS) && !caps->user_vertex_buffers)) { fallback = TRUE; } diff --git a/src/gallium/auxiliary/util/u_vbuf.h b/src/gallium/auxiliary/util/u_vbuf.h index 9e8b135fb79..ddfa844d27f 100644 --- a/src/gallium/auxiliary/util/u_vbuf.h +++ b/src/gallium/auxiliary/util/u_vbuf.h @@ -40,6 +40,8 @@ struct cso_context; struct u_vbuf; +#define U_VBUF_FLAG_NO_USER_VBOS (1 << 0) + /* Hardware vertex fetcher limitations can be described by this structure. */ struct u_vbuf_caps { enum pipe_format format_translation[PIPE_FORMAT_COUNT]; @@ -55,7 +57,8 @@ struct u_vbuf_caps { }; -boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps); +boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps, + unsigned flags); struct u_vbuf * u_vbuf_create(struct pipe_context *pipe, |