summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/r300/r300_texture.c2
-rw-r--r--src/gallium/drivers/r300/r300_transfer.c6
-rw-r--r--src/gallium/winsys/radeon/drm/radeon_r300.c2
3 files changed, 8 insertions, 2 deletions
diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c
index c0911aef38..4a5c932b7e 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -960,7 +960,7 @@ struct pipe_resource* r300_texture_create(struct pipe_screen* screen,
util_format_short_name(base->format));
tex->buffer = rws->buffer_create(rws, 2048,
- PIPE_BIND_SAMPLER_VIEW, /* XXX */
+ base->bind,
tex->size);
rws->buffer_set_tiling(rws, tex->buffer,
tex->pitch[0],
diff --git a/src/gallium/drivers/r300/r300_transfer.c b/src/gallium/drivers/r300/r300_transfer.c
index 0dae9ef98b..14a9bfd865 100644
--- a/src/gallium/drivers/r300/r300_transfer.c
+++ b/src/gallium/drivers/r300/r300_transfer.c
@@ -127,6 +127,12 @@ r300_texture_get_transfer(struct pipe_context *ctx,
struct r300_transfer *trans;
struct pipe_resource base;
+ /* XXX Why aren't flushes taken care of by winsys automatically?
+ * Winsys seems to sometimes return a cached buffer instead of
+ * a mapped hardware buffer if this flush is commented out. */
+ if (ctx->is_resource_referenced(ctx, texture, sr.face, sr.level))
+ ctx->flush(ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
+
trans = CALLOC_STRUCT(r300_transfer);
if (trans) {
/* Initialize the transfer object. */
diff --git a/src/gallium/winsys/radeon/drm/radeon_r300.c b/src/gallium/winsys/radeon/drm/radeon_r300.c
index fb779e4033..94cd5281e2 100644
--- a/src/gallium/winsys/radeon/drm/radeon_r300.c
+++ b/src/gallium/winsys/radeon/drm/radeon_r300.c
@@ -86,7 +86,7 @@ static void *radeon_r300_winsys_buffer_map(struct r300_winsys_screen *ws,
unsigned usage)
{
struct pb_buffer *_buf = radeon_pb_buffer(buf);
-
+
return pb_map(_buf, usage);
}