mirror of
				https://github.com/tiagovignatti/intel-gpu-tools.git
				synced 2025-11-04 03:58:27 +00:00 
			
		
		
		
	bdw: Update obvious missing blit support
This provides a macro that allows us to update all the arbitrary blit commands we have stuck throughout the code. It assumes we don't actually use 64b relocs (which is currently true). This also allows us to easily find all the areas we need to update later when we really use the upper dword. This block was done mostly with a sed job, and represents the easier in test blit implementations. v2 by Oscar: s/OUT_BATCH/BEGIN_BATCH in BLIT_COPY_BATCH_START CC: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
This commit is contained in:
		
							parent
							
								
									26f09a9189
								
							
						
					
					
						commit
						f4dfa37e85
					
				@ -94,19 +94,18 @@ do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
				
			|||||||
	drm_intel_bo_subdata(src_bo, 0, sizeof(data), data);
 | 
						drm_intel_bo_subdata(src_bo, 0, sizeof(data), data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Render the junk to the dst. */
 | 
						/* Render the junk to the dst. */
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  (width * 4) /* dst pitch */);
 | 
							  (width * 4) /* dst pitch */);
 | 
				
			||||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
						OUT_BATCH(0); /* dst x1,y1 */
 | 
				
			||||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
						OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
				
			||||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
						OUT_BATCH(0); /* src x1,y1 */
 | 
				
			||||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
						OUT_BATCH(width * 4); /* src pitch */
 | 
				
			||||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -94,19 +94,18 @@ do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
				
			|||||||
	drm_intel_gem_bo_unmap_gtt(src_bo);
 | 
						drm_intel_gem_bo_unmap_gtt(src_bo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Render the junk to the dst. */
 | 
						/* Render the junk to the dst. */
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  (width * 4) /* dst pitch */);
 | 
							  (width * 4) /* dst pitch */);
 | 
				
			||||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
						OUT_BATCH(0); /* dst x1,y1 */
 | 
				
			||||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
						OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
				
			||||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
						OUT_BATCH(0); /* src x1,y1 */
 | 
				
			||||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
						OUT_BATCH(width * 4); /* src pitch */
 | 
				
			||||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -97,19 +97,18 @@ do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
				
			|||||||
	drm_intel_bo_unmap(src_bo);
 | 
						drm_intel_bo_unmap(src_bo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Render the junk to the dst. */
 | 
						/* Render the junk to the dst. */
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  (width * 4) /* dst pitch */);
 | 
							  (width * 4) /* dst pitch */);
 | 
				
			||||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
						OUT_BATCH(0); /* dst x1,y1 */
 | 
				
			||||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
						OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
				
			||||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
						OUT_BATCH(0); /* src x1,y1 */
 | 
				
			||||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
						OUT_BATCH(width * 4); /* src pitch */
 | 
				
			||||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -107,19 +107,18 @@ do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Render the junk to the dst. */
 | 
						/* Render the junk to the dst. */
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  (width * 4) /* dst pitch */);
 | 
							  (width * 4) /* dst pitch */);
 | 
				
			||||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
						OUT_BATCH(0); /* dst x1,y1 */
 | 
				
			||||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
						OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
				
			||||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
						OUT_BATCH(0); /* src x1,y1 */
 | 
				
			||||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
						OUT_BATCH(width * 4); /* src pitch */
 | 
				
			||||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -80,7 +80,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define XY_SETUP_CLIP_BLT_CMD		((2<<29)|(3<<22)|1)
 | 
					#define XY_SETUP_CLIP_BLT_CMD		((2<<29)|(3<<22)|1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define XY_SRC_COPY_BLT_CMD		((2<<29)|(0x53<<22)|6)
 | 
					#define XY_SRC_COPY_BLT_CMD		((2<<29)|(0x53<<22))
 | 
				
			||||||
#define XY_SRC_COPY_BLT_WRITE_ALPHA	(1<<21)
 | 
					#define XY_SRC_COPY_BLT_WRITE_ALPHA	(1<<21)
 | 
				
			||||||
#define XY_SRC_COPY_BLT_WRITE_RGB	(1<<20)
 | 
					#define XY_SRC_COPY_BLT_WRITE_RGB	(1<<20)
 | 
				
			||||||
#define XY_SRC_COPY_BLT_SRC_TILED	(1<<15)
 | 
					#define XY_SRC_COPY_BLT_SRC_TILED	(1<<15)
 | 
				
			||||||
 | 
				
			|||||||
@ -239,17 +239,18 @@ intel_blt_copy(struct intel_batchbuffer *batch,
 | 
				
			|||||||
	       CHECK_RANGE(src_pitch) && CHECK_RANGE(dst_pitch));
 | 
						       CHECK_RANGE(src_pitch) && CHECK_RANGE(dst_pitch));
 | 
				
			||||||
#undef CHECK_RANGE
 | 
					#undef CHECK_RANGE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(batch->devid, cmd_bits);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD | cmd_bits);
 | 
					 | 
				
			||||||
	OUT_BATCH((br13_bits) |
 | 
						OUT_BATCH((br13_bits) |
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  dst_pitch);
 | 
							  dst_pitch);
 | 
				
			||||||
	OUT_BATCH((dst_y1 << 16) | dst_x1); /* dst x1,y1 */
 | 
						OUT_BATCH((dst_y1 << 16) | dst_x1); /* dst x1,y1 */
 | 
				
			||||||
	OUT_BATCH(((dst_y1 + height) << 16) | (dst_x1 + width)); /* dst x2,y2 */
 | 
						OUT_BATCH(((dst_y1 + height) << 16) | (dst_x1 + width)); /* dst x2,y2 */
 | 
				
			||||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	OUT_BATCH((src_y1 << 16) | src_x1); /* src x1,y1 */
 | 
						OUT_BATCH((src_y1 << 16) | src_x1); /* src x1,y1 */
 | 
				
			||||||
	OUT_BATCH(src_pitch);
 | 
						OUT_BATCH(src_pitch);
 | 
				
			||||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -96,6 +96,28 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
 | 
				
			|||||||
#define ADVANCE_BATCH() do {						\
 | 
					#define ADVANCE_BATCH() do {						\
 | 
				
			||||||
} while(0)
 | 
					} while(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BLIT_COPY_BATCH_START(devid, flags) do { \
 | 
				
			||||||
 | 
						if (intel_gen(devid) >= 8) { \
 | 
				
			||||||
 | 
							BEGIN_BATCH(10); \
 | 
				
			||||||
 | 
							OUT_BATCH(XY_SRC_COPY_BLT_CMD | \
 | 
				
			||||||
 | 
									XY_SRC_COPY_BLT_WRITE_ALPHA | \
 | 
				
			||||||
 | 
									XY_SRC_COPY_BLT_WRITE_RGB | \
 | 
				
			||||||
 | 
									flags | 8); \
 | 
				
			||||||
 | 
						} else { \
 | 
				
			||||||
 | 
							BEGIN_BATCH(8); \
 | 
				
			||||||
 | 
							OUT_BATCH(XY_SRC_COPY_BLT_CMD | \
 | 
				
			||||||
 | 
									XY_SRC_COPY_BLT_WRITE_ALPHA | \
 | 
				
			||||||
 | 
									XY_SRC_COPY_BLT_WRITE_RGB | \
 | 
				
			||||||
 | 
									flags | 6); \
 | 
				
			||||||
 | 
						} \
 | 
				
			||||||
 | 
					} while(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BLIT_RELOC_UDW(devid) do { \
 | 
				
			||||||
 | 
						if (intel_gen(devid) >= 8) { \
 | 
				
			||||||
 | 
							OUT_BATCH(0); \
 | 
				
			||||||
 | 
						} \
 | 
				
			||||||
 | 
					} while(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
intel_blt_copy(struct intel_batchbuffer *batch,
 | 
					intel_blt_copy(struct intel_batchbuffer *batch,
 | 
				
			||||||
	      drm_intel_bo *src_bo, int src_x1, int src_y1, int src_pitch,
 | 
						      drm_intel_bo *src_bo, int src_x1, int src_y1, int src_pitch,
 | 
				
			||||||
 | 
				
			|||||||
@ -2713,7 +2713,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define XY_SETUP_CLIP_BLT_CMD		((2<<29)|(3<<22)|1)
 | 
					#define XY_SETUP_CLIP_BLT_CMD		((2<<29)|(3<<22)|1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define XY_SRC_COPY_BLT_CMD		((2<<29)|(0x53<<22)|6)
 | 
					#define XY_SRC_COPY_BLT_CMD		((2<<29)|(0x53<<22))
 | 
				
			||||||
#define XY_SRC_COPY_BLT_WRITE_ALPHA	(1<<21)
 | 
					#define XY_SRC_COPY_BLT_WRITE_ALPHA	(1<<21)
 | 
				
			||||||
#define XY_SRC_COPY_BLT_WRITE_RGB	(1<<20)
 | 
					#define XY_SRC_COPY_BLT_WRITE_RGB	(1<<20)
 | 
				
			||||||
#define XY_SRC_COPY_BLT_SRC_TILED	(1<<15)
 | 
					#define XY_SRC_COPY_BLT_SRC_TILED	(1<<15)
 | 
				
			||||||
 | 
				
			|||||||
@ -80,19 +80,18 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	/* put some load onto the gpu to keep the light buffers active for long
 | 
						/* put some load onto the gpu to keep the light buffers active for long
 | 
				
			||||||
	 * enough */
 | 
						 * enough */
 | 
				
			||||||
	for (i = 0; i < 10000; i++) {
 | 
						for (i = 0; i < 10000; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  4096);
 | 
								  4096);
 | 
				
			||||||
		OUT_BATCH(0); /* dst x1,y1 */
 | 
							OUT_BATCH(0); /* dst x1,y1 */
 | 
				
			||||||
		OUT_BATCH((1024 << 16) | 512);
 | 
							OUT_BATCH((1024 << 16) | 512);
 | 
				
			||||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
							OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
				
			||||||
		OUT_BATCH(4096);
 | 
							OUT_BATCH(4096);
 | 
				
			||||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -77,20 +77,18 @@ bad_blit(drm_intel_bo *src_bo, uint32_t devid)
 | 
				
			|||||||
		cmd_bits |= XY_SRC_COPY_BLT_DST_TILED;
 | 
							cmd_bits |= XY_SRC_COPY_BLT_DST_TILED;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(devid, cmd_bits);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB |
 | 
					 | 
				
			||||||
		  cmd_bits);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  dst_pitch);
 | 
							  dst_pitch);
 | 
				
			||||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
						OUT_BATCH(0); /* dst x1,y1 */
 | 
				
			||||||
	OUT_BATCH((64 << 16) | 64); /* 64x64 blit */
 | 
						OUT_BATCH((64 << 16) | 64); /* 64x64 blit */
 | 
				
			||||||
	OUT_BATCH(BAD_GTT_DEST);
 | 
						OUT_BATCH(BAD_GTT_DEST);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
						OUT_BATCH(0); /* src x1,y1 */
 | 
				
			||||||
	OUT_BATCH(src_pitch);
 | 
						OUT_BATCH(src_pitch);
 | 
				
			||||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -59,19 +59,18 @@ int fd;
 | 
				
			|||||||
static void
 | 
					static void
 | 
				
			||||||
copy_bo(drm_intel_bo *src, drm_intel_bo *dst)
 | 
					copy_bo(drm_intel_bo *src, drm_intel_bo *dst)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(devid, 0);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  4096);
 | 
							  4096);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH((BO_SIZE/4096) << 16 | 1024);
 | 
						OUT_BATCH((BO_SIZE/4096) << 16 | 1024);
 | 
				
			||||||
	OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH(4096);
 | 
						OUT_BATCH(4096);
 | 
				
			||||||
	OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -132,7 +132,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		/* copy the sample batch with the gpu to the new one, so that we
 | 
							/* copy the sample batch with the gpu to the new one, so that we
 | 
				
			||||||
		 * also test the unmappable part of the gtt. */
 | 
							 * also test the unmappable part of the gtt. */
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
							OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
								  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
								  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
				
			||||||
@ -142,9 +142,11 @@ int main(int argc, char **argv)
 | 
				
			|||||||
		OUT_BATCH(0); /* dst y1,x1 */
 | 
							OUT_BATCH(0); /* dst y1,x1 */
 | 
				
			||||||
		OUT_BATCH((1 << 16) | 1024);
 | 
							OUT_BATCH((1 << 16) | 1024);
 | 
				
			||||||
		OUT_RELOC(batch_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC(batch_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		OUT_BATCH((0 << 16) | 0); /* src x1, y1 */
 | 
							OUT_BATCH((0 << 16) | 0); /* src x1, y1 */
 | 
				
			||||||
		OUT_BATCH(4096);
 | 
							OUT_BATCH(4096);
 | 
				
			||||||
		OUT_RELOC(sample_batch_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC(sample_batch_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		intel_batchbuffer_flush(batch);
 | 
							intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -61,19 +61,18 @@ dummy_reloc_loop(void)
 | 
				
			|||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 0x800; i++) {
 | 
						for (i = 0; i < 0x800; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  4*4096);
 | 
								  4*4096);
 | 
				
			||||||
		OUT_BATCH(2048 << 16 | 0);
 | 
							OUT_BATCH(2048 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH((4096) << 16 | (2048));
 | 
							OUT_BATCH((4096) << 16 | (2048));
 | 
				
			||||||
		OUT_RELOC_FENCED(blt_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(blt_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(4*4096);
 | 
							OUT_BATCH(4*4096);
 | 
				
			||||||
		OUT_RELOC_FENCED(blt_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(blt_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
		intel_batchbuffer_flush(batch);
 | 
							intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -81,20 +81,18 @@ static void emit_dummy_load(void)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 5; i++) {
 | 
						for (i = 0; i < 5; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid, tile_flags);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB |
 | 
					 | 
				
			||||||
			  tile_flags);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  pitch);
 | 
								  pitch);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 1024);
 | 
							OUT_BATCH(0 << 16 | 1024);
 | 
				
			||||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
							OUT_BATCH((2048) << 16 | (2048));
 | 
				
			||||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(pitch);
 | 
							OUT_BATCH(pitch);
 | 
				
			||||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
							if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -87,21 +87,20 @@ int main(int argc, char **argv)
 | 
				
			|||||||
		pitch /= 4;
 | 
							pitch /= 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 10000; i++) {
 | 
						for (i = 0; i < 10000; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid,
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
									XY_SRC_COPY_BLT_SRC_TILED |
 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
									XY_SRC_COPY_BLT_DST_TILED);
 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_SRC_TILED |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_DST_TILED);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  pitch);
 | 
								  pitch);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 1024);
 | 
							OUT_BATCH(0 << 16 | 1024);
 | 
				
			||||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
							OUT_BATCH((2048) << 16 | (2048));
 | 
				
			||||||
		OUT_RELOC_FENCED(bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(pitch);
 | 
							OUT_BATCH(pitch);
 | 
				
			||||||
		OUT_RELOC_FENCED(bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
							if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -61,19 +61,18 @@ int fd;
 | 
				
			|||||||
static void
 | 
					static void
 | 
				
			||||||
copy_bo(drm_intel_bo *src, drm_intel_bo *dst)
 | 
					copy_bo(drm_intel_bo *src, drm_intel_bo *dst)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(devid, 0);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  4096);
 | 
							  4096);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH((BO_SIZE/4096) << 16 | 1024);
 | 
						OUT_BATCH((BO_SIZE/4096) << 16 | 1024);
 | 
				
			||||||
	OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH(4096);
 | 
						OUT_BATCH(4096);
 | 
				
			||||||
	OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -124,20 +124,18 @@ static void emit_dummy_load(int pitch)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 5; i++) {
 | 
						for (i = 0; i < 5; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid, tile_flags);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB |
 | 
					 | 
				
			||||||
			  tile_flags);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  pitch);
 | 
								  pitch);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 1024);
 | 
							OUT_BATCH(0 << 16 | 1024);
 | 
				
			||||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
							OUT_BATCH((2048) << 16 | (2048));
 | 
				
			||||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(pitch);
 | 
							OUT_BATCH(pitch);
 | 
				
			||||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
							if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -116,20 +116,18 @@ static void emit_dummy_load(int pitch)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 10; i++) {
 | 
						for (i = 0; i < 10; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid, tile_flags);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB |
 | 
					 | 
				
			||||||
			  tile_flags);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  pitch);
 | 
								  pitch);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 1024);
 | 
							OUT_BATCH(0 << 16 | 1024);
 | 
				
			||||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
							OUT_BATCH((2048) << 16 | (2048));
 | 
				
			||||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(pitch);
 | 
							OUT_BATCH(pitch);
 | 
				
			||||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
							if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -177,19 +177,18 @@ static void blt_copy(struct intel_batchbuffer *batch,
 | 
				
			|||||||
		     unsigned w, unsigned h,
 | 
							     unsigned w, unsigned h,
 | 
				
			||||||
		     struct scratch_buf *dst, unsigned dst_x, unsigned dst_y)
 | 
							     struct scratch_buf *dst, unsigned dst_x, unsigned dst_y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  dst->stride);
 | 
							  dst->stride);
 | 
				
			||||||
	OUT_BATCH((dst_y << 16) | dst_x); /* dst x1,y1 */
 | 
						OUT_BATCH((dst_y << 16) | dst_x); /* dst x1,y1 */
 | 
				
			||||||
	OUT_BATCH(((dst_y + h) << 16) | (dst_x + w)); /* dst x2,y2 */
 | 
						OUT_BATCH(((dst_y + h) << 16) | (dst_x + w)); /* dst x2,y2 */
 | 
				
			||||||
	OUT_RELOC(dst->bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC(dst->bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	OUT_BATCH((src_y << 16) | src_x); /* src x1,y1 */
 | 
						OUT_BATCH((src_y << 16) | src_x); /* src x1,y1 */
 | 
				
			||||||
	OUT_BATCH(src->stride);
 | 
						OUT_BATCH(src->stride);
 | 
				
			||||||
	OUT_RELOC(src->bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC(src->bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -85,19 +85,18 @@ static void do_test(uint32_t tiling, unsigned stride,
 | 
				
			|||||||
	busy_bo = drm_intel_bo_alloc(bufmgr, "busy bo bo", 16*1024*1024, 4096);
 | 
						busy_bo = drm_intel_bo_alloc(bufmgr, "busy bo bo", 16*1024*1024, 4096);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 250; i++) {
 | 
						for (i = 0; i < 250; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  2*1024*4);
 | 
								  2*1024*4);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 1024);
 | 
							OUT_BATCH(0 << 16 | 1024);
 | 
				
			||||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
							OUT_BATCH((2048) << 16 | (2048));
 | 
				
			||||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(2*1024*4);
 | 
							OUT_BATCH(2*1024*4);
 | 
				
			||||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
							if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
@ -158,20 +157,18 @@ static void do_test(uint32_t tiling, unsigned stride,
 | 
				
			|||||||
		blt_bits = XY_SRC_COPY_BLT_SRC_TILED;
 | 
							blt_bits = XY_SRC_COPY_BLT_SRC_TILED;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(devid, blt_bits);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  blt_bits |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  stride);
 | 
							  stride);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH((TEST_HEIGHT(stride)) << 16 | (TEST_WIDTH(stride)));
 | 
						OUT_BATCH((TEST_HEIGHT(stride)) << 16 | (TEST_WIDTH(stride)));
 | 
				
			||||||
	OUT_RELOC_FENCED(target_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC_FENCED(target_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH(blt_stride);
 | 
						OUT_BATCH(blt_stride);
 | 
				
			||||||
	OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -186,19 +183,18 @@ static void do_test(uint32_t tiling, unsigned stride,
 | 
				
			|||||||
	/* Note: We don't care about gen4+ here because the blitter doesn't use
 | 
						/* Note: We don't care about gen4+ here because the blitter doesn't use
 | 
				
			||||||
	 * fences there. So not setting tiling flags on the tiled buffer is ok.
 | 
						 * fences there. So not setting tiling flags on the tiled buffer is ok.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(devid, 0);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  stride_after);
 | 
							  stride_after);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH((1) << 16 | (1));
 | 
						OUT_BATCH((1) << 16 | (1));
 | 
				
			||||||
	OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH(stride_after);
 | 
						OUT_BATCH(stride_after);
 | 
				
			||||||
	OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -141,20 +141,18 @@ static void emit_blt(drm_intel_bo *src_bo, uint32_t src_tiling, unsigned src_pit
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* copy lower half to upper half */
 | 
						/* copy lower half to upper half */
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(devid, cmd_bits);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB |
 | 
					 | 
				
			||||||
		  cmd_bits);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  dst_pitch);
 | 
							  dst_pitch);
 | 
				
			||||||
	OUT_BATCH(dst_y << 16 | dst_x);
 | 
						OUT_BATCH(dst_y << 16 | dst_x);
 | 
				
			||||||
	OUT_BATCH((dst_y+h) << 16 | (dst_x+w));
 | 
						OUT_BATCH((dst_y+h) << 16 | (dst_x+w));
 | 
				
			||||||
	OUT_RELOC_FENCED(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC_FENCED(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	OUT_BATCH(src_y << 16 | src_x);
 | 
						OUT_BATCH(src_y << 16 | src_x);
 | 
				
			||||||
	OUT_BATCH(src_pitch);
 | 
						OUT_BATCH(src_pitch);
 | 
				
			||||||
	OUT_RELOC_FENCED(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC_FENCED(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
						if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -82,20 +82,18 @@ copy_bo(drm_intel_bo *src, int src_tiled,
 | 
				
			|||||||
		cmd_bits |= XY_SRC_COPY_BLT_SRC_TILED;
 | 
							cmd_bits |= XY_SRC_COPY_BLT_SRC_TILED;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BEGIN_BATCH(8);
 | 
						BLIT_COPY_BATCH_START(devid, cmd_bits);
 | 
				
			||||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
		  XY_SRC_COPY_BLT_WRITE_RGB |
 | 
					 | 
				
			||||||
		  cmd_bits);
 | 
					 | 
				
			||||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
						OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
		  (0xcc << 16) | /* copy ROP */
 | 
							  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
		  dst_pitch);
 | 
							  dst_pitch);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH(BO_SIZE/scratch_pitch << 16 | 1024);
 | 
						OUT_BATCH(BO_SIZE/scratch_pitch << 16 | 1024);
 | 
				
			||||||
	OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
						OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	OUT_BATCH(0 << 16 | 0);
 | 
						OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
	OUT_BATCH(src_pitch);
 | 
						OUT_BATCH(src_pitch);
 | 
				
			||||||
	OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
						OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
						BLIT_RELOC_UDW(devid);
 | 
				
			||||||
	ADVANCE_BATCH();
 | 
						ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intel_batchbuffer_flush(batch);
 | 
						intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -85,19 +85,18 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	busy_bo = drm_intel_bo_alloc(bufmgr, "busy bo bo", 16*1024*1024, 4096);
 | 
						busy_bo = drm_intel_bo_alloc(bufmgr, "busy bo bo", 16*1024*1024, 4096);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 250; i++) {
 | 
						for (i = 0; i < 250; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  2*1024*4);
 | 
								  2*1024*4);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 1024);
 | 
							OUT_BATCH(0 << 16 | 1024);
 | 
				
			||||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
							OUT_BATCH((2048) << 16 | (2048));
 | 
				
			||||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(2*1024*4);
 | 
							OUT_BATCH(2*1024*4);
 | 
				
			||||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
							if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
@ -121,19 +120,18 @@ int main(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		drm_intel_bo_disable_reuse(test_bo);
 | 
							drm_intel_bo_disable_reuse(test_bo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  TEST_STRIDE);
 | 
								  TEST_STRIDE);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH((1) << 16 | (1));
 | 
							OUT_BATCH((1) << 16 | (1));
 | 
				
			||||||
		OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(TEST_STRIDE);
 | 
							OUT_BATCH(TEST_STRIDE);
 | 
				
			||||||
		OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
		intel_batchbuffer_flush(batch);
 | 
							intel_batchbuffer_flush(batch);
 | 
				
			||||||
		printf("test bo offset: %#lx\n", test_bo->offset);
 | 
							printf("test bo offset: %#lx\n", test_bo->offset);
 | 
				
			||||||
@ -143,19 +141,18 @@ int main(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* launch a few batchs to ensure the damaged slab objects get reused. */
 | 
						/* launch a few batchs to ensure the damaged slab objects get reused. */
 | 
				
			||||||
	for (i = 0; i < 10; i++) {
 | 
						for (i = 0; i < 10; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  2*1024*4);
 | 
								  2*1024*4);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 1024);
 | 
							OUT_BATCH(0 << 16 | 1024);
 | 
				
			||||||
		OUT_BATCH((1) << 16 | (1));
 | 
							OUT_BATCH((1) << 16 | (1));
 | 
				
			||||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(2*1024*4);
 | 
							OUT_BATCH(2*1024*4);
 | 
				
			||||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
							if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -73,19 +73,18 @@ int main(int argc, char **argv)
 | 
				
			|||||||
		load_bo = drm_intel_bo_alloc(bufmgr, "target bo", 1024*4096, 4096);
 | 
							load_bo = drm_intel_bo_alloc(bufmgr, "target bo", 1024*4096, 4096);
 | 
				
			||||||
		igt_assert(load_bo);
 | 
							igt_assert(load_bo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  4096);
 | 
								  4096);
 | 
				
			||||||
		OUT_BATCH(0); /* dst x1,y1 */
 | 
							OUT_BATCH(0); /* dst x1,y1 */
 | 
				
			||||||
		OUT_BATCH((1024 << 16) | 512);
 | 
							OUT_BATCH((1024 << 16) | 512);
 | 
				
			||||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
							OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
				
			||||||
		OUT_BATCH(4096);
 | 
							OUT_BATCH(4096);
 | 
				
			||||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		intel_batchbuffer_flush(batch);
 | 
							intel_batchbuffer_flush(batch);
 | 
				
			||||||
 | 
				
			|||||||
@ -78,19 +78,18 @@ static void run_test(int ring)
 | 
				
			|||||||
	/* put some load onto the gpu to keep the light buffers active for long
 | 
						/* put some load onto the gpu to keep the light buffers active for long
 | 
				
			||||||
	 * enough */
 | 
						 * enough */
 | 
				
			||||||
	for (i = 0; i < 1000; i++) {
 | 
						for (i = 0; i < 1000; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(batch->devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  4096);
 | 
								  4096);
 | 
				
			||||||
		OUT_BATCH(0); /* dst x1,y1 */
 | 
							OUT_BATCH(0); /* dst x1,y1 */
 | 
				
			||||||
		OUT_BATCH((1024 << 16) | 512);
 | 
							OUT_BATCH((1024 << 16) | 512);
 | 
				
			||||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
							OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
				
			||||||
		OUT_BATCH(4096);
 | 
							OUT_BATCH(4096);
 | 
				
			||||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(batch->devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -166,19 +166,18 @@ static void emit_dummy_load__bcs(struct test_output *o)
 | 
				
			|||||||
	igt_assert(target_bo);
 | 
						igt_assert(target_bo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < limit; i++) {
 | 
						for (i = 0; i < limit; i++) {
 | 
				
			||||||
		BEGIN_BATCH(8);
 | 
							BLIT_COPY_BATCH_START(devid, 0);
 | 
				
			||||||
		OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
					 | 
				
			||||||
			  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
					 | 
				
			||||||
		OUT_BATCH((3 << 24) | /* 32 bits */
 | 
							OUT_BATCH((3 << 24) | /* 32 bits */
 | 
				
			||||||
			  (0xcc << 16) | /* copy ROP */
 | 
								  (0xcc << 16) | /* copy ROP */
 | 
				
			||||||
			  pitch);
 | 
								  pitch);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(o->fb_height << 16 | o->fb_width);
 | 
							OUT_BATCH(o->fb_height << 16 | o->fb_width);
 | 
				
			||||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
							OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		OUT_BATCH(0 << 16 | 0);
 | 
							OUT_BATCH(0 << 16 | 0);
 | 
				
			||||||
		OUT_BATCH(pitch);
 | 
							OUT_BATCH(pitch);
 | 
				
			||||||
		OUT_RELOC_FENCED(target_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
							OUT_RELOC_FENCED(target_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
				
			||||||
 | 
							BLIT_RELOC_UDW(devid);
 | 
				
			||||||
		ADVANCE_BATCH();
 | 
							ADVANCE_BATCH();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
							if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user