Subversion Repositories Kolibri OS

Rev

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

Rev 3280 Rev 3291
Line 8... Line 8...
8
#include 
8
#include 
Line 9... Line 9...
9
 
9
 
10
static struct sna_fb sna_fb;
10
static struct sna_fb sna_fb;
Line -... Line 11...
-
 
11
static struct kgem_bo *mask_bo;
-
 
12
 
-
 
13
static int mask_width, mask_height;
-
 
14
 
-
 
15
static inline void delay(uint32_t time)
-
 
16
{
-
 
17
    __asm__ __volatile__(
-
 
18
    "int $0x40"
-
 
19
    ::"a"(5), "b"(time)
-
 
20
    :"memory");
11
static struct kgem_bo *mask_bo;
21
};
12
 
22
 
13
typedef struct __attribute__((packed))
23
typedef struct __attribute__((packed))
14
{
24
{
15
  unsigned      handle;
25
  unsigned      handle;
Line 94... Line 104...
94
//    pthread_mutex_init(&sna->render.lock, NULL);
104
//    pthread_mutex_init(&sna->render.lock, NULL);
95
//    pthread_cond_init(&sna->render.wait, NULL);
105
//    pthread_cond_init(&sna->render.wait, NULL);
96
    sna->render.active = 0;
106
    sna->render.active = 0;
97
}
107
}
Line 98... Line 108...
98
 
108
 
99
bool sna_accel_init(struct sna *sna)
109
int sna_accel_init(struct sna *sna)
100
{
110
{
Line 101... Line 111...
101
    const char *backend;
111
    const char *backend;
102
 
112
 
Line 120... Line 130...
120
		if (gen6_render_init(sna))
130
		if (gen6_render_init(sna))
121
			backend = "SandyBridge";
131
			backend = "SandyBridge";
122
	} else if (sna->info->gen >= 050) {
132
	} else if (sna->info->gen >= 050) {
123
		if (gen5_render_init(sna))
133
		if (gen5_render_init(sna))
124
			backend = "Ironlake";
134
			backend = "Ironlake";
125
/*	} else if (sna->info->gen >= 040) {
135
	} else if (sna->info->gen >= 040) {
126
		if (gen4_render_init(sna))
136
		if (gen4_render_init(sna))
127
			backend = "Broadwater/Crestline";
137
			backend = "Broadwater/Crestline";
128
	} else if (sna->info->gen >= 030) {
138
/*	} else if (sna->info->gen >= 030) {
129
		if (gen3_render_init(sna))
139
		if (gen3_render_init(sna))
130
			backend = "gen3";
-
 
131
	} else if (sna->info->gen >= 020) {
-
 
132
		if (gen2_render_init(sna))
-
 
133
			backend = "gen2"; */
140
			backend = "gen3"; */
134
	}
141
	}
Line 135... Line 142...
135
 
142
 
136
	DBG(("%s(backend=%s, prefer_gpu=%x)\n",
143
	DBG(("%s(backend=%s, prefer_gpu=%x)\n",
Line 154... Line 161...
154
    static struct pci_device device;
161
    static struct pci_device device;
155
    struct sna *sna;
162
    struct sna *sna;
Line 156... Line 163...
156
 
163
 
Line 157... Line 164...
157
    DBG(("%s\n", __FUNCTION__));
164
    DBG(("%s\n", __FUNCTION__));
158
 
165
 
159
    sna = malloc(sizeof(struct sna));
166
    sna = malloc(sizeof(*sna));
-
 
167
    if (sna == NULL)
-
 
168
        return 0;
Line 160... Line 169...
160
    if (sna == NULL)
169
 
161
        return false;
170
    memset(sna, 0, sizeof(*sna));
162
 
171
    
163
    io.handle   = service;
172
    io.handle   = service;
164
    io.io_code  = SRV_GET_PCI_INFO;
173
    io.io_code  = SRV_GET_PCI_INFO;
165
    io.input    = &device;
174
    io.input    = &device;
Line 166... Line 175...
166
    io.inp_size = sizeof(device);
175
    io.inp_size = sizeof(device);
-
 
176
    io.output   = NULL;
-
 
177
    io.out_size = 0;
167
    io.output   = NULL;
178
 
-
 
179
    if (call_service(&io)!=0)
Line 168... Line 180...
168
    io.out_size = 0;
180
    {
Line 169... Line 181...
169
 
181
        free(sna); 
Line 170... Line 182...
170
    if (call_service(&io)!=0)
182
        return 0;
-
 
183
    };
-
 
184
    
171
        return false;
185
    sna->PciInfo = &device;
172
 
186
 
173
    sna->PciInfo = &device;
187
  	sna->info = intel_detect_chipset(sna->PciInfo);
174
 
188
 
175
  	sna->info = intel_detect_chipset(sna->PciInfo);
189
    kgem_init(&sna->kgem, service, sna->PciInfo, sna->info->gen);
Line 200... Line 214...
200
    /* Default fail-safe value of 75 Hz */
214
    /* Default fail-safe value of 75 Hz */
201
//    sna->vblank_interval = 1000 * 1000 * 1000 / 75;
215
//    sna->vblank_interval = 1000 * 1000 * 1000 / 75;
Line 202... Line 216...
202
 
216
 
Line 203... Line 217...
203
    sna->flags = 0;
217
    sna->flags = 0;
-
 
218
 
-
 
219
    sna_accel_init(sna);
-
 
220
 
-
 
221
    delay(10);
-
 
222
    
-
 
223
    return sna->render.caps;
-
 
224
}
-
 
225
 
-
 
226
void sna_fini()
-
 
227
{
-
 
228
    if( sna_device )
-
 
229
    {
-
 
230
        sna_device->render.fini(sna_device);
-
 
231
        kgem_bo_destroy(&sna_device->kgem, mask_bo);
-
 
232
        kgem_close_batches(&sna_device->kgem);        
204
 
233
   	    kgem_cleanup_cache(&sna_device->kgem);
Line 205... Line 234...
205
    return sna_accel_init(sna);
234
    };
Line 206... Line 235...
206
}
235
}
Line 409... Line 438...
409
err_1:
438
err_1:
410
    return -1;        
439
    return -1; 
Line 411... Line 440...
411
           
440
           
Line -... Line 441...
-
 
441
};
-
 
442
 
-
 
443
void sna_destroy_bitmap(bitmap_t *bitmap)
-
 
444
{
-
 
445
	struct kgem_bo *bo;
-
 
446
    
-
 
447
    bo = (struct kgem_bo *)bitmap->handle;
-
 
448
        
-
 
449
    kgem_bo_destroy(&sna_device->kgem, bo);
-
 
450
 
412
};
451
};
413
 
452
 
414
void sna_lock_bitmap(bitmap_t *bitmap)
453
void sna_lock_bitmap(bitmap_t *bitmap)
Line 415... Line 454...
415
{
454
{
Line 422... Line 461...
422
};
461
};
Line 423... Line 462...
423
 
462
 
424
int sna_create_mask()
463
int sna_create_mask()
425
{
464
{
426
	struct kgem_bo *bo;
-
 
427
    char proc_info[1024];
465
	struct kgem_bo *bo;
428
    int width, height;
466
    int width, height;
Line 429... Line -...
429
    int i;
-
 
430
 
-
 
431
    get_proc_info(proc_info);
-
 
432
 
-
 
433
    width  = *(uint32_t*)(proc_info+42)+1;
-
 
434
    height = *(uint32_t*)(proc_info+46)+1;
467
    int i;
Line 435... Line 468...
435
    
468
 
436
    printf("%s width %d height %d\n", __FUNCTION__, width, height);
469
    printf("%s width %d height %d\n", __FUNCTION__, sna_fb.width, sna_fb.height);
Line 437... Line 470...
437
    
470
    
438
    bo = kgem_create_2d(&sna_device->kgem, width, height,
471
    bo = kgem_create_2d(&sna_device->kgem, sna_fb.width, sna_fb.height,
Line 446... Line 479...
446
        goto err_2;
479
        goto err_2;
Line 447... Line 480...
447
        
480
        
Line 448... Line 481...
448
    memset(map, 0, bo->pitch * height);
481
    memset(map, 0, bo->pitch * height);
-
 
482
    
-
 
483
    mask_bo     = bo;
Line 449... Line 484...
449
    
484
    mask_width  = width;
Line 450... Line 485...
450
    mask_bo = bo;
485
    mask_height = height;
451
 
486
    
Line 502... Line 537...
502
    winx = *(uint32_t*)(proc_info+34);
537
    winx = *(uint32_t*)(proc_info+34);
503
    winy = *(uint32_t*)(proc_info+38);
538
    winy = *(uint32_t*)(proc_info+38);
504
    winw = *(uint32_t*)(proc_info+42)+1;
539
    winw = *(uint32_t*)(proc_info+42)+1;
505
    winh = *(uint32_t*)(proc_info+46)+1;
540
    winh = *(uint32_t*)(proc_info+46)+1;
Line -... Line 541...
-
 
541
    
-
 
542
    VG_CLEAR(update);
-
 
543
	update.handle = mask_bo->handle;
-
 
544
//	update.bo_size   = __kgem_bo_size(mask_bo);
-
 
545
//	update.bo_pitch  = mask_bo->pitch;
-
 
546
	update.bo_map    = (__u32)MAP(mask_bo->map);
-
 
547
	drmIoctl(sna_device->kgem.fd, SRV_MASK_UPDATE, &update);
-
 
548
    mask_bo->pitch = update.bo_pitch;
506
    
549
    
507
    memset(&src, 0, sizeof(src));
550
    memset(&src, 0, sizeof(src));
508
    memset(&dst, 0, sizeof(dst));
551
    memset(&dst, 0, sizeof(dst));
Line 509... Line 552...
509
    memset(&mask, 0, sizeof(dst));
552
    memset(&mask, 0, sizeof(dst));
Line 515... Line 558...
515
    dst.drawable.bitsPerPixel = 32;
558
    dst.drawable.bitsPerPixel = 32;
516
    dst.drawable.width  = sna_fb.width;
559
    dst.drawable.width  = sna_fb.width;
517
    dst.drawable.height = sna_fb.height;
560
    dst.drawable.height = sna_fb.height;
Line 518... Line 561...
518
    
561
    
519
    mask.drawable.bitsPerPixel = 8;
562
    mask.drawable.bitsPerPixel = 8;
520
    mask.drawable.width  = winw;
563
    mask.drawable.width  = update.width;
Line 521... Line 564...
521
    mask.drawable.height = winh;
564
    mask.drawable.height = update.height;
Line 522... Line 565...
522
 
565
 
Line 548... Line 591...
548
        
591
        
549
        composite.blt(sna_device, &composite, &r);
592
        composite.blt(sna_device, &composite, &r);
550
        composite.done(sna_device, &composite);
593
        composite.done(sna_device, &composite);
Line 551... Line -...
551
    };
-
 
552
    
-
 
553
    VG_CLEAR(update);
-
 
554
	update.handle = mask_bo->handle;
-
 
555
	update.bo_size   = __kgem_bo_size(mask_bo);
-
 
556
	update.bo_pitch  = mask_bo->pitch;
-
 
557
	update.bo_map    = MAP(mask_bo->map);
-
 
558
	drmIoctl(sna_device->kgem.fd, SRV_MASK_UPDATE, &update);
594
    };
Line 559... Line 595...
559
 
595
    
560
    kgem_submit(&sna_device->kgem);
596
    kgem_submit(&sna_device->kgem);