Subversion Repositories Kolibri OS

Rev

Rev 3480 | Rev 4104 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3480 Rev 3746
Line 234... Line 234...
234
		tile_width = 128;
234
		tile_width = 128;
235
	else
235
	else
236
		tile_width = 512;
236
		tile_width = 512;
Line 237... Line 237...
237
 
237
 
238
	/* check maximum stride & object size */
-
 
239
	if (INTEL_INFO(dev)->gen >= 4) {
238
	/* check maximum stride & object size */
240
		/* i965 stores the end address of the gtt mapping in the fence
239
	/* i965+ stores the end address of the gtt mapping in the fence
-
 
240
		 * reg, so dont bother to check the size */
-
 
241
	if (INTEL_INFO(dev)->gen >= 7) {
-
 
242
		if (stride / 128 > GEN7_FENCE_MAX_PITCH_VAL)
-
 
243
			return false;
241
		 * reg, so dont bother to check the size */
244
	} else if (INTEL_INFO(dev)->gen >= 4) {
242
		if (stride / 128 > I965_FENCE_MAX_PITCH_VAL)
245
		if (stride / 128 > I965_FENCE_MAX_PITCH_VAL)
243
			return false;
246
			return false;
244
	} else {
247
	} else {
245
		if (stride > 8192)
248
		if (stride > 8192)
Line 252... Line 255...
252
			if (size > I830_FENCE_MAX_SIZE_VAL << 19)
255
			if (size > I830_FENCE_MAX_SIZE_VAL << 19)
253
				return false;
256
				return false;
254
		}
257
		}
255
	}
258
	}
Line -... Line 259...
-
 
259
 
-
 
260
	if (stride < tile_width)
-
 
261
		return false;
256
 
262
 
257
	/* 965+ just needs multiples of tile width */
263
	/* 965+ just needs multiples of tile width */
258
	if (INTEL_INFO(dev)->gen >= 4) {
264
	if (INTEL_INFO(dev)->gen >= 4) {
259
		if (stride & (tile_width - 1))
265
		if (stride & (tile_width - 1))
260
			return false;
266
			return false;
261
		return true;
267
		return true;
Line 262... Line 268...
262
	}
268
	}
263
 
-
 
264
	/* Pre-965 needs power of two tile widths */
-
 
265
	if (stride < tile_width)
-
 
266
		return false;
269
 
267
 
270
	/* Pre-965 needs power of two tile widths */
Line 268... Line 271...
268
	if (stride & (stride - 1))
271
	if (stride & (stride - 1))
269
		return false;
272
		return false;
Line 490... Line 493...
490
}
493
}
Line 491... Line 494...
491
 
494
 
492
void
495
void
493
i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj)
496
i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj)
494
{
497
{
495
	struct scatterlist *sg;
-
 
496
	int page_count = obj->base.size >> PAGE_SHIFT;
498
	struct sg_page_iter sg_iter;
Line 497... Line 499...
497
	int i;
499
	int i;
498
 
500
 
Line -... Line 501...
-
 
501
	if (obj->bit_17 == NULL)
499
	if (obj->bit_17 == NULL)
502
		return;
500
		return;
503
 
501
 
504
	i = 0;
502
	for_each_sg(obj->pages->sgl, sg, page_count, i) {
505
	for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) {
503
		struct page *page = sg_page(sg);
506
		struct page *page = sg_page_iter_page(&sg_iter);
504
		char new_bit_17 = page_to_phys(page) >> 17;
507
		char new_bit_17 = page_to_phys(page) >> 17;
505
		if ((new_bit_17 & 0x1) !=
508
		if ((new_bit_17 & 0x1) !=
506
		    (test_bit(i, obj->bit_17) != 0)) {
509
		    (test_bit(i, obj->bit_17) != 0)) {
-
 
510
			i915_gem_swizzle_page(page);
507
			i915_gem_swizzle_page(page);
511
			set_page_dirty(page);
508
			set_page_dirty(page);
512
		}
Line 509... Line 513...
509
		}
513
		i++;
510
	}
514
	}
511
}
515
}
512
 
516
 
513
void
517
void
514
i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj)
518
i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj)
Line 515... Line 519...
515
{
519
{
516
	struct scatterlist *sg;
520
	struct sg_page_iter sg_iter;
Line 525... Line 529...
525
				  "record\n");
529
				  "record\n");
526
			return;
530
			return;
527
		}
531
		}
528
	}
532
	}
Line -... Line 533...
-
 
533
 
529
 
534
	i = 0;
530
	for_each_sg(obj->pages->sgl, sg, page_count, i) {
-
 
531
		struct page *page = sg_page(sg);
535
	for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) {
532
		if (page_to_phys(page) & (1 << 17))
536
		if (page_to_phys(sg_page_iter_page(&sg_iter)) & (1 << 17))
533
			__set_bit(i, obj->bit_17);
537
			__set_bit(i, obj->bit_17);
534
		else
538
		else
-
 
539
			__clear_bit(i, obj->bit_17);
535
			__clear_bit(i, obj->bit_17);
540
		i++;
536
	}
541
	}
Line 537... Line 542...
537
}
542
}