lima: fix allocation of GP outputs storage for indexed draw
For indexed draw number of VS invocations is (ctx->max_index - ctx->min_index + 1), so we have to use this number when calculating space for varyings, gl_Position and gl_PointSize. Fixes dEQP-GLES2.functional.buffer.write.use.index_array.array and dEQP-GLES2.functional.buffer.write.use.index_array.element_array Reviewed-by: Andreas Baierl <ichgeh@imkreisrum.de> Reviewed-by: Erico Nunes <nunes.erico@gmail.com> Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
This commit is contained in:
parent
9bd8000c6c
commit
1de06e540a
|
@ -1239,6 +1239,7 @@ lima_update_varying(struct lima_context *ctx, const struct pipe_draw_info *info)
|
||||||
struct lima_screen *screen = lima_screen(ctx->base.screen);
|
struct lima_screen *screen = lima_screen(ctx->base.screen);
|
||||||
struct lima_vs_shader_state *vs = ctx->vs;
|
struct lima_vs_shader_state *vs = ctx->vs;
|
||||||
uint32_t gp_output_size;
|
uint32_t gp_output_size;
|
||||||
|
unsigned num = info->index_size ? (ctx->max_index - ctx->min_index + 1) : info->count;
|
||||||
|
|
||||||
uint32_t *varying =
|
uint32_t *varying =
|
||||||
lima_ctx_buff_alloc(ctx, lima_ctx_buff_gp_varying_info,
|
lima_ctx_buff_alloc(ctx, lima_ctx_buff_gp_varying_info,
|
||||||
|
@ -1267,18 +1268,18 @@ lima_update_varying(struct lima_context *ctx, const struct pipe_draw_info *info)
|
||||||
vs->varying_stride = align(offset, 16);
|
vs->varying_stride = align(offset, 16);
|
||||||
|
|
||||||
/* gl_Position is always present, allocate space for it */
|
/* gl_Position is always present, allocate space for it */
|
||||||
gp_output_size = align(4 * 4 * info->count, 0x40);
|
gp_output_size = align(4 * 4 * num, 0x40);
|
||||||
|
|
||||||
/* Allocate space for varyings if there're any */
|
/* Allocate space for varyings if there're any */
|
||||||
if (vs->num_varyings) {
|
if (vs->num_varyings) {
|
||||||
ctx->gp_output_varyings_offt = gp_output_size;
|
ctx->gp_output_varyings_offt = gp_output_size;
|
||||||
gp_output_size += align(vs->varying_stride * info->count, 0x40);
|
gp_output_size += align(vs->varying_stride * num, 0x40);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate space for gl_PointSize if it's there */
|
/* Allocate space for gl_PointSize if it's there */
|
||||||
if (vs->point_size_idx != -1) {
|
if (vs->point_size_idx != -1) {
|
||||||
ctx->gp_output_point_size_offt = gp_output_size;
|
ctx->gp_output_point_size_offt = gp_output_size;
|
||||||
gp_output_size += 4 * info->count;
|
gp_output_size += 4 * num;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* gp_output can be too large for the suballocator, so create a
|
/* gp_output can be too large for the suballocator, so create a
|
||||||
|
|
Loading…
Reference in New Issue