diff options
Diffstat (limited to 'src/xvmc/intel_batchbuffer.h')
-rw-r--r-- | src/xvmc/intel_batchbuffer.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/xvmc/intel_batchbuffer.h b/src/xvmc/intel_batchbuffer.h new file mode 100644 index 000000000..7fae6f7d5 --- /dev/null +++ b/src/xvmc/intel_batchbuffer.h @@ -0,0 +1,57 @@ +#ifndef _INTEL_BATCHBUFFER_H +#define _INTEL_BATCHBUFFER_H + +/* #define VERBOSE 0 */ +#ifndef VERBOSE +extern int VERBOSE; +#endif + +#define BATCH_LOCALS unsigned char *batch_ptr; + +#define BEGIN_BATCH(n) \ + do { \ + assert(xvmc_driver->batch.space >= (n) *4); \ + if (xvmc_driver->batch.space < (n)*4) \ + intelFlushBatch(TRUE); \ + batch_ptr = xvmc_driver->batch.ptr; \ + } while (0) + +#define OUT_BATCH(n) \ + do { \ + *(unsigned int *)batch_ptr = (n); \ + batch_ptr += 4; \ + } while (0) + +#define OUT_RELOC(bo,read_domains,write_domains,delta) \ + do { \ + *(unsigned int *)batch_ptr = (delta) + bo->offset; \ + intel_batch_emit_reloc(bo, read_domains, write_domains, delta, batch_ptr); \ + batch_ptr += 4; \ + } while (0) + +#define OUT_BATCH_SHORT(n) \ + do { \ + *(short *)batch_ptr = (n); \ + batch_ptr += 2; \ + } while (0) + +#define OUT_BATCH_CHAR(n) \ + do { \ + *(char *)batch_ptr = (n); \ + batch_ptr ++; \ + } while (0) +#define ADVANCE_BATCH() \ + do { \ + xvmc_driver->batch.space -= (batch_ptr - xvmc_driver->batch.ptr);\ + xvmc_driver->batch.ptr = batch_ptr; \ + } while(0) + +extern void intelFlushBatch(Bool); +extern void intelBatchbufferData(const void *, unsigned, unsigned); +extern Bool intelInitBatchBuffer(void); +extern void intelFiniBatchBuffer(void); +extern void intelCmdIoctl(char *, unsigned); +extern void intel_batch_emit_reloc(dri_bo * bo, uint32_t read_domain, + uint32_t write_domain, uint32_t delta, + unsigned char *); +#endif /* _INTEL_BATCHBUFFER_H */ |