summaryrefslogtreecommitdiff
path: root/utils/studiomdl/hardwarevertexcache.cpp
blob: 1c5a41c34ee6583796f70b9fe5163be090af359e (plain) (blame)
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
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#include <stdlib.h>
#include <stdio.h>
#include "HardwareVertexCache.h"

CHardwareVertexCache::CHardwareVertexCache()
{
	m_Fifo = NULL;
	m_Size = 0;
	Flush();
}

void CHardwareVertexCache::Init( int size )
{
	m_Size = size;
	m_Fifo = new int[size];
	Flush();
}

void CHardwareVertexCache::Flush( void )
{
	m_HeadIndex = 0;
	m_NumEntries = 0;
}

bool CHardwareVertexCache::IsPresent( int index )
{
	int i;
//	printf( "testing if %d is present\n", index );
	for( i = 0; i < m_NumEntries; i++ )
	{
		if( m_Fifo[( m_HeadIndex + i ) % m_Size] == index )
		{
//			printf( "yes!\n" );
			return true;
		}
	}
//	printf( "no!\n" );
//	Print();
	return false;
}

void CHardwareVertexCache::Insert( int index )
{
//	printf( "Inserting: %d\n", index );
	m_Fifo[( m_HeadIndex + m_NumEntries ) % m_Size] = index;
	if( m_NumEntries == m_Size )
	{
		m_HeadIndex = ( m_HeadIndex + 1 ) % m_Size;
	}
	else
	{
		m_NumEntries++;
	}
//	Print();
}

void CHardwareVertexCache::Print( void )
{
	int i;
	for( i = 0; i < m_NumEntries; i++ )
	{
		printf( "fifo entry %d: %d\n", i, ( int )m_Fifo[( m_HeadIndex + i ) % m_Size] );
	}
}