diff options
author | Ilia Mirkin <[email protected]> | 2014-06-15 16:39:14 -0400 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2014-07-01 11:34:40 -0400 |
commit | 5e04526399ca5d249cc5ec600aa6546356abccbb (patch) | |
tree | a17df2b245f3db9d799bdc363734a2bce9c12240 /src/gallium/drivers/nouveau | |
parent | 2f2467cb23ce19770c95ce1f004dc11750dffc6d (diff) |
nvc0: expose 4 vertex streams, use stream ids in xfb
Signed-off-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/gallium/drivers/nouveau')
5 files changed, 5 insertions, 2 deletions
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c index ad8d1b04e21..7e49b06dee2 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c @@ -493,6 +493,7 @@ nvc0_program_create_tfb_state(const struct nv50_ir_prog_info *info, info->out[pso->output[i].register_index].slot[s + c]; tfb->varying_count[b] = MAX2(tfb->varying_count[b], p); + tfb->stream[b] = pso->output[i].stream; } for (b = 0; b < 4; ++b) // zero unused indices (looks nicer) for (c = tfb->varying_count[b]; c & 3; ++c) diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.h b/src/gallium/drivers/nouveau/nvc0/nvc0_program.h index 750d8c10459..3fd9d21b4c4 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.h +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.h @@ -9,6 +9,7 @@ struct nvc0_transform_feedback_state { uint32_t stride[4]; + uint8_t stream[4]; uint8_t varying_count[4]; uint8_t varying_index[4][128]; }; diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c index dc544d36efc..70fe270c27b 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c @@ -136,6 +136,7 @@ nvc0_query_create(struct pipe_context *pipe, unsigned type, unsigned index) case PIPE_QUERY_PRIMITIVES_GENERATED: case PIPE_QUERY_PRIMITIVES_EMITTED: q->is64bit = TRUE; + q->index = index; space = 32; break; case PIPE_QUERY_TIME_ELAPSED: diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c index 510368b9b83..ce3630338aa 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c @@ -104,7 +104,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: return 1024; case PIPE_CAP_MAX_VERTEX_STREAMS: - return 1; + return 4; case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: return 256; case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT: diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c index bdc3ab5821e..1000d8286d7 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c @@ -231,7 +231,7 @@ nvc0_tfb_validate(struct nvc0_context *nvc0) unsigned n = (tfb->varying_count[b] + 3) / 4; BEGIN_NVC0(push, NVC0_3D(TFB_STREAM(b)), 3); - PUSH_DATA (push, 0); + PUSH_DATA (push, tfb->stream[b]); PUSH_DATA (push, tfb->varying_count[b]); PUSH_DATA (push, tfb->stride[b]); BEGIN_NVC0(push, NVC0_3D(TFB_VARYING_LOCS(b, 0)), n); |