From d12cd599baeac9425e016a1432cfbf17566a38ee Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Sun, 2 Mar 2014 20:15:10 -0500 Subject: XXX: WOrking --- src/gallium/drivers/r600/r600_compute.c | 13 ++++++++++--- src/gallium/drivers/r600/r600_hw_context.c | 2 ++ src/gallium/drivers/r600/r600_state.c | 1 + src/gallium/drivers/r600/r600_state_common.c | 5 ++--- src/gallium/drivers/radeon/r600_streamout.c | 2 +- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/r600/r600_compute.c b/src/gallium/drivers/r600/r600_compute.c index dc7e16cc2e4..1a3adc4bf43 100644 --- a/src/gallium/drivers/r600/r600_compute.c +++ b/src/gallium/drivers/r600/r600_compute.c @@ -263,6 +263,8 @@ static void compute_emit_cs(struct r600_context *ctx, const uint *block_layout, void *rs_cso; struct pipe_vertex_element elements; struct pipe_rasterizer_state rs; + uint32_t *index_data; + int i; /* make sure that the gfx ring is only one active */ if (ctx->b.rings.dma.cs) { @@ -278,8 +280,12 @@ static void compute_emit_cs(struct r600_context *ctx, const uint *block_layout, ctx->b.b.bind_vertex_elements_state(&ctx->b.b, fetch_cso); /* Index buffer */ - index_buffer->index_size = 2; - index_buffer->user_buffer = CALLOC(4, 1); + index_buffer->index_size = 4; + index_data = CALLOC(index_buffer->index_size, 10); + for (i = 0; i < 10; i++) { + index_data[i] = i; + } + index_buffer->user_buffer = index_data; ctx->b.b.set_index_buffer(&ctx->b.b, index_buffer); /* Raterizer state */ @@ -290,8 +296,9 @@ static void compute_emit_cs(struct r600_context *ctx, const uint *block_layout, /* Draw VBO */ info->indexed = 1; - info->count = 1; /* Number of vertices */ + info->count = 10; /* Number of vertices */ info->instance_count = 1; + info->mode = 1; ctx->b.b.draw_vbo(&ctx->b.b, info); ctx->b.flags |= R600_CONTEXT_INV_CONST_CACHE | diff --git a/src/gallium/drivers/r600/r600_hw_context.c b/src/gallium/drivers/r600/r600_hw_context.c index d946f91052b..ac69cfe55a6 100644 --- a/src/gallium/drivers/r600/r600_hw_context.c +++ b/src/gallium/drivers/r600/r600_hw_context.c @@ -270,10 +270,12 @@ void r600_context_flush(struct r600_context *ctx, unsigned flags) if (ctx->keep_tiling_flags) { flags |= RADEON_FLUSH_KEEP_TILING_FLAGS; } +#if 0 fprintf(stderr, "cdw: %i\n", cs->cdw); for (i = 0; i < cs->cdw; i++) { fprintf(stderr, "%4i : 0x%08X\n", i, cs->buf[i]); } +#endif /* Flush the CS. */ ctx->b.ws->cs_flush(ctx->b.rings.gfx.cs, flags, ctx->screen->b.cs_count++); diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index 57681242337..d46cc4fe815 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -2373,6 +2373,7 @@ bool r600_adjust_gprs(struct r600_context *rctx) tmp = S_008C04_NUM_PS_GPRS(new_num_ps_gprs) | S_008C04_NUM_VS_GPRS(new_num_vs_gprs) | S_008C04_NUM_CLAUSE_TEMP_GPRS(def_num_clause_temp_gprs); + fprintf(stderr, "gprs= %u\n", new_num_vs_gprs); if (rctx->config_state.sq_gpr_resource_mgmt_1 != tmp) { rctx->config_state.sq_gpr_resource_mgmt_1 = tmp; rctx->config_state.atom.dirty = true; diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index 4914f0208d9..dd9526f1edb 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -1356,6 +1356,7 @@ static void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info if (ib.user_buffer) { unsigned size_bytes = info.count*ib.index_size; unsigned size_dw = align(size_bytes, 4) / 4; + r600_write_context_reg(cs, R_028B30_VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE, 1); fprintf(stderr, "Emitting DRAW_INDEX_IMMD\n"); cs->buf[cs->cdw++] = PKT3(PKT3_DRAW_INDEX_IMMD, 1 + size_dw, rctx->b.predicate_drawing); cs->buf[cs->cdw++] = info.count; @@ -1377,7 +1378,6 @@ static void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info struct r600_so_target *t = (struct r600_so_target*)info.count_from_stream_output; uint64_t va = r600_resource_va(&rctx->screen->b.b, (void*)t->buf_filled_size) + t->buf_filled_size_offset; - r600_write_context_reg(cs, R_028B30_VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE, t->stride_in_dw); cs->buf[cs->cdw++] = PKT3(PKT3_COPY_DW, 4, 0); cs->buf[cs->cdw++] = COPY_DW_SRC_IS_MEM | COPY_DW_DST_IS_REG; @@ -1392,8 +1392,7 @@ static void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info cs->buf[cs->cdw++] = PKT3(PKT3_DRAW_INDEX_AUTO, 1, rctx->b.predicate_drawing); cs->buf[cs->cdw++] = info.count; - cs->buf[cs->cdw++] = V_0287F0_DI_SRC_SEL_AUTO_INDEX | - (info.count_from_stream_output ? S_0287F0_USE_OPAQUE(1) : 0); + cs->buf[cs->cdw++] = V_0287F0_DI_SRC_SEL_AUTO_INDEX | S_0287F0_USE_OPAQUE(1); } if (rctx->screen->b.trace_bo) { diff --git a/src/gallium/drivers/radeon/r600_streamout.c b/src/gallium/drivers/radeon/r600_streamout.c index 02907dd556b..66d827bcf0a 100644 --- a/src/gallium/drivers/radeon/r600_streamout.c +++ b/src/gallium/drivers/radeon/r600_streamout.c @@ -234,7 +234,7 @@ static void r600_emit_streamout_begin(struct r600_common_context *rctx, struct r t[i]->b.buffer_size) >> 2); /* BUFFER_SIZE (in DW) */ radeon_emit(cs, stride_in_dw[i]); /* VTX_STRIDE (in DW) */ } else { - fprintf(stderr, "Emitting so regs\n"); + fprintf(stderr, "Emitting so regs stride = %u\n", stride_in_dw[i]); uint64_t va = r600_resource_va(rctx->b.screen, (void*)t[i]->b.buffer); -- cgit v1.2.3