summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/r600/r600_blit.c4
-rw-r--r--src/gallium/drivers/r600/r600_context.c31
-rw-r--r--src/gallium/drivers/r600/r600_context.h2
-rw-r--r--src/gallium/drivers/r600/r600_draw.c4
-rw-r--r--src/gallium/drivers/r600/r600_query.c16
-rw-r--r--src/gallium/drivers/r600/radeon.h13
-rw-r--r--src/gallium/winsys/r600/drm/radeon_ctx.c17
-rw-r--r--src/gallium/winsys/r600/drm/radeon_priv.h11
8 files changed, 42 insertions, 56 deletions
diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c
index e6b3be6d3bf..2c22adb62a4 100644
--- a/src/gallium/drivers/r600/r600_blit.c
+++ b/src/gallium/drivers/r600/r600_blit.c
@@ -570,10 +570,10 @@ int r600_blit_uncompress_depth(struct pipe_context *ctx, struct r600_resource_te
r600_queries_suspend(ctx);
/* schedule draw*/
- r = radeon_ctx_set_draw(&rctx->ctx, &draw);
+ r = radeon_ctx_set_draw(rctx->ctx, &draw);
if (r == -EBUSY) {
r600_flush(ctx, 0, NULL);
- r = radeon_ctx_set_draw(&rctx->ctx, &draw);
+ r = radeon_ctx_set_draw(rctx->ctx, &draw);
}
if (r) {
goto out;
diff --git a/src/gallium/drivers/r600/r600_context.c b/src/gallium/drivers/r600/r600_context.c
index 00df4dcd428..2ec25548e3c 100644
--- a/src/gallium/drivers/r600/r600_context.c
+++ b/src/gallium/drivers/r600/r600_context.c
@@ -56,7 +56,7 @@ static void r600_destroy_context(struct pipe_context *context)
free(rctx->vs_constant);
free(rctx->vs_resource);
- radeon_ctx_fini(&rctx->ctx);
+ radeon_ctx_fini(rctx->ctx);
FREE(rctx);
}
@@ -65,34 +65,17 @@ void r600_flush(struct pipe_context *ctx, unsigned flags,
{
struct r600_context *rctx = r600_context(ctx);
struct r600_query *rquery = NULL;
- static int dc = 0;
-#if 0
- char dname[256];
-#endif
/* suspend queries */
r600_queries_suspend(ctx);
- /* FIXME dumping should be removed once shader support instructions
- * without throwing bad code
- */
- if (!rctx->ctx.cdwords)
- goto out;
-#if 0
- sprintf(dname, "gallium-%08d.bof", dc);
- if (dc < 2) {
- radeon_ctx_dump_bof(&rctx->ctx, dname);
- R600_ERR("dumped %s\n", dname);
- }
-#endif
-#if 1
- radeon_ctx_submit(&rctx->ctx);
-#endif
+
+ radeon_ctx_submit(rctx->ctx);
+
LIST_FOR_EACH_ENTRY(rquery, &rctx->query_list, list) {
rquery->flushed = true;
}
- dc++;
-out:
- radeon_ctx_clear(&rctx->ctx);
+
+ radeon_ctx_clear(rctx->ctx);
/* resume queries */
r600_queries_resume(ctx);
}
@@ -151,7 +134,7 @@ struct pipe_context *r600_create_context(struct pipe_screen *screen, void *priv)
return NULL;
}
- radeon_ctx_init(&rctx->ctx, rscreen->rw);
+ rctx->ctx = radeon_ctx_init(rscreen->rw);
radeon_draw_init(&rctx->draw, rscreen->rw);
return &rctx->context;
}
diff --git a/src/gallium/drivers/r600/r600_context.h b/src/gallium/drivers/r600/r600_context.h
index 6d4a554b998..73037fdb1b3 100644
--- a/src/gallium/drivers/r600/r600_context.h
+++ b/src/gallium/drivers/r600/r600_context.h
@@ -210,7 +210,7 @@ struct r600_context {
struct pipe_context context;
struct r600_screen *screen;
struct radeon *rw;
- struct radeon_ctx ctx;
+ struct radeon_ctx *ctx;
struct blitter_context *blitter;
struct radeon_draw draw;
struct r600_context_hw_state_vtbl *vtbl;
diff --git a/src/gallium/drivers/r600/r600_draw.c b/src/gallium/drivers/r600/r600_draw.c
index d0de1658ba1..669c9b4cdb6 100644
--- a/src/gallium/drivers/r600/r600_draw.c
+++ b/src/gallium/drivers/r600/r600_draw.c
@@ -105,10 +105,10 @@ static int r600_draw_common(struct r600_draw *draw)
rctx->vtbl->vgt_prim(draw, prim, vgt_dma_index_type);
radeon_draw_bind(&rctx->draw, &draw->vgt);
- r = radeon_ctx_set_draw(&rctx->ctx, &rctx->draw);
+ r = radeon_ctx_set_draw(rctx->ctx, &rctx->draw);
if (r == -EBUSY) {
r600_flush(draw->ctx, 0, NULL);
- r = radeon_ctx_set_draw(&rctx->ctx, &rctx->draw);
+ r = radeon_ctx_set_draw(rctx->ctx, &rctx->draw);
}
radeon_state_fini(&draw->draw);
diff --git a/src/gallium/drivers/r600/r600_query.c b/src/gallium/drivers/r600/r600_query.c
index 0073072b4af..68358f9dd71 100644
--- a/src/gallium/drivers/r600/r600_query.c
+++ b/src/gallium/drivers/r600/r600_query.c
@@ -155,12 +155,12 @@ static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
rquery->num_results = 0;
rquery->flushed = false;
r600_query_resume(ctx, rquery);
- r = radeon_ctx_set_query_state(&rctx->ctx, &rquery->rstate);
+ r = radeon_ctx_set_query_state(rctx->ctx, &rquery->rstate);
if (r == -EBUSY) {
/* this shouldn't happen */
R600_ERR("had to flush while emitting end query\n");
ctx->flush(ctx, 0, NULL);
- r = radeon_ctx_set_query_state(&rctx->ctx, &rquery->rstate);
+ r = radeon_ctx_set_query_state(rctx->ctx, &rquery->rstate);
}
}
@@ -173,12 +173,12 @@ static void r600_end_query(struct pipe_context *ctx, struct pipe_query *query)
rquery->state &= ~R600_QUERY_STATE_STARTED;
rquery->state |= R600_QUERY_STATE_ENDED;
r600_query_suspend(ctx, rquery);
- r = radeon_ctx_set_query_state(&rctx->ctx, &rquery->rstate);
+ r = radeon_ctx_set_query_state(rctx->ctx, &rquery->rstate);
if (r == -EBUSY) {
/* this shouldn't happen */
R600_ERR("had to flush while emitting end query\n");
ctx->flush(ctx, 0, NULL);
- r = radeon_ctx_set_query_state(&rctx->ctx, &rquery->rstate);
+ r = radeon_ctx_set_query_state(rctx->ctx, &rquery->rstate);
}
}
@@ -191,12 +191,12 @@ void r600_queries_suspend(struct pipe_context *ctx)
LIST_FOR_EACH_ENTRY(rquery, &rctx->query_list, list) {
if (rquery->state & R600_QUERY_STATE_STARTED) {
r600_query_suspend(ctx, rquery);
- r = radeon_ctx_set_query_state(&rctx->ctx, &rquery->rstate);
+ r = radeon_ctx_set_query_state(rctx->ctx, &rquery->rstate);
if (r == -EBUSY) {
/* this shouldn't happen */
R600_ERR("had to flush while emitting end query\n");
ctx->flush(ctx, 0, NULL);
- r = radeon_ctx_set_query_state(&rctx->ctx, &rquery->rstate);
+ r = radeon_ctx_set_query_state(rctx->ctx, &rquery->rstate);
}
}
rquery->state |= R600_QUERY_STATE_SUSPENDED;
@@ -212,12 +212,12 @@ void r600_queries_resume(struct pipe_context *ctx)
LIST_FOR_EACH_ENTRY(rquery, &rctx->query_list, list) {
if (rquery->state & R600_QUERY_STATE_STARTED) {
r600_query_resume(ctx, rquery);
- r = radeon_ctx_set_query_state(&rctx->ctx, &rquery->rstate);
+ r = radeon_ctx_set_query_state(rctx->ctx, &rquery->rstate);
if (r == -EBUSY) {
/* this shouldn't happen */
R600_ERR("had to flush while emitting end query\n");
ctx->flush(ctx, 0, NULL);
- r = radeon_ctx_set_query_state(&rctx->ctx, &rquery->rstate);
+ r = radeon_ctx_set_query_state(rctx->ctx, &rquery->rstate);
}
}
rquery->state &= ~R600_QUERY_STATE_SUSPENDED;
diff --git a/src/gallium/drivers/r600/radeon.h b/src/gallium/drivers/r600/radeon.h
index 7991821ddab..12e8b993c8f 100644
--- a/src/gallium/drivers/r600/radeon.h
+++ b/src/gallium/drivers/r600/radeon.h
@@ -161,18 +161,9 @@ struct radeon_cs_reloc {
};
#pragma pack()
-struct radeon_ctx {
- struct radeon *radeon;
- u32 *pm4;
- int cdwords;
- int ndwords;
- unsigned nreloc;
- struct radeon_cs_reloc *reloc;
- unsigned nbo;
- struct radeon_bo **bo;
-};
+struct radeon_ctx;
-int radeon_ctx_init(struct radeon_ctx *ctx, struct radeon *radeon);
+struct radeon_ctx *radeon_ctx_init(struct radeon *radeon);
void radeon_ctx_fini(struct radeon_ctx *ctx);
void radeon_ctx_clear(struct radeon_ctx *ctx);
int radeon_ctx_set_draw(struct radeon_ctx *ctx, struct radeon_draw *draw);
diff --git a/src/gallium/winsys/r600/drm/radeon_ctx.c b/src/gallium/winsys/r600/drm/radeon_ctx.c
index a3ce7df7562..9f166b209a1 100644
--- a/src/gallium/winsys/r600/drm/radeon_ctx.c
+++ b/src/gallium/winsys/r600/drm/radeon_ctx.c
@@ -82,29 +82,30 @@ void radeon_ctx_clear(struct radeon_ctx *ctx)
ctx->nbo = 0;
}
-int radeon_ctx_init(struct radeon_ctx *ctx, struct radeon *radeon)
+struct radeon_ctx *radeon_ctx_init(struct radeon *radeon)
{
+ struct radeon_ctx *ctx;
if (radeon == NULL)
- return -EINVAL;
- memset(ctx, 0, sizeof(struct radeon_ctx));
+ return NULL;
+ ctx = calloc(1, sizeof(struct radeon_ctx));
ctx->radeon = radeon_incref(radeon);
radeon_ctx_clear(ctx);
ctx->pm4 = malloc(RADEON_CTX_MAX_PM4 * 4);
if (ctx->pm4 == NULL) {
radeon_ctx_fini(ctx);
- return -ENOMEM;
+ return NULL;
}
ctx->reloc = malloc(sizeof(struct radeon_cs_reloc) * RADEON_CTX_MAX_PM4);
if (ctx->reloc == NULL) {
radeon_ctx_fini(ctx);
- return -ENOMEM;
+ return NULL;
}
ctx->bo = malloc(sizeof(void *) * RADEON_CTX_MAX_PM4);
if (ctx->bo == NULL) {
radeon_ctx_fini(ctx);
- return -ENOMEM;
+ return NULL;
}
- return 0;
+ return ctx;
}
void radeon_ctx_fini(struct radeon_ctx *ctx)
@@ -121,7 +122,7 @@ void radeon_ctx_fini(struct radeon_ctx *ctx)
free(ctx->bo);
free(ctx->pm4);
free(ctx->reloc);
- memset(ctx, 0, sizeof(struct radeon_ctx));
+ free(ctx);
}
static int radeon_ctx_state_bo(struct radeon_ctx *ctx, struct radeon_state *state)
diff --git a/src/gallium/winsys/r600/drm/radeon_priv.h b/src/gallium/winsys/r600/drm/radeon_priv.h
index bcaa91d0288..b5a4eeae6ba 100644
--- a/src/gallium/winsys/r600/drm/radeon_priv.h
+++ b/src/gallium/winsys/r600/drm/radeon_priv.h
@@ -53,6 +53,17 @@ struct radeon_stype_info {
unsigned npm4;
};
+struct radeon_ctx {
+ struct radeon *radeon;
+ u32 *pm4;
+ int cdwords;
+ int ndwords;
+ unsigned nreloc;
+ struct radeon_cs_reloc *reloc;
+ unsigned nbo;
+ struct radeon_bo **bo;
+};
+
struct radeon {
int fd;
int refcount;