summaryrefslogtreecommitdiff
path: root/shaders/h264/ildb/AVC_ILDB.inc
blob: 4b3535ea04ea9a89b673562d3fac4683e7633a62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
/*
 * Copyright © <2010>, Intel Corporation.
 *
 * This program is licensed under the terms and conditions of the
 * Eclipse Public License (EPL), version 1.0.  The full text of the EPL is at
 * http://www.opensource.org/licenses/eclipse-1.0.php.
 *
 */
#if !defined(__AVC_ILDB_HEADER__)	// Make sure this file is only included once
#define __AVC_ILDB_HEADER__

// Module name: AVC_ILDB.inc

#undef ORIX
#undef ORIY

//========== Root thread input parameters ==================================================
#define RootParam				r1		// :w
#define	MBsCntX					r1.0	// :w, MB count per row
#define	MBsCntY					r1.1	// :w, MB count per col
//#define PicType					r1.2	// :w, Picture type
#define	MaxThreads				r1.3	// :w, Max Thread limit
#define EntrySignature			r1.4	// :w, Debug flag
#define BitFields				r1.5	// :uw
#define 	MbaffFlag			BIT0	// :w, mbaff flag, bit 0 in BitFields
#define 	BotFieldFlag		BIT1	// :w, bottom field flag, bit 1 in BitFields
#define 	CntlDataExpFlag		BIT2	// :w, Control Data Expansion Flag, bit 2 in BitFields
#define RampConst				r1.12	// 8 :ub, Ramp constant, r1.12 - r1.19:ub
#define StepToNextMB			r1.20	// :b, 2 bytes
#define Minus2Minus1			r1.22	// :b, 2 bytes
// next one starts at r1.11:w

#define 	TopFieldFlag		0xFFFD	// :w, top field flag, used to set bit1 to 0.


//========== Root Locals =============================================================

// Variables in root kernel for launching child therad
#define ChildParam				r2.0	// :w
//Not used  #define	URBOffset				r2.3	// :w, Each row occupies 4 URB entries.  All children in the same row use the same set of URB entries
#define	CurCol					r2.10	// :w, current col
#define	CurColB					r2.20	// :b, current col
#define	CurRow					r2.11	// :w, current row
#define	CurRowB					r2.22	// :b, current row
#define	LastCol					r2.12	// :w, last col
#define	LastRow					r2.13	// :w, last row

// Root local constants during spawning process
#define	Col_Boundary			r3.0	// :w, 
#define	Row_Boundary			r3.1	// :w, 
//#define	TotalBlocks				r3.2	// :w, Total blocks in the frame 
#define	URB_EntriesPerMB_2		r3.3	// :w, = URB entries per MB, but in differnt form
#define	URBOffsetUVBase			r3.4	// :w, UV Base offset in URB

#define	Temp1_D					r3.6	// :d:
#define	Temp1_W					r3.12	// :w, Temp1
#define	Temp1_B					r3.24	// :b, = Temp1_W
#define	Temp2_W					r3.13	// :w, Temp2
#define	Temp2_B					r3.26	// :b, = Temp2_W

// Root local variables
#define JumpTable				r4		// :d, jump table
#define JUMPTABLE_BASE			4*32
#define JumpAddr				a0.7

#define TopRowForScan			r5.0 	// :w, track the top row for scan. All rows above this row is deblocked already. 


// Child Thread R0 Header Field
#define MRF0					m0		
#define CT_R0Hdr				m1

/*
.declare GatewayAperture	Base=r50.0 ElementSize=4 SrcRegion=REGION(8,1) Type=ud	
#define GatewayApertureB	1600	// r50 byte offset from r0.0

// Chroma root thread updates luma root's ThreadLimit at r10.0:w via gateway
#define ThreadLimit				r62.0	// :w, thread limit //r56.0
#define THREAD_LIMIT_OFFSET		0x01800000	// Offset from r50 to r56 = 12*32 = 384 = 0x0180.  0x180 << 16 = 0x01800000
	//#define THREAD_LIMIT_OFFSET		0x00C00000	// Offset from r50 to r56 = 6*32 = 192 = 0x00C0.  0xC0 << 16 = 0x00C00000
*/

// Gateway size is 16 GRF.  68 rows of MBs takes 9 GRFs (r6 - r14)
// For CTG: Expended to support 1280 rows of pixel (80 rows of MBs).  It requires 10 GRFs (r6 - r15)
.declare GatewayAperture	Base=r6.0 ElementSize=4 SrcRegion=REGION(8,1) Type=ud	
#define GatewayApertureB	192	// r0.0 byte offset from r0.0

// Chroma root thread updates luma root's ThreadLimit at r10.0:w via gateway
#define ThreadLimit				r18.0	// :w, thread limit 
#define THREAD_LIMIT_OFFSET		0x01800000	// Offset from r50 to r56 = 12*32 = 384 = 0x0180.  0x180 << 16 = 0x01800000
#define	TotalBlocks				r18.1	// :w, Total blocks in the frame 

// Root local variables
#define	ChildThreadsID			r19.0	// :w, Child thread ID, unique to each child
#define	OutstandingThreads		r20.0	// :w, Outstanding threads 
#define ProcessedMBs			r20.1	// :w, # of MBs processed 

#define	URBOffset				r21.0	// :w, Each row occupies 4 URB entries.  All children in the same row use the same set of URB entries

//=================================================================================

#define ScoreBd_Size			128 //96 // size of Status[] or ProcCol[]

#define ScoreBd_Idx				2		
//#define Saved_Col				0

#define StatusAddr				a0.4	// :w, point to r50
//=================================================================================


// Gateway payload
#define GatewayPayload			r48.0	// :ud
#define GatewayPayloadKey		r48.8	// :uw
#define DispatchID				r48.20	// :ub
#define RegBase_GatewaySize 	r48.5	// :ud, used in open a gateway
#define Offset_Length			r48.5	// :ud, used in forwardmsg back to root
#define EUID_TID				r48.9	// :uw, used in forwardmsg back to root

// Gateway response
#define GatewayResponse 		r49.0	// :ud, one GRF

#define URBWriteMsgDesc			a0.0	// Used in URB write, :ud
#define URBWriteMsgDescLow		a0.0	// Used in URB write, :uw
#define URBWriteMsgDescHigh		a0.1	// Used in URB write, :uw

.declare WritebackResponse		Base=r50 ElementSize=4 SrcRegion=REGION(8,1) Type=ud	// 1 GRF for write backs


/////////////////////////////////////////////////////////////////////////////////////////////
// IDesc Order					Offset
//
// 0) luma root					0 from luma root
// 1) luma child				16 from luma root
// 2) chroma root				32 from luma root
// 3) chroma child				16 from chroma root

// 4) luma field root			0 from luma field root
// 5) luma field child			16 from luma field root
// 6) chroma field root			32 from luma field root
// 7) chroma field child		16 from chroma field root

// 8) luma Mbaff root			0 from luma Mbaff root
// 9) luma Mbaff child 			16 from luma Mbaff root
// 10) chroma Mbaff root		32 from luma Mbaff root
// 11) chroma Mbaff child		16 from chroma Mbaff root

// IDesc offset within non-mbaff or mbaff mode
#define CHROMA_ROOT_OFFSET 		32		// Offset from luma root to chroma root
#define CHILD_OFFSET	  		16		// Offset from luma root to luma child, 
										// and from chroma root to chroma child
/////////////////////////////////////////////////////////////////////////////////////////////


//========== End of Root Variables ======================================================


//========== Child thread input parameters ==============================================
//#define	MBsCntX					r1.0	// :w, MB count per row (same as root)
//#define	MBsCntY					r1.1	// :w, MB count per col (same as root)
//#define PicTypeC				r1.2	// :w, Picture type		same as root thread (same as root)
#define	URBOffsetC				r1.3	// :w, 
#define EntrySignatureC			r1.4	// :w, Debug field (same as root)
//#define BitFields				r1.5	// :w (same as root)
//#define 	MbaffFlag			BIT0	// :w, mbaff flag, bit 0 in BitFields
//#define 	BotFieldFlag		BIT1	// :w, bottom field flag, bit 1 in BitFields
//#define 	CntlDataExpFlag		BIT2	// :w, Control Data Expansion Flag, bit 2 in BitFields
#define RampConstC				r1.12	// 8 :ub, Ramp constant, r1.12 - r1.19:ub.
#define	ORIX					r1.10	// :w, carry over from root r1 in MB count
#define	ORIY					r1.11	// :w, carry over from root r1 in MB count
#define	LastColC				r1.12	// :w, last col
#define	LastRowC				r1.13	// :w, last row

.declare GatewayApertureC		Base=r1.0 ElementSize=4 SrcRegion=REGION(8,1) Type=ud	
#define GatewayApertureCBase	32		// r1 byte offset from r0.0


//========== Child Variables ============================================================

// Mbaff Alpha, Beta, Tc0 vectors for an edge
.declare Mbaff_ALPHA 	Base=r14.0  ElementSize=2 SrcRegion=REGION(8,1) Type=uw		// r14
.declare Mbaff_BETA 	Base=r15.0  ElementSize=2 SrcRegion=REGION(8,1) Type=uw		// r15
.declare Mbaff_TC0 		Base=r16.0  ElementSize=2 SrcRegion=REGION(8,1) Type=uw		// r16
.declare RRampW	   		Base=r17.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w		// r17

.declare Mbaff_ALPHA2	Base=r45.0  ElementSize=2 SrcRegion=REGION(8,1) Type=uw		// alpha2 = (alpha >> 2) + 2


#define	ORIX_CUR				r46.0	// :w, current block origin X in bytes
#define	ORIY_CUR				r46.1	// :w, current block origin Y in bytes
#define	ORIX_LEFT				r46.2	// :w, left block origin X in bytes
#define	ORIY_LEFT				r46.3	// :w, left block origin Y in bytes
#define	ORIX_TOP				r46.4	// :w, top block origin X in bytes
#define	ORIY_TOP				r46.5	// :w, top block origin Y in bytes
//#define FilterSampleFlag		r46.6	// :uw,
#define	CTemp0_W				r46.7	// :w, child Temp0

#define alpha					r46.8	// :w, Scaler version for non Mbaff
#define beta					r46.9	// :w, Scaler version for non Mbaff
#define tc0						r46.20	// 4 :ub, r46.20 ~ r46.23, Scaler version for non Mbaff
#define MaskA					r46.12	// :uw
#define MaskB					r46.13	// :uw

// Child control flags
#define DualFieldMode			r47.0	// Cur MB is frame based, above MB is field based in mbaff mode
										// :uw, 0 = not in dual field mode,  1 = in dual field mode, filter both top and bot fields
#define	GateWayOffsetC			r47.1	// :w, Gateway offset for child writing into root space
#define CntrlDataOffsetY		r47.1	// :ud, MB control data data offset
#define alpha2					r47.4	// :uw, 	alpha2 = (alpha >> 2) + 2

#define VertEdgePattern			r47.5	// :uw, 

#define	CTemp1_W				r47.6	// :w, child Temp1
#define	CTemp1_B				r47.12	// :b, = child Temp1_W
#define	CTemp2_W				r47.7	// :w, child Temp2
#define	CTemp2_B				r47.14	// :b, = child Temp2_W

// Used in child
#define ECM_AddrReg				a0.4	// Edge Control Map register
#define P_AddrReg				a0.6	// point to P samples in left or top MB
#define Q_AddrReg				a0.7	// point to Q samples in cur MB


.declare 	RTempD	   Base=r26.0 ElementSize=4 SrcRegion=REGION(8,1) Type=d	// r26-27
.declare 	RTempB	   Base=r26.0 ElementSize=1 SrcRegion=REGION(8,4) Type=ub	// r26-27
.declare 	RTempW	   Base=r26.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w	// r26-27
#define 	LEFT_TEMP_D		RTempD
#define 	LEFT_TEMP_B		RTempB
#define 	LEFT_TEMP_W		RTempW

.declare 	TempRow0   Base=r26.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare 	TempRow0B  Base=r26.0 ElementSize=1 SrcRegion=REGION(8,2) Type=ub
.declare 	TempRow1   Base=r27.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare 	TempRow1B  Base=r27.0 ElementSize=1 SrcRegion=REGION(8,2) Type=ub

.declare 	CUR_TEMP_D	Base=r28.0 ElementSize=4 SrcRegion=REGION(8,1) Type=d	// 8 GRFs
.declare 	CUR_TEMP_B	Base=r28.0 ElementSize=1 SrcRegion=REGION(8,4) Type=ub
.declare 	CUR_TEMP_W	Base=r28.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w

#define FilterSampleFlag		r28.0	// :uw,

.declare 	A   		Base=r28.0 ElementSize=2 SrcRegion=REGION(16,1) Type=w
.declare 	BB   		Base=r29.0 ElementSize=2 SrcRegion=REGION(16,1) Type=w

.declare 	TempRow3   Base=r30.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare 	TempRow3B  Base=r30.0 ElementSize=1 SrcRegion=REGION(8,2) Type=ub

.declare 	tc0_exp		Base=r30.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare 	tc8			Base=r30.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w

.declare 	tc_exp		Base=r31.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare	tx_exp_8	Base=r31.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w

.declare	q0_p0		Base=r32.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare	ABS_q0_p0	Base=r33.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w

.declare	ap			Base=r34.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare	aq			Base=r35.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w

// These buffers have the src data for each edge to be beblocked.
// They have modified pixels from previous edges.
//
//	Y:
//	+----+----+----+----+----+----+----+----+
//	| p3 | p2 | P1 | p0 | q0 | q1 | q2 | q3 |
//	+----+----+----+----+----+----+----+----+
//
//	p3 = r[P_AddrReg, 0]<16;16,1>  
//	p2 = r[P_AddrReg, 16]<16;16,1> 
//	p1 = r[P_AddrReg, 32]<16;16,1> 
//	p0 = r[P_AddrReg, 48]<16;16,1> 
// 	q0 = r[Q_AddrReg, 0]<16;16,1>  
//	q1 = r[Q_AddrReg, 16]<16;16,1> 
//	q2 = r[Q_AddrReg, 32]<16;16,1> 
//	q3 = r[Q_AddrReg, 48]<16;16,1> 

.declare	p0123_W		Base=r36.0  ElementSize=2 SrcRegion=REGION(16,1) Type=uw		// r36, r37
.declare	q0123_W		Base=r38.0  ElementSize=2 SrcRegion=REGION(16,1) Type=uw		// r38, r39
.declare	p3			Base=r36.0  ElementSize=1 SrcRegion=REGION(8,1) Type=ub
.declare	p2			Base=r36.16 ElementSize=1 SrcRegion=REGION(8,1) Type=ub
.declare	p1			Base=r37.0  ElementSize=1 SrcRegion=REGION(8,1) Type=ub
.declare	p0			Base=r37.16 ElementSize=1 SrcRegion=REGION(8,1) Type=ub
.declare	q0			Base=r38.0  ElementSize=1 SrcRegion=REGION(8,1) Type=ub
.declare	q1			Base=r38.16 ElementSize=1 SrcRegion=REGION(8,1) Type=ub
.declare	q2			Base=r39.0  ElementSize=1 SrcRegion=REGION(8,1) Type=ub
.declare	q3			Base=r39.16 ElementSize=1 SrcRegion=REGION(8,1) Type=ub

.declare 	TempRow2   Base=r38.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w

// Temp space for mbaff dual field mode
#define		ABOVE_CUR_MB_BASE	40*GRFWIB											// Byte offset to r40
.declare    ABOVE_CUR_MB_YW  Base=r40 	ElementSize=2 SrcRegion=REGION(8,1) Type=uw
.declare    ABOVE_CUR_MB_UW  Base=r40 	ElementSize=2 SrcRegion=REGION(8,1) Type=uw

.declare 	P0_plus_P1   Base=r41.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare 	Q0_plus_Q1   Base=r42.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w

.declare 	P2_plus_P3   Base=r43.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w
.declare 	Q2_plus_Q3   Base=r44.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w


//////////////////////////////////////////////////////////////////////////////////////////
// MB control data reference

// Expanded control data is in r18 - r25
.declare    CNTRL_DATA_D Base=r18 	ElementSize=4 SrcRegion=REGION(8,1) Type=ud		// For read, 8 GRFs
#define		CNTRL_DATA_BASE	18*GRFWIB												// Base offset to r18

//  Bit mask for extracting bits
#define	MbaffFrameFlag					0x01
#define	FieldModeCurrentMbFlag			0x02
#define FieldModeLeftMbFlag				0x04
#define FieldModeAboveMbFlag			0x08
#define FilterInternal8x8EdgesFlag		0x10
#define FilterInternal4x4EdgesFlag		0x20
#define FilterLeftMbEdgeFlag			0x40
#define FilterTopMbEdgeFlag				0x80

#define	DISABLE_ILDB_FLAG				0x01

//  Exact bit pattern for left and cur MB coding mode (frame vs. field)
#define LEFT_FRAME_CUR_FRAME			0x00
#define LEFT_FRAME_CUR_FIELD			0x02
#define LEFT_FIELD_CUR_FRAME			0x04
#define LEFT_FIELD_CUR_FIELD			0x06

//  Exact bit pattern for above and cur MB coding mode (frame vs. field)
#define ABOVE_FRAME_CUR_FRAME			0x00
#define ABOVE_FRAME_CUR_FIELD			0x02
#define ABOVE_FIELD_CUR_FRAME			0x08
#define ABOVE_FIELD_CUR_FIELD			0x0A



//========== MB control data field offset in byte ==========

#if !defined(_APPLE)

// GRF0 - GRF1 holds original control data

// GRF0
#define HorizOrigin						0
#define VertOrigin						1
#define BitFlags						2		// Bit flags

#define bbSinternalLeftVert				4		// Internal left vertical bS, 2 bits per bS for 4 Y pixels and 2 U/V pixels 	
#define bbSinternalMidVert				5		// Internal mid vertical bS
#define bbSinternalRightVert			6		// Internal right vertical bS
#define bbSinternalTopHorz				7		// Internal top horizontal bS

#define	bbSinternalMidHorz				8		// Internal mid horizontal bS
#define	bbSinternalBotHorz				9		// Internal bottom horizontal bS
#define	wbSLeft0						10		// External left vertical bS (0), 4 bits per bS for 4 Y pixels and 2 U/V pixels, and byte 11

#define	wbSLeft1						12		// External left vertical bS (1), and byte 13
#define	wbSTop0							14		// External top horizontal bS (0), and byte 15

#define	wbSTop1							16		// Externaltop horizontal bS (1), and byte 17
#define	bIndexAinternal_Y				18		// Internal index A for Y
#define	bIndexBinternal_Y				19		// Internal index B for Y

#define	bIndexAleft0_Y					20		// Left index A for Y (0)
#define	bIndexBleft0_Y					21		// Left index B for Y (0)
#define	bIndexAleft1_Y					22		// Left index A for Y (1)
#define	bIndexBleft1_Y					23		// Left index B for Y (1)

#define	bIndexAtop0_Y					24		// Top index A for Y (0)
#define	bIndexBtop0_Y					25		// Top index B for Y (0)
#define	bIndexAtop1_Y					26		// Top index A for Y (1)
#define	bIndexBtop1_Y					27		// Top index B for Y (1)

#define	bIndexAinternal_Cb				28		// Internal index A for Cb
#define	bIndexBinternal_Cb				29		// Internal index B for Cb
#define	bIndexAleft0_Cb					30		// Left index A for Cb (0)
#define	bIndexBleft0_Cb					31		// Left index B for Cb (0)

// GRF1
#define	bIndexAleft1_Cb					32		// Left index A for Cb (1)
#define	bIndexBleft1_Cb					33		// Left index B for Cb (1)
#define	bIndexAtop0_Cb					34		// Top index A for Cb (0)
#define	bIndexBtop0_Cb					35		// Top index B for Cb (0)

#define	bIndexAtop1_Cb					36		// Top index A for Cb (1)
#define	bIndexBtop1_Cb					37		// Top index B for Cb (1)
#define	bIndexAinternal_Cr				38		// Internal index A for Cr
#define	bIndexBinternal_Cr				39		// Internal index B for Cr

#define	bIndexAleft0_Cr					40		// Left index A for Cr (0)
#define bIndexBleft0_Cr					41		// Left index B for Cr (0)
#define	bIndexAleft1_Cr					42		// Left index A for Cr (1)
#define	bIndexBleft1_Cr					43		// Left index B for Cr (1)

#define	bIndexAtop0_Cr					44		// Top index A for Cr (0)
#define	bIndexBtop0_Cr					45		// Top index B for Cr (0)
#define	bIndexAtop1_Cr					46		// Top index A for Cr (1)
#define	bIndexBtop1_Cr					47		// Top index B for Cr (1)

#define	ExtBitFlags						48		// Extended bit flags, such as disable ILDB bits

// Offset 49 - 63 not used


//===== GRF2 - GRF7 hold expanded control data =====

// GRF2
#define	wEdgeCntlMap_IntLeftVert		64		// Derived from bbSinternalLeftVert, 1 bit per pixel 
#define	wEdgeCntlMap_IntMidVert			66		// Derived from bbSinternalLeftVert
		
#define	wEdgeCntlMap_IntRightVert		68		// Derived from bbSinternalRightVert
#define	wEdgeCntlMap_IntTopHorz			70		// Derived from bbSinternalTopHorz, 1bit per pixel 
		
#define	wEdgeCntlMap_IntMidHorz			72		// Derived from bbSinternalMidHorz
#define	wEdgeCntlMap_IntBotHorz			74		// Derived from bbSinternalBotHorz

// Offset 76 - 79 not used

#define	wEdgeCntlMapA_ExtLeftVert0		80		// Derived from wbSLeft0, 1bit per pixel
#define	wEdgeCntlMapB_ExtLeftVert0		82		// Derived from wbSLeft0

#define	wEdgeCntlMapA_ExtTopHorz0		84		// Derived from wbSTop0, 1bit per pixel
#define	wEdgeCntlMapB_ExtTopHorz0		86		// Derived from wbSTop0

#define	wEdgeCntlMapA_ExtLeftVert1		88		// Derived from wbSLeft1, 1bit per pixel
#define	wEdgeCntlMapB_ExtLeftVert1		90		// Derived from wbSLeft1

#define	wEdgeCntlMapA_ExtTopHorz1		92		// Derived from wbSTop1, 1bit per pixel
#define	wEdgeCntlMapB_ExtTopHorz1		94		// Derived from wbSTop1


// GRF3
#define	bTc0_v00_0_Y					96		// Derived from bSv00_0 and bIndexAleft0_Y, 4 pixels per tc0
#define	bTc0_v10_0_Y					97		// Derived from bSv10_0 and bIndexAleft0_Y
#define	bTc0_v20_0_Y					98		// Derived from bSv20_0 and bIndexAleft0_Y
#define	bTc0_v30_0_Y					99		// Derived from bSv30_0 and bIndexAleft0_Y

#define	bTc0_v01_Y						100		// Derived from bSv01 and bIndexAinternal_Y
#define	bTc0_v11_Y						101		// Derived from bSv11 and bIndexAinternal_Y
#define	bTc0_v21_Y						102		// Derived from bSv21 and bIndexAinternal_Y
#define	bTc0_v31_Y						103		// Derived from bSv31 and bIndexAinternal_Y

#define	bTc0_v02_Y						104		// Derived from bSv02 and bIndexAinternal_Y
#define	bTc0_v12_Y						105		// Derived from bSv12 and bIndexAinternal_Y
#define	bTc0_v22_Y						106		// Derived from bSv22 and bIndexAinternal_Y
#define	bTc0_v32_Y						107		// Derived from bSv32 and bIndexAinternal_Y

#define	bTc0_v03_Y						108		// Derived from bSv03 and bIndexAinternal_Y
#define	bTc0_v13_Y						109		// Derived from bSv13 and bIndexAinternal_Y
#define	bTc0_v23_Y						110		// Derived from bSv23 and bIndexAinternal_Y
#define	bTc0_v33_Y						111		// Derived from bSv33 and bIndexAinternal_Y

#define	bTc0_h00_0_Y					112		// Derived from bSh00_0 and bIndexAleft0_Y
#define	bTc0_h01_0_Y					113		// Derived from bSh01_0 and bIndexAleft0_Y
#define	bTc0_h02_0_Y					114		// Derived from bSh02_0 and bIndexAleft0_Y
#define	bTc0_h03_0_Y					115		// Derived from bSh03_0 and bIndexAleft0_Y

#define	bTc0_h10_Y						116		// Derived from bSh10 and bIndexAinternal_Y
#define	bTc0_h11_Y						117		// Derived from bSh11 and bIndexAinternal_Y
#define	bTc0_h12_Y						118		// Derived from bSh12 and bIndexAinternal_Y
#define	bTc0_h13_Y						119		// Derived from bSh13 and bIndexAinternal_Y
		
#define	bTc0_h20_Y						120		// Derived from bSh20 and bIndexAinternal_Y
#define	bTc0_h21_Y						121		// Derived from bSh21 and bIndexAinternal_Y
#define	bTc0_h22_Y						122		// Derived from bSh22 and bIndexAinternal_Y
#define	bTc0_h23_Y						123		// Derived from bSh23 and bIndexAinternal_Y

#define	bTc0_h30_Y						124		// Derived from bSh30 and bIndexAinternal_Y
#define	bTc0_h31_Y						125		// Derived from bSh31 and bIndexAinternal_Y
#define	bTc0_h32_Y						126		// Derived from bSh32 and bIndexAinternal_Y
#define	bTc0_h33_Y						127		// Derived from bSh33 and bIndexAinternal_Y

// GRF4
#define	bAlphaLeft0_Y					128		// Derived from bIndexAleft0_Y	
#define	bBetaLeft0_Y					129		// Derived from bIndexBleft0_Y	
#define	bAlphaTop0_Y					130		// Derived from bIndexAtop0_Y	
#define	bBetaTop0_Y						131		// Derived from bIndexBtop0_Y	

#define	bAlphaInternal_Y				132		// Derived from bIndexAinternal_Y	
#define	bBetaInternal_Y					133		// Derived from bIndexBinternal_Y	
// Offset 134 - 135 not used

// Offset 136 - 143 not used
#define	bAlphaLeft1_Y					144		// Derived from bIndexAleft1_Y	Used in Mbaff mode only
#define	bBetaLeft1_Y					145		// Derived from bIndexBleft1_Y	Used in Mbaff mode only
#define	bAlphaTop1_Y					146		// Derived from bIndexAtop1_Y	Used in Mbaff mode only
#define	bBetaTop1_Y						147		// Derived from bIndexBtop1_Y	Used in Mbaff mode only

// Offset 148 - 151 not used
#define	bTc0_v00_1_Y					152		// Derived from bSv00_1 and bIndexAleft1_Y	Used in Mbaff mode only
#define	bTc0_v10_1_Y					153		// Derived from bSv10_1 and bIndexAleft1_Y	Used in Mbaff mode only
#define	bTc0_v20_1_Y					154		// Derived from bSv20_1 and bIndexAleft1_Y	Used in Mbaff mode only
#define	bTc0_v30_1_Y					155		// Derived from bSv30_1 and bIndexAleft1_Y	Used in Mbaff mode only

#define	bTc0_h00_1_Y					156		// Derived from bSh00_1 and bIndexAleft1_Y	Used in Mbaff mode only
#define	bTc0_h01_1_Y					157		// Derived from bSh01_1 and bIndexAleft1_Y	Used in Mbaff mode only
#define	bTc0_h02_1_Y					158		// Derived from bSh02_1 and bIndexAleft1_Y	Used in Mbaff mode only
#define	bTc0_h03_1_Y					159		// Derived from bSh03_1 and bIndexAleft1_Y	Used in Mbaff mode only


// GRF5
#define	bTc0_v00_0_Cb					160		// Derived from bSv00_0 and bIndexAleft0_Cb, 2 pixels per tc0	Left0
#define	bTc0_v10_0_Cb					161		// Derived from bSv10_0 and bIndexAleft0_Cb	
#define	bTc0_v20_0_Cb					162		// Derived from bSv20_0 and bIndexAleft0_Cb	
#define	bTc0_v30_0_Cb					163		// Derived from bSv30_0 and bIndexAleft0_Cb	

#define	bTc0_v02_Cb						164		// Derived from bSv02 and bIndexAinternal_Cb	MidVert
#define	bTc0_v12_Cb						165		// Derived from bSv12 and bIndexAinternal_Cb	
#define	bTc0_v22_Cb						166		// Derived from bSv22 and bIndexAinternal_Cb	
#define	bTc0_v32_Cb						167		// Derived from bSv32 and bIndexAinternal_Cb	

#define	bTc0_h00_0_Cb					168		// Derived from bSh00_0 and bIndexAleft0_Cb	Top0
#define	bTc0_h01_0_Cb					169		// Derived from bSh01_0 and bIndexAleft0_Cb	
#define	bTc0_h02_0_Cb					170		// Derived from bSh02_0 and bIndexAleft0_Cb	
#define	bTc0_h03_0_Cb					171		// Derived from bSh03_0 and bIndexAleft0_Cb	

#define	bTc0_h20_Cb						172		// Derived from bSh20 and bIndexAinternal_Cb	MidHorz
#define	bTc0_h21_Cb						173		// Derived from bSh21 and bIndexAinternal_Cb	
#define	bTc0_h22_Cb						174		// Derived from bSh22 and bIndexAinternal_Cb	
#define	bTc0_h23_Cb						175		// Derived from bSh23 and bIndexAinternal_Cb	

#define	bTc0_v00_0_Cr					176		// Derived from bSv00_0 and bIndexAleft0_Cr, 2 pixels per tc0	Left0
#define	bTc0_v10_0_Cr					177		// Derived from bSv10_0 and bIndexAleft0_Cr	
#define	bTc0_v20_0_Cr					178		// Derived from bSv20_0 and bIndexAleft0_Cr	
#define	bTc0_v30_0_Cr					179		// Derived from bSv30_0 and bIndexAleft0_Cr	

#define	bTc0_v02_Cr						180		// Derived from bSv02 and bIndexAinternal_Cr	Mid Vert
#define	bTc0_v12_Cr						181		// Derived from bSv12 and bIndexAinternal_Cr	
#define	bTc0_v22_Cr						182		// Derived from bSv22 and bIndexAinternal_Cr	
#define	bTc0_v32_Cr						183		// Derived from bSv32 and bIndexAinternal_Cr	

#define	bTc0_h00_0_Cr					184		// Derived from bSh00_0 and bIndexAleft0_Cr, 2 pixels per tc0	Top0
#define	bTc0_h01_0_Cr					185		// Derived from bSh01_0 and bIndexAleft0_Cr	
#define	bTc0_h02_0_Cr					186		// Derived from bSh02_0 and bIndexAleft0_Cr	
#define	bTc0_h03_0_Cr					187		// Derived from bSh03_0 and bIndexAleft0_Cr	

#define	bTc0_h20_Cr						188		// Derived from bSh20 and bIndexAinternal_Cr	Mid  Horz
#define	bTc0_h21_Cr						189		// Derived from bSh21 and bIndexAinternal_Cr	
#define	bTc0_h22_Cr						190		// Derived from bSh22 and bIndexAinternal_Cr	
#define	bTc0_h23_Cr						191		// Derived from bSh23 and bIndexAinternal_Cr	

// GRF6
#define	bAlphaLeft0_Cb					192		// Derived from bIndexAleft0_Cb
#define	bBetaLeft0_Cb					193		// Derived from bIndexBleft0_Cb
#define	bAlphaTop0_Cb					194		// Derived from bIndexAtop0_Cb
#define	bBetaTop0_Cb					195		// Derived from bIndexBtop0_Cb

#define	bAlphaInternal_Cb				196		// Derived from bIndexAinternal_Cb
#define	bBetaInternal_Cb				197		// Derived from bIndexBinternal_Cb
// Offset 198 - 199 not used		

#define	bAlphaLeft0_Cr					200		// Derived from bIndexAleft0_Cr
#define	bBetaLeft0_Cr					201		// Derived from bIndexBleft0_Cr
#define	bAlphaTop0_Cr					202		// Derived from bIndexAtop0_Cr
#define	bBetaTop0_Cr					203		// Derived from bIndexBtop0_Cr

#define	bAlphaInternal_Cr				204		// Derived from bIndexAinternal_Cr
#define	bBetaInternal_Cr				205		// Derived from bIndexBinternal_Cr
// Offset 206 - 223 not used		

// GRF7
#define	bAlphaLeft1_Cb					224		// Derived from bIndexAleft1_Cb	Used in Mbaff mode only
#define	bBetaLeft1_Cb					225		// Derived from bIndexBleft1_Cb	Used in Mbaff mode only
#define	bAlphaTop1_Cb					226		// Derived from bIndexAtop1_Cb	Used in Mbaff mode only
#define	bBetaTop1_Cb					227		// Derived from bIndexBtop1_Cb	Used in Mbaff mode only

// Offset 228 - 231 not used

#define	bTc0_v00_1_Cb					232		// Derived from bSv00_1 and bIndexAleft1_Cb	Used in Mbaff mode only
#define	bTc0_v10_1_Cb					233		// Derived from bSv10_1 and bIndexAleft1_Cb	Used in Mbaff mode only
#define	bTc0_v20_1_Cb					234		// Derived from bSv20_1 and bIndexAleft1_Cb	Used in Mbaff mode only
#define	bTc0_v30_1_Cb					235		// Derived from bSv30_1 and bIndexAleft1_Cb	Used in Mbaff mode only

#define	bTc0_h00_1_Cb					236		// Derived from bSh00_1 and bIndexAleft1_Cb	Used in Mbaff mode only
#define	bTc0_h01_1_Cb					237		// 	Derived from bSh01_1 and bIndexAleft1_Cb	Used in Mbaff mode only
#define	bTc0_h02_1_Cb					238		// Derived from bSh02_1 and bIndexAleft1_Cb	Used in Mbaff mode only
#define	bTc0_h03_1_Cb					239		// Derived from bSh03_1 and bIndexAleft1_Cb	Used in Mbaff mode only

#define	bAlphaLeft1_Cr					240		// Derived from bIndexAleft1_Cr	Used in Mbaff mode only
#define	bBetaLeft1_Cr					241		// Derived from bIndexBleft1_Cr	Used in Mbaff mode only
#define	bAlphaTop1_Cr					242		// Derived from bIndexAtop1_Cr	Used in Mbaff mode only
#define	bBetaTop1_Cr					243		// Derived from bIndexBtop1_Cr	Used in Mbaff mode only

// Offset 244 - 247 not used		

#define	bTc0_v00_1_Cr					248		// Derived from bSv00_1 and bIndexAleft1_Cr	Used in Mbaff mode only
#define	bTc0_v10_1_Cr					249		// Derived from bSv10_1 and bIndexAleft1_Cr	Used in Mbaff mode only
#define	bTc0_v20_1_Cr					250		// Derived from bSv20_1 and bIndexAleft1_Cr	Used in Mbaff mode only
#define	bTc0_v30_1_Cr					251		// Derived from bSv30_1 and bIndexAleft1_Cr	Used in Mbaff mode only

#define	bTc0_h00_1_Cr					252		// Derived from bSh00_1 and bIndexAleft1_Cr	Used in Mbaff mode only
#define	bTc0_h01_1_Cr					253		// Derived from bSh01_1 and bIndexAleft1_Cr	Used in Mbaff mode only
#define	bTc0_h02_1_Cr					254		// Derived from bSh02_1 and bIndexAleft1_Cr	Used in Mbaff mode only
#define	bTc0_h03_1_Cr					255		// Derived from bSh03_1 and bIndexAleft1_Cr	Used in Mbaff mode only


#else		// _APPLE is defined

//******** Crestline for Apple, progressive only, 88 bytes **********

// GRF0
#define HorizOrigin						0
#define VertOrigin						1
#define BitFlags						2		// Bit flags

#define	wEdgeCntlMap_IntLeftVert		4		// Derived from bbSinternalLeftVert, 1 bit per pixel 
#define	wEdgeCntlMap_IntMidVert			6		// Derived from bbSinternalLeftVert
#define	wEdgeCntlMap_IntRightVert		8		// Derived from bbSinternalRightVert
#define	wEdgeCntlMap_IntTopHorz			10		// Derived from bbSinternalTopHorz, 1bit per pixel 
#define	wEdgeCntlMap_IntMidHorz			12		// Derived from bbSinternalMidHorz
#define	wEdgeCntlMap_IntBotHorz			14		// Derived from bbSinternalBotHorz
#define	wEdgeCntlMapA_ExtLeftVert0		16		// Derived from wbSLeft0, 1bit per pixel
#define	wEdgeCntlMapB_ExtLeftVert0		18		// Derived from wbSLeft0
#define	wEdgeCntlMapA_ExtTopHorz0		20		// Derived from wbSTop0, 1bit per pixel
#define	wEdgeCntlMapB_ExtTopHorz0		22		// Derived from wbSTop0

#define	bAlphaLeft0_Y					24		// Derived from bIndexAleft0_Y	
#define	bBetaLeft0_Y					25		// Derived from bIndexBleft0_Y	
#define	bAlphaTop0_Y					26		// Derived from bIndexAtop0_Y	
#define	bBetaTop0_Y						27		// Derived from bIndexBtop0_Y	
#define	bAlphaInternal_Y				28		// Derived from bIndexAinternal_Y	
#define	bBetaInternal_Y					29		// Derived from bIndexBinternal_Y	

// GRF1
#define	bTc0_v00_0_Y					32		// Derived from bSv00_0 and bIndexAleft0_Y, 4 pixels per tc0
#define	bTc0_v10_0_Y					33		// Derived from bSv10_0 and bIndexAleft0_Y
#define	bTc0_v20_0_Y					34		// Derived from bSv20_0 and bIndexAleft0_Y
#define	bTc0_v30_0_Y					35		// Derived from bSv30_0 and bIndexAleft0_Y
#define	bTc0_v01_Y						36		// Derived from bSv01 and bIndexAinternal_Y
#define	bTc0_v11_Y						37		// Derived from bSv11 and bIndexAinternal_Y
#define	bTc0_v21_Y						38		// Derived from bSv21 and bIndexAinternal_Y
#define	bTc0_v31_Y						39		// Derived from bSv31 and bIndexAinternal_Y
#define	bTc0_v02_Y						40		// Derived from bSv02 and bIndexAinternal_Y
#define	bTc0_v12_Y						41		// Derived from bSv12 and bIndexAinternal_Y
#define	bTc0_v22_Y						42		// Derived from bSv22 and bIndexAinternal_Y
#define	bTc0_v32_Y						43		// Derived from bSv32 and bIndexAinternal_Y
#define	bTc0_v03_Y						44		// Derived from bSv03 and bIndexAinternal_Y
#define	bTc0_v13_Y						45		// Derived from bSv13 and bIndexAinternal_Y
#define	bTc0_v23_Y						46		// Derived from bSv23 and bIndexAinternal_Y
#define	bTc0_v33_Y						47		// Derived from bSv33 and bIndexAinternal_Y

#define	bTc0_h00_0_Y					48		// Derived from bSh00_0 and bIndexAleft0_Y
#define	bTc0_h01_0_Y					49		// Derived from bSh01_0 and bIndexAleft0_Y
#define	bTc0_h02_0_Y					50		// Derived from bSh02_0 and bIndexAleft0_Y
#define	bTc0_h03_0_Y					51		// Derived from bSh03_0 and bIndexAleft0_Y
#define	bTc0_h10_Y						52		// Derived from bSh10 and bIndexAinternal_Y
#define	bTc0_h11_Y						53		// Derived from bSh11 and bIndexAinternal_Y
#define	bTc0_h12_Y						54		// Derived from bSh12 and bIndexAinternal_Y
#define	bTc0_h13_Y						55		// Derived from bSh13 and bIndexAinternal_Y
#define	bTc0_h20_Y						56		// Derived from bSh20 and bIndexAinternal_Y
#define	bTc0_h21_Y						57		// Derived from bSh21 and bIndexAinternal_Y
#define	bTc0_h22_Y						58		// Derived from bSh22 and bIndexAinternal_Y
#define	bTc0_h23_Y						59		// Derived from bSh23 and bIndexAinternal_Y
#define	bTc0_h30_Y						60		// Derived from bSh30 and bIndexAinternal_Y
#define	bTc0_h31_Y						61		// Derived from bSh31 and bIndexAinternal_Y
#define	bTc0_h32_Y						62		// Derived from bSh32 and bIndexAinternal_Y
#define	bTc0_h33_Y						63		// Derived from bSh33 and bIndexAinternal_Y

// GRF2, 
#define	bTc0_v00_0_Cb					64		// Derived from bSv00_0 and bIndexAleft0_Cb, 2 pixels per tc0	Left0
#define	bTc0_v10_0_Cb					65		// Derived from bSv10_0 and bIndexAleft0_Cb	
#define	bTc0_v20_0_Cb					66		// Derived from bSv20_0 and bIndexAleft0_Cb	
#define	bTc0_v30_0_Cb					67		// Derived from bSv30_0 and bIndexAleft0_Cb	
#define	bTc0_v02_Cb						68		// Derived from bSv02 and bIndexAinternal_Cb	MidVert
#define	bTc0_v12_Cb						69		// Derived from bSv12 and bIndexAinternal_Cb	
#define	bTc0_v22_Cb						70		// Derived from bSv22 and bIndexAinternal_Cb	
#define	bTc0_v32_Cb						71		// Derived from bSv32 and bIndexAinternal_Cb	
#define	bTc0_h00_0_Cb					72		// Derived from bSh00_0 and bIndexAleft0_Cb	Top0
#define	bTc0_h01_0_Cb					73		// Derived from bSh01_0 and bIndexAleft0_Cb	
#define	bTc0_h02_0_Cb					74		// Derived from bSh02_0 and bIndexAleft0_Cb	
#define	bTc0_h03_0_Cb					75		// Derived from bSh03_0 and bIndexAleft0_Cb	
#define	bTc0_h20_Cb						76		// Derived from bSh20 and bIndexAinternal_Cb	MidHorz
#define	bTc0_h21_Cb						77		// Derived from bSh21 and bIndexAinternal_Cb	
#define	bTc0_h22_Cb						78		// Derived from bSh22 and bIndexAinternal_Cb	
#define	bTc0_h23_Cb						79		// Derived from bSh23 and bIndexAinternal_Cb	

#define	bAlphaLeft0_Cb					80		// Derived from bIndexAleft0_Cb
#define	bBetaLeft0_Cb					81		// Derived from bIndexBleft0_Cb
#define	bAlphaTop0_Cb					82		// Derived from bIndexAtop0_Cb
#define	bBetaTop0_Cb					83		// Derived from bIndexBtop0_Cb
#define	bAlphaInternal_Cb				84		// Derived from bIndexAinternal_Cb
#define	bBetaInternal_Cb				85		// Derived from bIndexBinternal_Cb

#define	ExtBitFlags						86		// Extended bit flags, such as disable ILDB bits

// Shared between Cb and Cr
#define	bTc0_v00_0_Cr			bTc0_v00_0_Cb	
#define	bTc0_v10_0_Cr		    bTc0_v10_0_Cb	
#define	bTc0_v20_0_Cr		    bTc0_v20_0_Cb	
#define	bTc0_v30_0_Cr		    bTc0_v30_0_Cb	
#define	bTc0_v02_Cr			    bTc0_v02_Cb		
#define	bTc0_v12_Cr			    bTc0_v12_Cb		
#define	bTc0_v22_Cr			    bTc0_v22_Cb		
#define	bTc0_v32_Cr			    bTc0_v32_Cb		
#define	bTc0_h00_0_Cr		    bTc0_h00_0_Cb	
#define	bTc0_h01_0_Cr		    bTc0_h01_0_Cb	
#define	bTc0_h02_0_Cr		    bTc0_h02_0_Cb	
#define	bTc0_h03_0_Cr		    bTc0_h03_0_Cb	
#define	bTc0_h20_Cr			    bTc0_h20_Cb		
#define	bTc0_h21_Cr			    bTc0_h21_Cb		
#define	bTc0_h22_Cr			    bTc0_h22_Cb		
#define	bTc0_h23_Cr			    bTc0_h23_Cb		
                                
#define	bAlphaLeft0_Cr		    bAlphaLeft0_Cb		   
#define	bBetaLeft0_Cr		    bBetaLeft0_Cb		   
#define	bAlphaTop0_Cr		    bAlphaTop0_Cb		   
#define	bBetaTop0_Cr		    bBetaTop0_Cb		   
#define	bAlphaInternal_Cr	    bAlphaInternal_Cb	   
#define	bBetaInternal_Cr	    bBetaInternal_Cb	   


#endif


//========== End of Child Variables ===============================================================

#if !defined(COMBINED_KERNEL)
#define ILDB_LABEL(x)	x		// No symbol extension for standalone kernels
#endif

#endif	// !defined(__AVC_ILDB_HEADER__)