summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2014-03-02 20:15:10 -0500
committerTom Stellard <thomas.stellard@amd.com>2014-03-02 20:15:10 -0500
commitd12cd599baeac9425e016a1432cfbf17566a38ee (patch)
tree509a2f909f146227a17d36357534cea51fe0e6e3
parentd69ff9a6061813c35afe9e1201559d463cee56bb (diff)
XXX: WOrkingr600-compute
-rw-r--r--src/gallium/drivers/r600/r600_compute.c13
-rw-r--r--src/gallium/drivers/r600/r600_hw_context.c2
-rw-r--r--src/gallium/drivers/r600/r600_state.c1
-rw-r--r--src/gallium/drivers/r600/r600_state_common.c5
-rw-r--r--src/gallium/drivers/radeon/r600_streamout.c2
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);