
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/texobj.c
	mc68030
	mc68881
	XREF	_gl_free_texture_image
	XREF	_HashFindFreeKeyBlock
	XREF	_HashRemove
	XREF	_HashInsert
	XREF	_HashLookup
	XREF	_gl_error
	XREF	_gl_problem
	XREF	_free
	XREF	_calloc
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err
	XREF	_CC

	SECTION "_gl_alloc_texture_object:0",CODE


;struct gl_texture_object *
	XDEF	_gl_alloc_texture_object
_gl_alloc_texture_object
	movem.l	d2/d3/a2/a3,-(a7)
	movem.l	$18(a7),d2/d3
	move.l	$14(a7),a3
L134
;   obj = (struct gl_texture_object *)
	pea	$498.w
	pea	1.w
	jsr	_calloc
	addq.w	#$8,a7
	move.l	d0,a2
;   if (obj) 
	cmp.w	#0,a2
	beq	L139
L135
;      obj->Name = name;
	move.l	d2,4(a2)
;      obj->Dimensions = dimensions;
	move.l	d3,$8(a2)
;      obj->WrapS = GL_REPEAT;
	move.l	#$2901,$20(a2)
;      obj->WrapT = GL_REPEAT;
	move.l	#$2901,$24(a2)
;      obj->MinFilter = GL_NEAREST_MIPMAP_LINEAR;
	move.l	#$2702,$2C(a2)
;      obj->MagFilter = GL_LINEAR;
	move.l	#$2601,$30(a2)
;      obj->MinLod = -1000.0;
	move.l	#$C47A0000,$34(a2)
;      obj->MaxLod = 1000.0;
	move.l	#$447A0000,$38(a2)
;      obj->BaseLevel = 0;
	clr.l	$3C(a2)
;      obj->MaxLevel = 1000;
	move.l	#$3E8,$40(a2)
;      obj->MinMagThresh = 0.0F;
	clr.l	$4C(a2)
;      obj->Palette[0] = 255;
	move.b	#$FF,$7C(a2)
;      obj->Palette[1] = 255;
	lea	$7C(a2),a0
	move.b	#$FF,1(a0)
;      obj->Palette[2] = 255;
	lea	$7C(a2),a0
	move.b	#$FF,2(a0)
;      obj->Palette[3] = 255;
	lea	$7C(a2),a0
	move.b	#$FF,3(a0)
;      obj->PaletteSize = 1;
	move.l	#1,$47C(a2)
;      obj->PaletteIntFormat = GL_RGBA;
	move.l	#$1908,$480(a2)
;      obj->PaletteFormat = GL_RGBA;
	move.l	#$1908,$484(a2)
;      if (shared) 
	cmp.w	#0,a3
	beq.b	L137
L136
;         obj->Next = shared->TexObjectList;
	move.l	a3,a1
	move.l	$C(a1),$494(a2)
;         shared->TexObjectList = obj;
	move.l	a3,a0
	move.l	a2,$C(a0)
L137
;      if (name > 0) 
	tst.l	d2
	beq.b	L139
L138
;         HashInsert(shared->TexObjects, name, obj);
	move.l	a2,-(a7)
	move.l	d2,-(a7)
	move.l	a3,a1
	move.l	$8(a1),-(a7)
	jsr	_HashInsert
	add.w	#$C,a7
L139
	move.l	a2,d0
	movem.l	(a7)+,d2/d3/a2/a3
	rts

	SECTION "_gl_free_texture_object:0",CODE

	rts

;void gl_free_texture_object( struct gl_shared_state *shared,
	XDEF	_gl_free_texture_object
_gl_free_texture_object
	movem.l	d2/a2-a4,-(a7)
	move.l	$18(a7),a2
	move.l	$14(a7),a4
L140
;   if (shared) 
	cmp.w	#0,a4
	beq.b	L149
L141
;      tprev = NULL;
	sub.l	a1,a1
;      tcurr = shared->TexObjectList;
	move.l	a4,a3
	move.l	$C(a3),a0
;      while (tcurr) 
	bra.b	L148
L142
;         if (tcurr==t) 
	cmp.l	a2,a0
	bne.b	L147
L143
;            if (tprev) 
	cmp.w	#0,a1
	beq.b	L145
L144
;               tprev->Next = t->Next;
	move.l	$494(a2),$494(a1)
	bra.b	L146
L145
;               shared->TexObjectList = t->Next;
	move.l	a4,a1
	move.l	$494(a2),$C(a1)
L146
;            
	bra.b	L149
L147
;         tprev = tcurr;
	move.l	a0,a1
;         tcurr = tcurr->Next;
	move.l	$494(a0),a0
L148
	cmp.w	#0,a0
	bne.b	L142
L149
;   if (t->Name) 
	tst.l	4(a2)
	beq.b	L151
L150
;      HashRemove(shared->TexObjects, t->Name);
	move.l	4(a2),-(a7)
	move.l	a4,a1
	move.l	$8(a1),-(a7)
	jsr	_HashRemove
	addq.w	#$8,a7
L151
;      for (i=0;
	moveq	#0,d2
	bra.b	L155
L152
;         if (t->Image[i]) 
	lea	$50(a2),a0
	tst.l	0(a0,d2.l*4)
	beq.b	L154
L153
;            gl_free_texture_image( t->Image[i] );
	lea	$50(a2),a0
	move.l	0(a0,d2.l*4),-(a7)
	jsr	_gl_free_texture_image
	addq.w	#4,a7
L154
	addq.l	#1,d2
L155
	cmp.l	#$B,d2
	blo.b	L152
L156
;   free( t );
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
	movem.l	(a7)+,d2/a2-a4
	rts

	SECTION "_gl_test_texture_object_completeness:0",CODE


;void gl_test_texture_object_completeness( struct gl_texture_object *
	XDEF	_gl_test_texture_object_completeness
_gl_test_texture_object_completeness
	movem.l	d2-d6,-(a7)
	move.l	$18(a7),a0
L158
;   t->Complete = GL_TRUE;
	move.b	#1,$48E(a0)
;   if (!t->Image[0] || !t->Image[0]->Data) 
	tst.l	$50(a0)
	beq.b	L160
L159
	move.l	$50(a0),a1
	tst.l	$34(a1)
	bne.b	L161
L160
;      t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L161
;   if (t->Dimensions==1) 
	move.l	$8(a0),d0
	cmp.l	#1,d0
	bne.b	L163
L162
;      t->P = t->Image[0]->WidthLog2;
	move.l	$50(a0),a1
	move.l	$24(a1),$44(a0)
	bra	L176
L163
;   else if (t->Dimensions==2) 
	move.l	$8(a0),d0
	cmp.l	#2,d0
	bne.b	L168
L164
;      t->P = MAX2(t->Image[0]->WidthLog2, t->Image[0]->HeightL
	move.l	$50(a0),a1
	move.l	$24(a1),d1
	move.l	$50(a0),a1
	cmp.l	$28(a1),d1
	bls.b	L166
L165
	move.l	$50(a0),a1
	move.l	$24(a1),d0
	bra.b	L167
L166
	move.l	$50(a0),a1
	move.l	$28(a1),d0
L167
	move.l	d0,$44(a0)
	bra.b	L176
L168
;   else if (t->Dimensions==3) 
	move.l	$8(a0),d0
	cmp.l	#3,d0
	bne.b	L176
L169
;      GLint max = MAX2(t->Image[0]->WidthLog2, t->Image[0]->He
	move.l	$50(a0),a1
	move.l	$24(a1),d1
	move.l	$50(a0),a1
	cmp.l	$28(a1),d1
	bls.b	L171
L170
	move.l	$50(a0),a1
	move.l	$24(a1),d0
	bra.b	L172
L171
	move.l	$50(a0),a1
	move.l	$28(a1),d0
L172
;      max = MAX2(max, (GLint)(t->Image[0]->DepthLog2));
	move.l	$50(a0),a1
	cmp.l	$2C(a1),d0
	ble.b	L174
L173
	bra.b	L175
L174
	move.l	$50(a0),a1
	move.l	$2C(a1),d0
L175
;      t->P = max;
	move.l	d0,$44(a0)
L176
;   t->M = (GLfloat) (MIN2(t->MaxLevel, t->P) - t->BaseLevel);
	move.l	$40(a0),d1
	cmp.l	$44(a0),d1
	bge.b	L178
L177
	move.l	$40(a0),d0
	bra.b	L179
L178
	move.l	$44(a0),d0
L179
	sub.l	$3C(a0),d0
	fmove.l	d0,fp0
	fmove.s	fp0,$48(a0)
;   if (t->MinFilter!=GL_NEAREST && t->MinFilter!=GL_LINEAR) 
	move.l	$2C(a0),d0
	cmp.l	#$2600,d0
	beq	L259
L180
	move.l	$2C(a0),d0
	cmp.l	#$2601,d0
	beq	L259
L181
;      GLint minLevel = t->BaseLevel;
	move.l	$3C(a0),d5
;      GLint maxLevel = MIN2(t->MaxLevel, MAX_TEXTURE_LEVELS-1);
	move.l	$40(a0),d0
	cmp.l	#$A,d0
	bge.b	L183
L182
	move.l	$40(a0),d4
	bra.b	L184
L183
	moveq	#$A,d4
L184
;      if (minLevel > maxLevel) 
	cmp.l	d4,d5
	ble.b	L186
L185
;         t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L186
;      for (i = minLevel;
	move.l	d5,d0
	bra.b	L195
L187
;         if (t->Image[i]) 
	lea	$50(a0),a1
	tst.l	0(a1,d0.l*4)
	beq.b	L194
L188
;            if (!t->Image[i]->Data) 
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	tst.l	$34(a1)
	bne.b	L190
L189
;               t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L190
;            if (t->Image[i]->Format != t->Image[0]->Form
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	move.l	(a1),d2
	move.l	$50(a0),a1
	cmp.l	(a1),d2
	beq.b	L192
L191
;               t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L192
;            if (t->Image[i]->Border != t->Image[0]->Bord
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	move.l	$8(a1),d2
	move.l	$50(a0),a1
	cmp.l	$8(a1),d2
	beq.b	L194
L193
;               t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L194
	addq.l	#1,d0
L195
	cmp.l	d4,d0
	ble.b	L187
L196
;               return;
;      if (t->Dimensions==1) 
	move.l	$8(a0),d0
	cmp.l	#1,d0
	bne	L213
L197
;         GLuint width = t->Image[0]->Width2;
	move.l	$50(a0),a1
	move.l	$18(a1),d1
;         for (i=1;
	moveq	#1,d0
	bra.b	L211
L198
;            if (width>1) 
	cmp.l	#1,d1
	bls.b	L200
L199
;               width /= 2;
	moveq	#1,d2
	lsr.l	d2,d1
L200
;            if (i >= minLevel && i <= maxLevel) 
	cmp.l	d5,d0
	blt.b	L208
L201
	cmp.l	d4,d0
	bgt.b	L208
L202
;               if (!t->Image[i]) 
	lea	$50(a0),a1
	tst.l	0(a1,d0.l*4)
	bne.b	L204
L203
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L204
;               if (!t->Image[i]->Data) 
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	tst.l	$34(a1)
	bne.b	L206
L205
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L206
;               if (t->Image[i]->Width2 != width ) 
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	move.l	$18(a1),d2
	cmp.l	d1,d2
	beq.b	L208
L207
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L208
;            if (width==1) 
	cmp.l	#1,d1
	bne.b	L210
L209
	movem.l	(a7)+,d2-d6
	rts
L210
	addq.l	#1,d0
L211
	cmp.l	#$B,d0
	blt.b	L198
L212
;               return;
	bra	L259
L213
;      else if (t->Dimensions==2) 
	move.l	$8(a0),d0
	cmp.l	#2,d0
	bne	L233
L214
;         GLuint width = t->Image[0]->Width2;
	move.l	$50(a0),a1
	move.l	$18(a1),d2
;         GLuint height = t->Image[0]->Height2;
	move.l	$50(a0),a1
	move.l	$1C(a1),d1
;         for (i=1;
	moveq	#1,d0
	bra	L231
L215
;            if (width>1) 
	cmp.l	#1,d2
	bls.b	L217
L216
;               width /= 2;
	moveq	#1,d3
	lsr.l	d3,d2
L217
;            if (height>1) 
	cmp.l	#1,d1
	bls.b	L219
L218
;               height /= 2;
	moveq	#1,d3
	lsr.l	d3,d1
L219
;            if (i >= minLevel && i <= maxLevel) 
	cmp.l	d5,d0
	blt.b	L230
L220
	cmp.l	d4,d0
	bgt.b	L230
L221
;               if (!t->Image[i]) 
	lea	$50(a0),a1
	tst.l	0(a1,d0.l*4)
	bne.b	L223
L222
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L223
;               if (t->Image[i]->Width2 != width) 
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	move.l	$18(a1),d3
	cmp.l	d2,d3
	beq.b	L225
L224
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L225
;               if (t->Image[i]->Height2 != height) 
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	move.l	$1C(a1),d3
	cmp.l	d1,d3
	beq.b	L227
L226
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L227
;               if (width==1 && height==1) 
	cmp.l	#1,d2
	bne.b	L230
L228
	cmp.l	#1,d1
	bne.b	L230
L229
	movem.l	(a7)+,d2-d6
	rts
L230
	addq.l	#1,d0
L231
	cmp.l	#$B,d0
	blt	L215
L232
;                  return;
	bra	L259
L233
;      else if (t->Dimensions==3) 
	move.l	$8(a0),d0
	cmp.l	#3,d0
	bne	L258
L234
;         GLuint width = t->Image[0]->Width2;
	move.l	$50(a0),a1
	move.l	$18(a1),d3
;         GLuint height = t->Image[0]->Height2;
	move.l	$50(a0),a1
	move.l	$1C(a1),d2
;         GLuint depth = t->Image[0]->Depth2;
	move.l	$50(a0),a1
	move.l	$20(a1),d1
;         for (i=1;
	moveq	#1,d0
	bra	L256
L235
;            if (width>1) 
	cmp.l	#1,d3
	bls.b	L237
L236
;               width /= 2;
	moveq	#1,d6
	lsr.l	d6,d3
L237
;            if (height>1) 
	cmp.l	#1,d2
	bls.b	L239
L238
;               height /= 2;
	moveq	#1,d6
	lsr.l	d6,d2
L239
;            if (depth>1) 
	cmp.l	#1,d1
	bls.b	L241
L240
;               depth /= 2;
	moveq	#1,d6
	lsr.l	d6,d1
L241
;            if (i >= minLevel && i <= maxLevel) 
	cmp.l	d5,d0
	blt.b	L251
L242
	cmp.l	d4,d0
	bgt.b	L251
L243
;               if (!t->Image[i]) 
	lea	$50(a0),a1
	tst.l	0(a1,d0.l*4)
	bne.b	L245
L244
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L245
;               if (t->Image[i]->Width2 != width) 
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	move.l	$18(a1),d6
	cmp.l	d3,d6
	beq.b	L247
L246
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L247
;               if (t->Image[i]->Height2 != height) 
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	move.l	$1C(a1),d6
	cmp.l	d2,d6
	beq.b	L249
L248
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L249
;               if (t->Image[i]->Depth2 != depth) 
	lea	$50(a0),a1
	move.l	0(a1,d0.l*4),a1
	move.l	$20(a1),d6
	cmp.l	d1,d6
	beq.b	L251
L250
;                  t->Complete = GL_FALSE;
	clr.b	$48E(a0)
	movem.l	(a7)+,d2-d6
	rts
L251
;            if (width==1 && height==1 && depth==1) 
	cmp.l	#1,d3
	bne.b	L255
L252
	cmp.l	#1,d2
	bne.b	L255
L253
	cmp.l	#1,d1
	bne.b	L255
L254
	movem.l	(a7)+,d2-d6
	rts
L255
	addq.l	#1,d0
L256
	cmp.l	#$B,d0
	blt	L235
L257
;               return;
	bra.b	L259
L258
;         gl_problem(NULL, "Bug in gl_test_texture_object_co
	move.l	#L157,-(a7)
	clr.l	-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
L259
	movem.l	(a7)+,d2-d6
	rts

L157
	dc.b	'Bug in gl_test_texture_object_completeness',$A,0

	SECTION "_gl_GenTextures:0",CODE


;void gl_GenTextures( GLcontext *ctx, GLsizei n, GLuint *texName )
	XDEF	_gl_GenTextures
_gl_GenTextures
	movem.l	d2-d4/a2/a3,-(a7)
	movem.l	$1C(a7),d3/a3
	move.l	$18(a7),a2
L261
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L263
L262
;      gl_error( ctx, GL_INVALID_OPERATION, "glGenTextures" );
	move.l	#L260,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d4/a2/a3
	rts
L263
;   if (n<0) 
	tst.l	d3
	bpl.b	L265
L264
;      gl_error( ctx, GL_INVALID_VALUE, "glGenTextures" );
	move.l	#L260,-(a7)
	pea	$501.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d4/a2/a3
	rts
L265
;   first = HashFindFreeKeyBlock(ctx->Shared->TexObjects, n);
	move.l	d3,-(a7)
	move.l	(a2),a0
	move.l	$8(a0),-(a7)
	jsr	_HashFindFreeKeyBlock
	addq.w	#$8,a7
	move.l	d0,d4
;   for (i=0;
	moveq	#0,d2
	bra.b	L267
L266
;      texName[i] = first + i;
	move.l	d4,d0
	add.l	d2,d0
	move.l	d0,0(a3,d2.l*4)
	addq.l	#1,d2
L267
	cmp.l	d3,d2
	blt.b	L266
L268
;   for (i=0;
	moveq	#0,d2
	bra.b	L270
L269
;      GLuint name = first + i;
	move.l	d4,d1
	add.l	d2,d1
;      GLuint dims = 0;
;      (void) gl_alloc_texture_object(ctx->Shared, name, dims);
	clr.l	-(a7)
	move.l	d1,-(a7)
	move.l	(a2),-(a7)
	jsr	_gl_alloc_texture_object
	add.w	#$C,a7
	addq.l	#1,d2
L270
	cmp.l	d3,d2
	blt.b	L269
L271
	movem.l	(a7)+,d2-d4/a2/a3
	rts

L260
	dc.b	'glGenTextures',0

	SECTION "_gl_DeleteTextures:0",CODE


;void gl_DeleteTextures( GLcontext *ctx, GLsizei n, const GLuint *tex
	XDEF	_gl_DeleteTextures
_gl_DeleteTextures
L294	EQU	-$10
	link	a5,#L294
	movem.l	d2-d4/a2-a4,-(a7)
	move.l	$C(a5),d3
	move.l	$8(a5),a4
L273
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a4,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L275
L274
;      gl_error( ctx, GL_INVALID_OPERATION, "glDeleteTextures" )
	move.l	#L272,-(a7)
	pea	$502.w
	move.l	a4,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L275
;   for (i=0;
	moveq	#0,d2
	bra	L292
L276
;      if (texName[i]>0) 
	move.l	$10(a5),a1
	tst.l	0(a1,d2.l*4)
	beq	L291
L277
;         t = (struct gl_texture_object *)
	move.l	$10(a5),a1
	move.l	0(a1,d2.l*4),-(a7)
	move.l	a4,a1
	move.l	(a1),a0
	move.l	$8(a0),-(a7)
	jsr	_HashLookup
	addq.w	#$8,a7
	move.l	d0,a2
;         if (t) 
	cmp.w	#0,a2
	beq	L291
L278
;            for (texSet=0;
	moveq	#0,d0
	bra.b	L286
L279
;               struct gl_texture_set *set = &ctx->Tex
	move.l	a4,a0
	add.l	#$DEC6,a0
	move.l	d0,d1
	muls.l	#$BC,d1
	add.l	d1,a0
;               if (set->Current1D==t) 
	move.l	$A8(a0),a1
	cmp.l	a2,a1
	bne.b	L281
L280
;                  set->Current1D = ctx->Shared->De
	move.l	a4,a3
	move.l	(a3),a1
	lea	$10(a1),a1
	move.l	0(a1,d0.l*4),$A8(a0)
;                  t->RefCount--;
	subq.l	#1,(a2)
	bra.b	L285
L281
;               else if (set->Current2D==t) 
	move.l	$AC(a0),a1
	cmp.l	a2,a1
	bne.b	L283
L282
;                  set->Current2D = ctx->Shared->De
	move.l	a4,a3
	move.l	(a3),a1
	lea	$18(a1),a1
	move.l	0(a1,d0.l*4),$AC(a0)
;                  t->RefCount--;
	subq.l	#1,(a2)
	bra.b	L285
L283
;               else if (set->Current3D==t) 
	move.l	$B0(a0),a1
	cmp.l	a2,a1
	bne.b	L285
L284
;                  set->Current3D = ctx->Shared->De
	move.l	a4,a3
	move.l	(a3),a1
	lea	$20(a1),a1
	move.l	0(a1,d0.l*4),$B0(a0)
;                  t->RefCount--;
	subq.l	#1,(a2)
L285
	addq.l	#1,d0
L286
	cmp.l	#2,d0
	blo.b	L279
L287
;            if (ctx->Driver.DeleteTexture) 
	tst.l	$9D8(a4)
	beq.b	L289
L288
;               (*ctx->Driver.DeleteTexture)( ctx, t );
	move.l	a2,-(a7)
	move.l	a4,-(a7)
	move.l	$9D8(a4),a0
	jsr	(a0)
	addq.w	#$8,a7
L289
;            if (t->RefCount==0) 
	tst.l	(a2)
	bne.b	L291
L290
;               gl_free_texture_object(ctx->Shared, t);
	move.l	a2,-(a7)
	move.l	a4,a1
	move.l	(a1),-(a7)
	jsr	_gl_free_texture_object
	addq.w	#$8,a7
L291
	addq.l	#1,d2
L292
	cmp.l	d3,d2
	blt	L276
L293
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts

L272
	dc.b	'glDeleteTextures',0

	SECTION "_gl_BindTexture:0",CODE


;void gl_BindTexture( GLcontext *ctx, GLenum target, GLuint texName )
	XDEF	_gl_BindTexture
_gl_BindTexture
L340	EQU	-$28
	link	a5,#L340
	movem.l	d2-d4/a2-a4,-(a7)
	move.l	$10(a5),d3
	move.l	$C(a5),d4
	move.l	$8(a5),a2
L297
;   struct gl_texture_set *texSet = &ctx->Texture.Set[ctx->Texture
	move.l	a2,a1
	add.l	#$DEC6,a1
	move.l	a2,a0
	add.l	#$DEBA,a0
	move.l	(a0),d0
	muls.l	#$BC,d0
	add.l	a1,d0
	move.l	d0,-4(a5)
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L299
L298
;      gl_error( ctx, GL_INVALID_OPERATION, "glBindTexture" );
	move.l	#L295,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L299
;   switch (target)
	move.l	d4,d0
	cmp.l	#$DE1,d0
	beq.b	L301
	bgt.b	L341
	cmp.l	#$DE0,d0
	beq.b	L300
	bra.b	L303
L341
	cmp.l	#$806F,d0
	beq.b	L302
	bra.b	L303
;      
L300
;         oldTexObj = texSet->Current1D;
	move.l	-4(a5),a0
	move.l	$A8(a0),a4
;         targetPointer = &texSet->Current1D;
	move.l	#$A8,d0
	add.l	-4(a5),d0
	move.l	d0,a3
;         targetDimensions = 1;
	moveq	#1,d2
;         
	bra.b	L304
L301
;         oldTexObj = texSet->Current2D;
	move.l	-4(a5),a0
	move.l	$AC(a0),a4
;         targetPointer = &texSet->Current2D;
	move.l	#$AC,d0
	add.l	-4(a5),d0
	move.l	d0,a3
;         targetDimensions = 2;
	moveq	#2,d2
;         
	bra.b	L304
L302
;         oldTexObj = texSet->Current3D;
	move.l	-4(a5),a0
	move.l	$B0(a0),a4
;         targetPointer = &texSet->Current3D;
	move.l	#$B0,d0
	add.l	-4(a5),d0
	move.l	d0,a3
;         targetDimensions = 3;
	moveq	#3,d2
;         
	bra.b	L304
L303
;         gl_error( ctx, GL_INVALID_ENUM, "glBindTexture" );
	move.l	#L295,-(a7)
	pea	$500.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L304
;         return;
;   if (texName==0) 
	tst.l	d3
	bne	L311
L305
;      switch (target)
	move.l	d4,d0
	cmp.l	#$DE1,d0
	beq.b	L307
	bgt.b	L342
	cmp.l	#$DE0,d0
	beq.b	L306
	bra.b	L309
L342
	cmp.l	#$806F,d0
	beq.b	L308
	bra.b	L309
;         
L306
;            newTexObj = ctx->Shared->Default1D[ctx->Text
	move.l	(a2),a0
	lea	$10(a0),a1
	move.l	a2,a0
	add.l	#$DEBA,a0
	move.l	(a0),d0
	move.l	0(a1,d0.l*4),a0
;            
	bra.b	L310
L307
;            newTexObj = ctx->Shared->Default2D[ctx->Text
	move.l	(a2),a0
	lea	$18(a0),a1
	move.l	a2,a0
	add.l	#$DEBA,a0
	move.l	(a0),d0
	move.l	0(a1,d0.l*4),a0
;            
	bra.b	L310
L308
;            newTexObj = ctx->Shared->Default3D[ctx->Text
	move.l	(a2),a0
	lea	$20(a0),a1
	move.l	a2,a0
	add.l	#$DEBA,a0
	move.l	(a0),d0
	move.l	0(a1,d0.l*4),a0
;            
	bra.b	L310
L309
;            gl_problem(ctx, "Bad target in gl_BindTextur
	move.l	#L296,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L310
;            return;
	bra.b	L320
L311
;      newTexObj = (struct gl_texture_object *)
	move.l	d3,-(a7)
	move.l	(a2),a0
	move.l	$8(a0),-(a7)
	jsr	_HashLookup
	addq.w	#$8,a7
	move.l	d0,a0
;      if (newTexObj) 
	cmp.w	#0,a0
	beq.b	L319
L312
;         if (newTexObj->Dimensions == 0) 
	tst.l	$8(a0)
	bne.b	L314
L313
;            newTexObj->Dimensions = targetDimensions;
	move.l	d2,$8(a0)
	bra.b	L318
L314
;            if (newTexObj == oldTexObj)
	cmp.l	a4,a0
	bne.b	L316
L315
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L316
;            if (newTexObj->Dimensions != targetDimension
	move.l	$8(a0),d0
	cmp.l	d2,d0
	beq.b	L318
L317
;               gl_error( ctx, GL_INVALID_OPERATION, "
	move.l	#L295,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L318
;               return;
	bra.b	L320
L319
;         newTexObj = gl_alloc_texture_object(ctx->Shared, t
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	(a2),-(a7)
	jsr	_gl_alloc_texture_object
	add.w	#$C,a7
	move.l	d0,a0
L320
;   *targetPointer = newTexObj;
	move.l	a3,a1
	move.l	a0,(a1)
;   if (*targetPointer != oldTexObj && oldTexObj->Name>0) 
	move.l	(a3),a1
	cmp.l	a4,a1
	beq.b	L323
L321
	move.l	a4,a1
	tst.l	4(a1)
	beq.b	L323
L322
;      oldTexObj->RefCount--;
	move.l	a4,a1
	move.l	(a1),d0
	subq.l	#1,d0
	move.l	a4,a1
	move.l	d0,(a1)
L323
;   if (newTexObj->Name>0) 
	tst.l	4(a0)
	beq.b	L325
L324
;      newTexObj->RefCount++;
	addq.l	#1,(a0)
L325
;      HashLookup(
	move.l	a4,a1
	move.l	$20(a1),d1
	cmp.l	$20(a0),d1
	bne.b	L334
L326
	move.l	a4,a1
	move.l	$24(a1),d1
	cmp.l	$24(a0),d1
	bne.b	L334
L327
	move.l	a4,a1
	move.l	$28(a1),d1
	cmp.l	$28(a0),d1
	bne.b	L334
L328
	move.l	a4,a1
	move.l	$2C(a1),d1
	cmp.l	$2C(a0),d1
	bne.b	L334
L329
	move.l	a4,a1
	move.l	$30(a1),d1
	cmp.l	$30(a0),d1
	bne.b	L334
L330
	tst.l	$50(a4)
	beq.b	L333
L331
	tst.l	$50(a0)
	beq.b	L333
L332
	move.l	$50(a4),a1
	move.l	(a1),d1
	move.l	$50(a0),a1
	cmp.l	(a1),d1
	bne.b	L334
L333
	tst.b	$48E(a0)
	bne.b	L335
L334
;      ctx->NewState |= NEW_RASTER_OPS;
	move.l	a2,a1
	add.l	#$E960,a1
	move.l	(a1),d0
	or.l	#2,d0
	move.l	a2,a1
	add.l	#$E960,a1
	move.l	d0,(a1)
L335
;   if (oldTexObj == texSet->Current) 
	move.l	-4(a5),a3
	cmp.l	$B4(a3),a4
	bne.b	L337
L336
;      texSet->Current = newTexObj;
	move.l	-4(a5),a1
	move.l	a0,$B4(a1)
L337
;   if (ctx->Driver.BindTexture) 
	tst.l	$9D4(a2)
	beq.b	L339
L338
;      (*ctx->Driver.BindTexture)( ctx, target, newTexObj );
	move.l	a0,-(a7)
	move.l	d4,-(a7)
	move.l	a2,-(a7)
	move.l	$9D4(a2),a0
	jsr	(a0)
	add.w	#$C,a7
L339
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts

L296
	dc.b	'Bad target in gl_BindTexture',0
L295
	dc.b	'glBindTexture',0

	SECTION "_gl_PrioritizeTextures:0",CODE


;void gl_PrioritizeTextures( GLcontext *ctx,
	XDEF	_gl_PrioritizeTextures
_gl_PrioritizeTextures
	movem.l	d2/d3/a2-a4,-(a7)
	movem.l	$1C(a7),d3/a3
	move.l	$24(a7),a2
	move.l	$18(a7),a4
L344
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a4,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L346
L345
;      gl_error( ctx, GL_INVALID_OPERATION, "glPrioritizeTextur
	move.l	#L343,-(a7)
	pea	$502.w
	move.l	a4,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/d3/a2-a4
	rts
L346
;   if (n<0) 
	tst.l	d3
	bpl.b	L348
L347
;      gl_error( ctx, GL_INVALID_VALUE, "glPrioritizeTextures" )
	move.l	#L343,-(a7)
	pea	$501.w
	move.l	a4,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/d3/a2-a4
	rts
L348
;   for (i=0;
	moveq	#0,d2
	bra.b	L359
L349
;      if (texName[i]>0) 
	tst.l	0(a3,d2.l*4)
	beq.b	L358
L350
;         t = (struct gl_texture_object *)
	move.l	0(a3,d2.l*4),-(a7)
	move.l	a4,a1
	move.l	(a1),a0
	move.l	$8(a0),-(a7)
	jsr	_HashLookup
	addq.w	#$8,a7
	move.l	d0,a0
;         if (t) 
	cmp.w	#0,a0
	beq.b	L358
L351
;            t->Priority = CLAMP( priorities[i], 0.0F, 1.
	fmove.s	0(a2,d2.l*4),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L353
L352
	fmove.s	#$.00000000,fp0
	bra.b	L357
L353
	fmove.s	0(a2,d2.l*4),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L355
L354
	fmove.s	#$.3F800000,fp0
	bra.b	L356
L355
	fmove.s	0(a2,d2.l*4),fp0
L356
L357
	fmove.s	fp0,$C(a0)
L358
	addq.l	#1,d2
L359
	cmp.l	d3,d2
	blt.b	L349
L360
	movem.l	(a7)+,d2/d3/a2-a4
	rts

L343
	dc.b	'glPrioritizeTextures',0

	SECTION "_gl_AreTexturesResident:0",CODE


;GLboolean gl_AreTexturesResident( GLcontext *ctx, GLsizei n,
	XDEF	_gl_AreTexturesResident
_gl_AreTexturesResident
	movem.l	d2-d4/a2-a4,-(a7)
	movem.l	$20(a7),d3/a3/a4
	move.l	$1C(a7),a2
L364
;   GLboolean resident = GL_TRUE;
	moveq	#1,d4
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L366
L365
;      gl_error( ctx, GL_INVALID_OPERATION, "glAreTexturesResid
	move.l	#L361,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	moveq	#0,d0
	movem.l	(a7)+,d2-d4/a2-a4
	rts
L366
;   if (n<0) 
	tst.l	d3
	bpl.b	L368
L367
;      gl_error( ctx, GL_INVALID_VALUE, "glAreTexturesResident(
	move.l	#L362,-(a7)
	pea	$501.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	moveq	#0,d0
	movem.l	(a7)+,d2-d4/a2-a4
	rts
L368
;   for (i=0;
	moveq	#0,d2
	bra.b	L375
L369
;      if (texName[i]==0) 
	tst.l	0(a3,d2.l*4)
	bne.b	L371
L370
;         gl_error( ctx, GL_INVALID_VALUE, "glAreTexturesRes
	move.l	#L363,-(a7)
	pea	$501.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	moveq	#0,d0
	movem.l	(a7)+,d2-d4/a2-a4
	rts
L371
;      t = (struct gl_texture_object *)
	move.l	0(a3,d2.l*4),-(a7)
	move.l	(a2),a0
	move.l	$8(a0),-(a7)
	jsr	_HashLookup
	addq.w	#$8,a7
;      if (t) 
	tst.l	d0
	beq.b	L373
L372
;         residences[i] = GL_TRUE;
	move.b	#1,0(a4,d2.l)
	bra.b	L374
L373
;         gl_error( ctx, GL_INVALID_VALUE, "glAreTexturesRes
	move.l	#L363,-(a7)
	pea	$501.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	moveq	#0,d0
	movem.l	(a7)+,d2-d4/a2-a4
	rts
L374
	addq.l	#1,d2
L375
	cmp.l	d3,d2
	blt.b	L369
L376
;         return 
	move.b	d4,d0
	movem.l	(a7)+,d2-d4/a2-a4
	rts

L361
	dc.b	'glAreTexturesResident',0
L362
	dc.b	'glAreTexturesResident(n)',0
L363
	dc.b	'glAreTexturesResident(textures)',0

	SECTION "_gl_IsTexture:0",CODE


;GLboolean gl_IsTexture( GLcontext *ctx, GLuint texture )
	XDEF	_gl_IsTexture
_gl_IsTexture
	move.l	$8(a7),d0
	move.l	4(a7),a0
L378
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a0,a1
	add.l	#$E968,a1
	move.l	(a1),d1
	cmp.l	#$1A00,d1
	beq.b	L380
L379
;      gl_error( ctx, GL_INVALID_OPERATION, "glIsTextures" );
	move.l	#L377,-(a7)
	pea	$502.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	moveq	#0,d0
	rts
L380
;   if (texture>0 && HashLookup(ctx->Shared->TexObjects, texture))
	tst.l	d0
	beq.b	L383
L381
	move.l	d0,-(a7)
	move.l	(a0),a0
	move.l	$8(a0),-(a7)
	jsr	_HashLookup
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L383
L382
	moveq	#1,d0
	rts
L383
	moveq	#0,d0
	rts

L377
	dc.b	'glIsTextures',0

	END
