r600g: propagate usage flags in texture transfers

This commit is contained in:
Keith Whitwell 2010-10-15 14:44:30 +01:00
parent 04ae53ca8a
commit 14c0bbf469

View file

@ -31,6 +31,7 @@
#include <util/u_inlines.h>
#include <util/u_memory.h>
#include "state_tracker/drm_driver.h"
#include "pipebuffer/pb_buffer.h"
#include "r600_pipe.h"
#include "r600_resource.h"
#include "r600_state_inlines.h"
@ -537,6 +538,7 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,
enum pipe_format format = transfer->resource->format;
struct radeon *radeon = (struct radeon *)ctx->screen->winsys;
unsigned offset = 0;
unsigned usage = 0;
char *map;
if (rtransfer->linear_texture) {
@ -553,7 +555,30 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,
transfer->box.y / util_format_get_blockheight(format) * transfer->stride +
transfer->box.x / util_format_get_blockwidth(format) * util_format_get_blocksize(format);
}
map = r600_bo_map(radeon, bo, 0, ctx);
if (transfer->usage & PIPE_TRANSFER_WRITE) {
usage |= PB_USAGE_CPU_WRITE;
if (transfer->usage & PIPE_TRANSFER_DISCARD) {
}
if (transfer->usage & PIPE_TRANSFER_FLUSH_EXPLICIT) {
}
}
if (transfer->usage & PIPE_TRANSFER_READ) {
usage |= PB_USAGE_CPU_READ;
}
if (transfer->usage & PIPE_TRANSFER_DONTBLOCK) {
usage |= PB_USAGE_DONTBLOCK;
}
if (transfer->usage & PIPE_TRANSFER_UNSYNCHRONIZED) {
usage |= PB_USAGE_UNSYNCHRONIZED;
}
map = r600_bo_map(radeon, bo, usage, ctx);
if (!map) {
return NULL;
}