#include "util/u_memory.h"
#include "brw_batchbuffer.h"
-//#include "brw_decode.h"
#include "brw_reg.h"
#include "brw_winsys.h"
#include "brw_debug.h"
#include "brw_structs.h"
-#include "intel_decode.h"
-#define USE_MALLOC_BUFFER 1
#define ALWAYS_EMIT_MI_FLUSH 1
enum pipe_error
if (ret)
return ret;
- if (batch->malloc_buffer)
- batch->map = batch->malloc_buffer;
- else
- batch->map = batch->sws->bo_map(batch->buf,
- BRW_DATA_BATCH_BUFFER,
- GL_TRUE);
-
batch->size = BRW_BATCH_SIZE;
+
+ /* With map_range semantics, the winsys can decide whether to
+ * inject a malloc'ed bounce buffer instead of mapping directly.
+ */
+ batch->map = batch->sws->bo_map(batch->buf,
+ BRW_DATA_BATCH_BUFFER,
+ 0, batch->size,
+ GL_TRUE,
+ GL_TRUE,
+ GL_TRUE);
+
batch->ptr = batch->map;
return PIPE_OK;
}
{
struct brw_batchbuffer *batch = CALLOC_STRUCT(brw_batchbuffer);
- batch->use_malloc_buffer = USE_MALLOC_BUFFER;
- if (batch->use_malloc_buffer) {
- batch->malloc_buffer = MALLOC(BRW_BATCH_SIZE);
- }
-
batch->sws = sws;
batch->chipset = chipset;
brw_batchbuffer_reset(batch);
void
brw_batchbuffer_free(struct brw_batchbuffer *batch)
{
- if (batch->malloc_buffer) {
- FREE(batch->malloc_buffer);
- batch->map = NULL;
- }
- else if (batch->map) {
+ if (batch->map) {
batch->sws->bo_unmap(batch->buf);
batch->map = NULL;
}
batch->ptr += 4;
used = batch->ptr - batch->map;
- if (batch->use_malloc_buffer) {
- batch->sws->bo_subdata(batch->buf,
- BRW_DATA_BATCH_BUFFER,
- 0, used,
- batch->map );
- batch->map = NULL;
- }
- else {
- batch->sws->bo_unmap(batch->buf);
- batch->map = NULL;
- }
-
+ batch->sws->bo_flush_range(batch->buf, 0, used);
+ batch->sws->bo_unmap(batch->buf);
+ batch->map = NULL;
batch->ptr = NULL;
batch->sws->bo_exec(batch->buf, used );
enum pipe_error
brw_batchbuffer_emit_reloc(struct brw_batchbuffer *batch,
struct brw_winsys_buffer *buffer,
- uint32_t usage,
+ enum brw_buffer_usage usage,
uint32_t delta)
{
int ret;