diff --git a/360/xdk360_video_resources.cpp b/360/xdk360_video_resources.cpp
deleted file mode 100644
index ee778b2023..0000000000
--- a/360/xdk360_video_resources.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/* RetroArch - A frontend for libretro.
- * Copyright (C) 2010-2012 - Hans-Kristian Arntzen
- * Copyright (C) 2011-2012 - Daniel De Matteis
- *
- * RetroArch is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with RetroArch.
- * If not, see .
- */
-
-#include
-#include "xdk360_video_resources.h"
-
-struct XPR_HEADER
-{
- unsigned long dwMagic;
- unsigned long dwHeaderSize;
- unsigned long dwDataSize;
-};
-
-#define XPR2_MAGIC_VALUE (0x58505232)
-
-PackedResource::PackedResource()
-{
- m_pSysMemData = NULL;
- m_dwSysMemDataSize = 0L;
- m_pVidMemData = NULL;
- m_dwVidMemDataSize = 0L;
- m_pResourceTags = NULL;
- m_dwNumResourceTags = 0L;
- m_bInitialized = FALSE;
-}
-
-PackedResource::~PackedResource()
-{
- Destroy();
-}
-
-void * PackedResource::GetData( const char * strName ) const
-{
- if( m_pResourceTags == NULL || strName == NULL )
- return NULL;
-
- for( unsigned long i = 0; i < m_dwNumResourceTags; i++ )
- { if( !_stricmp( strName, m_pResourceTags[i].strName ) )
- return &m_pSysMemData[m_pResourceTags[i].dwOffset];
- }
-
- return NULL;
-}
-
-HRESULT PackedResource::Create( const char * strFilename )
-{
- unsigned long dwNumBytesRead;
- void * hFile = CreateFile( strFilename, GENERIC_READ, FILE_SHARE_READ, NULL,
- OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL );
-
- if( hFile == INVALID_HANDLE_VALUE )
- {
- RARCH_ERR( "File <%s> not found.\n", strFilename );
- return E_FAIL;
- }
-
- // Read in and verify the XPR magic header
- XPR_HEADER xprh;
- if( !ReadFile( hFile, &xprh, sizeof( XPR_HEADER ), &dwNumBytesRead, NULL ) )
- {
- RARCH_ERR( "Error reading XPR header in file <%s>.\n", strFilename );
- CloseHandle( hFile );
- return E_FAIL;
- }
-
- if( xprh.dwMagic != XPR2_MAGIC_VALUE )
- {
- RARCH_ERR( "Invalid Xbox Packed Resource (.xpr) file: Magic = 0x%08lx.\n", xprh.dwMagic );
- CloseHandle( hFile );
- return E_FAIL;
- }
-
- // Compute memory requirements
- m_dwSysMemDataSize = xprh.dwHeaderSize;
- m_dwVidMemDataSize = xprh.dwDataSize;
-
- // Allocate memory
- m_pSysMemData = (unsigned char*)malloc(m_dwSysMemDataSize);
- if( m_pSysMemData == NULL )
- {
- RARCH_ERR( "Could not allocate system memory.\n" );
- m_dwSysMemDataSize = 0;
- return E_FAIL;
- }
- m_pVidMemData = ( unsigned char* )XMemAlloc( m_dwVidMemDataSize, MAKE_XALLOC_ATTRIBUTES( 0, 0, 0, 0, eXALLOCAllocatorId_GameMax,
- XALLOC_PHYSICAL_ALIGNMENT_4K, XALLOC_MEMPROTECT_WRITECOMBINE, 0, XALLOC_MEMTYPE_PHYSICAL ) );
-
- if( m_pVidMemData == NULL )
- {
- RARCH_ERR( "Could not allocate physical memory.\n" );
- m_dwSysMemDataSize = 0;
- m_dwVidMemDataSize = 0;
- free(m_pSysMemData);
- m_pSysMemData = NULL;
- return E_FAIL;
- }
-
- // Read in the data from the file
- if( !ReadFile( hFile, m_pSysMemData, m_dwSysMemDataSize, &dwNumBytesRead, NULL ) ||
- !ReadFile( hFile, m_pVidMemData, m_dwVidMemDataSize, &dwNumBytesRead, NULL ) )
- {
- RARCH_ERR( "Unable to read Xbox Packed Resource (.xpr) file.\n" );
- CloseHandle( hFile );
- return E_FAIL;
- }
-
- // Done with the file
- CloseHandle( hFile );
-
- // Extract resource table from the header data
- m_dwNumResourceTags = *( unsigned long * )( m_pSysMemData + 0 );
- m_pResourceTags = ( RESOURCE* )( m_pSysMemData + 4 );
-
- // Patch up the resources
- for( unsigned long i = 0; i < m_dwNumResourceTags; i++ )
- {
- m_pResourceTags[i].strName = ( char * )( m_pSysMemData + ( unsigned long )m_pResourceTags[i].strName );
-
- // Fixup the texture memory
- if( ( m_pResourceTags[i].dwType & 0xffff0000 ) == ( RESOURCETYPE_TEXTURE & 0xffff0000 ) )
- {
- D3DTexture* pTexture = ( D3DTexture* )&m_pSysMemData[m_pResourceTags[i].dwOffset];
- // Adjust Base address according to where memory was allocated
- XGOffsetBaseTextureAddress( pTexture, m_pVidMemData, m_pVidMemData );
- }
- }
-
- m_bInitialized = TRUE;
-
- return 0;
-}
-
-void PackedResource::Destroy()
-{
- free(m_pSysMemData);
- m_pSysMemData = NULL;
- m_dwSysMemDataSize = 0L;
-
- if( m_pVidMemData != NULL )
- XMemFree( m_pVidMemData, MAKE_XALLOC_ATTRIBUTES( 0, 0, 0, 0, eXALLOCAllocatorId_GameMax,
- 0, 0, 0, XALLOC_MEMTYPE_PHYSICAL ) );
-
- m_pVidMemData = NULL;
- m_dwVidMemDataSize = 0L;
-
- m_pResourceTags = NULL;
- m_dwNumResourceTags = 0L;
-
- m_bInitialized = FALSE;
-}
diff --git a/360/xdk360_video_resources.h b/360/xdk360_video_resources.h
deleted file mode 100644
index 584dcd1547..0000000000
--- a/360/xdk360_video_resources.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* RetroArch - A frontend for libretro.
- * Copyright (C) 2010-2012 - Hans-Kristian Arntzen
- * Copyright (C) 2011-2012 - Daniel De Matteis
- *
- * RetroArch is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with RetroArch.
- * If not, see .
- */
-
-#ifndef RARCH_360_RESOURCES_H
-#define RARCH_360_RESOURCES_H
-
-struct RESOURCE
-{
- unsigned long dwType;
- unsigned long dwOffset;
- unsigned long dwSize;
- char * strName;
-};
-
-// Resource types
-enum
-{
- RESOURCETYPE_USERDATA = ( ( 'U' << 24 ) | ( 'S' << 16 ) | ( 'E' << 8 ) | ( 'R' ) ),
- RESOURCETYPE_TEXTURE = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( '2' << 8 ) | ( 'D' ) ),
- RESOURCETYPE_CUBEMAP = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( 'C' << 8 ) | ( 'M' ) ),
- RESOURCETYPE_VOLUMETEXTURE = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( '3' << 8 ) | ( 'D' ) ),
- RESOURCETYPE_VERTEXBUFFER = ( ( 'V' << 24 ) | ( 'B' << 16 ) | ( 'U' << 8 ) | ( 'F' ) ),
- RESOURCETYPE_INDEXBUFFER = ( ( 'I' << 24 ) | ( 'B' << 16 ) | ( 'U' << 8 ) | ( 'F' ) ),
- RESOURCETYPE_EOF = 0xffffffff
-};
-
-
-class PackedResource
-{
- protected:
- unsigned char * m_pSysMemData; // Alloc'ed memory for resource headers etc.
- unsigned char * m_pVidMemData; // Alloc'ed memory for resource data, etc.
- unsigned long m_dwSysMemDataSize;
- unsigned long m_dwVidMemDataSize;
- unsigned long m_dwNumResourceTags; // Number of resource tags
- RESOURCE* m_pResourceTags; // Tags to associate names with the resources
- public:
- int m_bInitialized; // Resource is fully initialized
- HRESULT Create( const char * strFilename );
- void Destroy();
-
- void * GetData( unsigned long dwOffset ) const
- {
- return &m_pSysMemData[dwOffset];
- }
-
- D3DResource* GetResource( unsigned long dwOffset ) const
- {
- return (( D3DResource* )GetData( dwOffset ) );
- }
-
- D3DTexture* GetTexture( unsigned long dwOffset ) const
- {
- return ( D3DTexture* )GetResource( dwOffset );
- }
-
- void * GetData( const char * strName ) const;
-
- D3DResource* GetResource( const char * strName ) const
- {
- return ( ( D3DResource* )GetData( strName ) );
- }
-
- D3DTexture* GetTexture( const char * strName ) const
- {
- return ( D3DTexture* )GetResource( strName );
- }
-
- PackedResource();
- ~PackedResource();
-};
-
-#endif
diff --git a/360/xdk_d3d9.cpp b/360/xdk_d3d9.cpp
index fb0ce54811..d3bbc49c82 100644
--- a/360/xdk_d3d9.cpp
+++ b/360/xdk_d3d9.cpp
@@ -38,7 +38,7 @@
#include "../gfx/fonts/xdk360_fonts.h"
#endif
-#include "xdk360_video_resources.h"
+#include "xdk_resources.h"
extern video_console_t video_console;
extern xdk360_video_font_t m_Font;
diff --git a/360/xdk_resources.cpp b/360/xdk_resources.cpp
new file mode 100644
index 0000000000..3446bc65ce
--- /dev/null
+++ b/360/xdk_resources.cpp
@@ -0,0 +1,301 @@
+#include
+#include "xdk_resources.h"
+
+#ifdef _XBOX360
+struct XPR_HEADER
+{
+ DWORD dwMagic;
+ DWORD dwHeaderSize;
+ DWORD dwDataSize;
+};
+#endif
+
+#define XPR0_MAGIC_VALUE 0x30525058
+#define XPR1_MAGIC_VALUE 0x31525058
+#define XPR2_MAGIC_VALUE 0x58505232
+
+const DWORD eXALLOCAllocatorId_AtgResource = eXALLOCAllocatorId_GameMax;
+
+PackedResource::PackedResource()
+{
+ m_pSysMemData = NULL;
+ m_dwSysMemDataSize = 0L;
+ m_pVidMemData = NULL;
+ m_dwVidMemDataSize = 0L;
+ m_pResourceTags = NULL;
+ m_dwNumResourceTags = 0L;
+ m_bInitialized = FALSE;
+}
+
+
+PackedResource::~PackedResource()
+{
+ Destroy();
+}
+
+void *PackedResource::GetData( const CHAR* strName ) const
+{
+ if( NULL == m_pResourceTags || NULL == strName )
+ return NULL;
+
+#if defined(_XBOX1)
+ for( DWORD i=0; m_pResourceTags[i].strName; i++ )
+#elif defined(_XBOX360)
+ for( DWORD i = 0; i < m_dwNumResourceTags; i++ )
+#endif
+ {
+ if( !_stricmp( strName, m_pResourceTags[i].strName ) )
+ {
+ return &m_pSysMemData[m_pResourceTags[i].dwOffset];
+ }
+ }
+
+ return NULL;
+}
+
+static __forceinline void* AllocateContiguousMemory( DWORD Size, DWORD Alignment,
+ DWORD Protection = XALLOC_MEMPROTECT_WRITECOMBINE )
+{
+#if defined(_XBOX1)
+ return D3D_AllocContiguousMemory(Size, Alignment);
+#elif defined(_XBOX360)
+ return XMemAlloc( Size, MAKE_XALLOC_ATTRIBUTES( 0, 0, 0, 0, eXALLOCAllocatorId_AtgResource,
+ Alignment, Protection, 0,
+ XALLOC_MEMTYPE_PHYSICAL ) );
+#endif
+}
+
+static __forceinline void FreeContiguousMemory( void* pData )
+{
+#if defined(_XBOX1)
+ return D3D_FreeContiguousMemory(pData);
+#elif defined(_XBOX360)
+ return XMemFree( pData, MAKE_XALLOC_ATTRIBUTES( 0, 0, 0, 0, eXALLOCAllocatorId_AtgResource,
+ 0, 0, 0, XALLOC_MEMTYPE_PHYSICAL ) );
+#endif
+}
+
+#ifdef _XBOX1
+char g_strMediaPath[512] = "D:\\Media\\";
+static HRESULT FindMediaFile( char *strPath, const char *strFilename )
+{
+ // Check for valid arguments
+ if( strFilename == NULL || strPath == NULL )
+ {
+ RARCH_ERR("Util_FindMediaFile(): Invalid arguments\n" );
+ return E_INVALIDARG;
+ }
+
+ // Default path is the filename itself as a fully qualified path
+ strcpy( strPath, strFilename );
+
+ // Check for the ':' character to see if the filename is a fully
+ // qualified path. If not, pre-pend the media directory
+ if( strFilename[1] != ':' )
+ sprintf( strPath, "%s%s", g_strMediaPath, strFilename );
+
+ // Try to open the file
+ HANDLE hFile = CreateFile( strPath, GENERIC_READ, FILE_SHARE_READ, NULL,
+ OPEN_EXISTING, 0, NULL );
+
+ if( hFile == INVALID_HANDLE_VALUE )
+ {
+ // Return error
+ CHAR strBuffer[80];
+ sprintf( strBuffer, "FindMediaFile(): Could not find file [%s]\n",
+ strFilename );
+ RARCH_ERR( strBuffer );
+ return 0x82000004;
+ }
+
+ // Found the file. Close the file and return
+ CloseHandle( hFile );
+
+ return S_OK;
+}
+
+#endif
+
+#if defined(_XBOX1)
+HRESULT PackedResource::Create( const char *strFilename,
+DWORD dwNumResourceTags, XBRESOURCE* pResourceTags)
+#elif defined(_XBOX360)
+HRESULT PackedResource::Create( const char *strFilename )
+#endif
+{
+#ifdef _XBOX1
+ BOOL bHasResourceOffsetsTable = FALSE;
+
+ // Find the media file
+ CHAR strResourcePath[512];
+ if( FAILED( FindMediaFile( strResourcePath, strFilename ) ) )
+ return E_FAIL;
+ else
+ strFilename = strResourcePath;
+#endif
+
+ // Open the file
+ HANDLE hFile;
+ DWORD dwNumBytesRead;
+ hFile = CreateFile( strFilename, GENERIC_READ, FILE_SHARE_READ, NULL,
+ OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL );
+ if( hFile == INVALID_HANDLE_VALUE )
+ {
+ RARCH_ERR( "PackedResource::Create(): File <%s> not found.\n", strFilename );
+ return E_FAIL;
+ }
+
+ // Read in and verify the XPR magic header
+ XPR_HEADER xprh;
+ bool retval = ReadFile( hFile, &xprh, sizeof( XPR_HEADER ), &dwNumBytesRead, NULL );
+
+#if defined(_XBOX1)
+ if( xprh.dwMagic == XPR0_MAGIC_VALUE )
+ {
+ bHasResourceOffsetsTable = FALSE;
+ }
+ else if( xprh.dwMagic == XPR1_MAGIC_VALUE )
+ {
+ bHasResourceOffsetsTable = TRUE;
+ }
+ else
+#elif defined(_XBOX360)
+ if(!retval)
+ {
+ RARCH_ERR("Error reading XPR header in file %s.\n", strFilename );
+ CloseHandle( hFile );
+ return E_FAIL;
+ }
+
+ if( xprh.dwMagic != XPR2_MAGIC_VALUE )
+#endif
+ {
+ RARCH_ERR( "Invalid Xbox Packed Resource (.xpr) file: Magic = 0x%08lx\n", xprh.dwMagic );
+ CloseHandle( hFile );
+ return E_FAIL;
+ }
+
+ // Compute memory requirements
+#if defined(_XBOX1)
+ m_dwSysMemDataSize = xprh.dwHeaderSize - sizeof(XPR_HEADER);
+ m_dwVidMemDataSize = xprh.dwTotalSize - xprh.dwHeaderSize;
+#elif defined(_XBOX360)
+ m_dwSysMemDataSize = xprh.dwHeaderSize;
+ m_dwVidMemDataSize = xprh.dwDataSize;
+#endif
+
+ // Allocate memory
+ m_pSysMemData = (BYTE*)malloc(m_dwSysMemDataSize);
+ if( m_pSysMemData == NULL )
+ {
+ RARCH_ERR( "Could not allocate system memory.\n" );
+ m_dwSysMemDataSize = 0;
+ return E_FAIL;
+ }
+
+ m_pVidMemData = ( BYTE* )AllocateContiguousMemory( m_dwVidMemDataSize,
+#if defined(_XBOX1)
+D3DTEXTURE_ALIGNMENT
+#elif defined(_XBOX360)
+XALLOC_PHYSICAL_ALIGNMENT_4K
+#endif
+ );
+
+ if( m_pVidMemData == NULL )
+ {
+ RARCH_ERR( "Could not allocate physical memory.\n" );
+ m_dwSysMemDataSize = 0;
+ m_dwVidMemDataSize = 0;
+ free(m_pSysMemData);
+ m_pSysMemData = NULL;
+ return E_FAIL;
+ }
+
+ // Read in the data from the file
+ if( !ReadFile( hFile, m_pSysMemData, m_dwSysMemDataSize, &dwNumBytesRead, NULL ) ||
+ !ReadFile( hFile, m_pVidMemData, m_dwVidMemDataSize, &dwNumBytesRead, NULL ) )
+ {
+ RARCH_ERR( "Unable to read Xbox Packed Resource (.xpr) file\n" );
+ CloseHandle( hFile );
+ return E_FAIL;
+ }
+
+ // Done with the file
+ CloseHandle( hFile );
+
+#ifdef _XBOX1
+ if (bHasResourceOffsetsTable)
+ {
+#endif
+
+ // Extract resource table from the header data
+ m_dwNumResourceTags = *( DWORD* )( m_pSysMemData + 0 );
+ m_pResourceTags = ( XBRESOURCE* )( m_pSysMemData + 4 );
+
+ // Patch up the resources
+ for( DWORD i = 0; i < m_dwNumResourceTags; i++ )
+ {
+ m_pResourceTags[i].strName = ( CHAR* )( m_pSysMemData + ( DWORD )m_pResourceTags[i].strName );
+#ifdef _XBOX360
+ // Fixup the texture memory
+ if( ( m_pResourceTags[i].dwType & 0xffff0000 ) == ( RESOURCETYPE_TEXTURE & 0xffff0000 ) )
+ {
+ D3DTexture* pTexture = ( D3DTexture* )&m_pSysMemData[m_pResourceTags[i].dwOffset];
+
+ // Adjust Base address according to where memory was allocated
+ XGOffsetBaseTextureAddress( pTexture, m_pVidMemData, m_pVidMemData );
+ }
+#endif
+ }
+
+#ifdef _XBOX1
+ }
+#endif
+
+#ifdef _XBOX1
+ // Use user-supplied number of resources and the resource tags
+ if( dwNumResourceTags != 0 || pResourceTags != NULL )
+ {
+ m_pResourceTags = pResourceTags;
+ m_dwNumResourceTags = dwNumResourceTags;
+ }
+#endif
+
+ m_bInitialized = TRUE;
+
+ return S_OK;
+}
+
+#ifdef _XBOX360
+void PackedResource::GetResourceTags( DWORD* pdwNumResourceTags,
+ XBRESOURCE** ppResourceTags )
+{
+ if( pdwNumResourceTags )
+ ( *pdwNumResourceTags ) = m_dwNumResourceTags;
+
+ if( ppResourceTags )
+ ( *ppResourceTags ) = m_pResourceTags;
+}
+#endif
+
+void PackedResource::Destroy()
+{
+ free(m_pSysMemData);
+ m_pSysMemData = NULL;
+ m_dwSysMemDataSize = 0L;
+
+ if( m_pVidMemData != NULL )
+ FreeContiguousMemory( m_pVidMemData );
+ m_pVidMemData = NULL;
+ m_dwVidMemDataSize = 0L;
+
+ m_pResourceTags = NULL;
+ m_dwNumResourceTags = 0L;
+
+ m_bInitialized = FALSE;
+}
+
+BOOL PackedResource::Initialized() const
+{
+ return m_bInitialized;
+}
diff --git a/360/xdk_resources.h b/360/xdk_resources.h
new file mode 100644
index 0000000000..701c4f2bbb
--- /dev/null
+++ b/360/xdk_resources.h
@@ -0,0 +1,152 @@
+#ifndef RARCH_XDK_RESOURCE_H
+#define RARCH_XDK_RESOURCE_H
+
+#if defined(_XBOX1)
+#define LPDIRECT3DRESOURCE LPDIRECT3DRESOURCE8
+#define LPDIRECT3DTEXTURE LPDIRECT3DTEXTURE8
+#define LPDIRECT3DCUBETEXTURE LPDIRECT3DCUBETEXTURE8
+#define LPDIRECT3DVOLUMETEXTURE LPDIRECT3DVOLUMETEXTURE8
+#define LPDIRECT3DVERTEXBUFFER LPDIRECT3DVERTEXBUFFER8
+#define LPDIRECT3DRESOURCE LPDIRECT3DRESOURCE8
+#elif defined(_XBOX360)
+#define LPDIRECT3DRESOURCE LPDIRECT3DRESOURCE9
+#define LPDIRECT3DTEXTURE LPDIRECT3DTEXTURE9
+#define LPDIRECT3DCUBETEXTURE LPDIRECT3DCUBETEXTURE9
+#define LPDIRECT3DVOLUMETEXTURE LPDIRECT3DVOLUMETEXTURE9
+#define LPDIRECT3DVERTEXBUFFER LPDIRECT3DVERTEXBUFFER9
+#define LPDIRECT3DRESOURCE LPDIRECT3DRESOURCE9
+#endif
+
+DWORD XBResource_SizeOf( LPDIRECT3DRESOURCE pResource );
+
+//structure member offsets matter
+struct XBRESOURCE
+{
+#if defined(_XBOX1)
+ CHAR* strName;
+ DWORD dwOffset;
+#elif defined(_XBOX360)
+ DWORD dwType;
+ DWORD dwOffset;
+ DWORD dwSize;
+ CHAR* strName;
+#endif
+};
+
+// Resource types
+enum
+{
+ RESOURCETYPE_USERDATA = ( ( 'U' << 24 ) | ( 'S' << 16 ) | ( 'E' << 8 ) | ( 'R' ) ),
+ RESOURCETYPE_TEXTURE = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( '2' << 8 ) | ( 'D' ) ),
+ RESOURCETYPE_CUBEMAP = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( 'C' << 8 ) | ( 'M' ) ),
+ RESOURCETYPE_VOLUMETEXTURE = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( '3' << 8 ) | ( 'D' ) ),
+ RESOURCETYPE_VERTEXBUFFER = ( ( 'V' << 24 ) | ( 'B' << 16 ) | ( 'U' << 8 ) | ( 'F' ) ),
+ RESOURCETYPE_INDEXBUFFER = ( ( 'I' << 24 ) | ( 'B' << 16 ) | ( 'U' << 8 ) | ( 'F' ) ),
+ RESOURCETYPE_EOF = 0xffffffff
+};
+
+class PackedResource
+{
+protected:
+ BYTE* m_pSysMemData; // Alloc'ed memory for resource headers etc.
+ DWORD m_dwSysMemDataSize;
+
+ BYTE* m_pVidMemData; // Alloc'ed memory for resource data, etc.
+ DWORD m_dwVidMemDataSize;
+
+ XBRESOURCE* m_pResourceTags; // Tags to associate names with the resources
+ DWORD m_dwNumResourceTags; // Number of resource tags
+ BOOL m_bInitialized; // Resource is fully initialized
+
+public:
+ // Loads the resources out of the specified bundle
+#if defined(_XBOX1)
+ HRESULT Create( const char *strFilename, DWORD dwNumResourceTags = 0L,
+ XBRESOURCE* pResourceTags = NULL );
+#elif defined(_XBOX360)
+ HRESULT Create( const char * strFilename );
+#endif
+
+ void Destroy();
+
+ BOOL Initialized() const;
+
+#ifdef _XBOX360
+ // Retrieves the resource tags
+ void GetResourceTags( DWORD* pdwNumResourceTags, XBRESOURCE** ppResourceTags );
+#endif
+
+ // Helper function to make sure a resource is registered
+ LPDIRECT3DRESOURCE RegisterResource( LPDIRECT3DRESOURCE pResource ) const
+ {
+#ifdef _XBOX1
+ // Register the resource, if it has not yet been registered. We mark
+ // a resource as registered by upping it's reference count.
+ if( pResource && ( pResource->Common & D3DCOMMON_REFCOUNT_MASK ) == 1 )
+ {
+ // Special case CPU-copy push buffers (which live in system memory)
+ if( ( pResource->Common & D3DCOMMON_TYPE_PUSHBUFFER ) &&
+ ( pResource->Common & D3DPUSHBUFFER_RUN_USING_CPU_COPY ) )
+ pResource->Data += (DWORD)m_pSysMemData;
+ else
+ pResource->Register( m_pVidMemData );
+
+ pResource->AddRef();
+ }
+#endif
+ return pResource;
+ }
+
+ // Functions to retrieve resources by their offset
+ void *GetData( DWORD dwOffset ) const
+ { return &m_pSysMemData[dwOffset]; }
+
+ LPDIRECT3DRESOURCE GetResource( DWORD dwOffset ) const
+ { return RegisterResource( (LPDIRECT3DRESOURCE)GetData(dwOffset) ); }
+
+ LPDIRECT3DTEXTURE GetTexture( DWORD dwOffset ) const
+ { return (LPDIRECT3DTEXTURE)GetResource( dwOffset ); }
+
+ LPDIRECT3DCUBETEXTURE GetCubemap( DWORD dwOffset ) const
+ { return (LPDIRECT3DCUBETEXTURE)GetResource( dwOffset ); }
+
+ LPDIRECT3DVOLUMETEXTURE GetVolumeTexture( DWORD dwOffset ) const
+ { return (LPDIRECT3DVOLUMETEXTURE)GetResource( dwOffset ); }
+
+ LPDIRECT3DVERTEXBUFFER GetVertexBuffer( DWORD dwOffset ) const
+ { return (LPDIRECT3DVERTEXBUFFER)GetResource( dwOffset ); }
+
+#ifdef _XBOX1
+ LPDIRECT3DPUSHBUFFER8 GetPushBuffer( DWORD dwOffset ) const
+ { return (LPDIRECT3DPUSHBUFFER8)GetResource( dwOffset ); }
+#endif
+
+ // Functions to retrieve resources by their name
+ void *GetData( const CHAR* strName ) const;
+
+ LPDIRECT3DRESOURCE GetResource( const CHAR* strName ) const
+ { return RegisterResource( (LPDIRECT3DRESOURCE)GetData( strName ) ); }
+
+ LPDIRECT3DTEXTURE GetTexture( const CHAR* strName ) const
+ { return (LPDIRECT3DTEXTURE)GetResource( strName ); }
+
+ LPDIRECT3DCUBETEXTURE GetCubemap( const CHAR* strName ) const
+ { return (LPDIRECT3DCUBETEXTURE)GetResource( strName ); }
+
+ LPDIRECT3DVOLUMETEXTURE GetVolumeTexture( const CHAR* strName ) const
+ { return (LPDIRECT3DVOLUMETEXTURE)GetResource( strName ); }
+
+ LPDIRECT3DVERTEXBUFFER GetVertexBuffer( const CHAR* strName ) const
+ { return (LPDIRECT3DVERTEXBUFFER)GetResource( strName ); }
+
+#ifdef _XBOX1
+ LPDIRECT3DPUSHBUFFER8 GetPushBuffer( const CHAR* strName ) const
+ { return (LPDIRECT3DPUSHBUFFER8)GetResource( strName ); }
+#endif
+
+ // Constructor/destructor
+ PackedResource();
+ ~PackedResource();
+};
+
+#endif RARCH_XDK_RESOURCE_H
diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c
index 1793abd072..b5c6cc465e 100644
--- a/console/griffin/griffin.c
+++ b/console/griffin/griffin.c
@@ -92,8 +92,6 @@ VIDEO DRIVER
#include "../../gfx/gl.c"
#elif defined(HAVE_OPENGLES20)
#include "../../gfx/gles.c"
-#elif defined(_XBOX360)
-#include "../../360/xdk360_video_resources.cpp"
#elif defined(GEKKO)
#include "../../wii/video.c"
#endif
@@ -101,6 +99,7 @@ VIDEO DRIVER
#include "../../gfx/gfx_common.c"
#ifdef _XBOX
+#include "../../360/xdk_resources.cpp"
#if defined(HAVE_D3D9)
#include "../../360/xdk_d3d9.cpp"
#elif defined(HAVE_D3D8)
diff --git a/gfx/fonts/xdk360_fonts.cpp b/gfx/fonts/xdk360_fonts.cpp
index 0d447a1a68..4f2b94d546 100644
--- a/gfx/fonts/xdk360_fonts.cpp
+++ b/gfx/fonts/xdk360_fonts.cpp
@@ -366,7 +366,7 @@ void d3d9_deinit_font(void)
s_FontLocals.m_pFontVertexShader = NULL;
if( ( s_FontLocals.m_pFontVertexDecl != NULL ) && ( s_FontLocals.m_pFontVertexDecl->Release() == 0 ) )
s_FontLocals.m_pFontVertexDecl = NULL;
- if( m_xprResource.m_bInitialized)
+ if( m_xprResource.Initialized())
m_xprResource.Destroy();
}
diff --git a/gfx/fonts/xdk360_fonts.h b/gfx/fonts/xdk360_fonts.h
index 3c974f02df..1fef7ce713 100644
--- a/gfx/fonts/xdk360_fonts.h
+++ b/gfx/fonts/xdk360_fonts.h
@@ -17,7 +17,7 @@
#ifndef RARCH_360_FONTS_H
#define RARCH_360_FONTS_H
-#include "xdk360_video_resources.h"
+#include "../../360/xdk_resources.h"
#define PAGE_UP (255)
#define PAGE_DOWN (-255)
diff --git a/gfx/gfx_common.c b/gfx/gfx_common.c
index f63fec4d65..66b5ed8baf 100644
--- a/gfx/gfx_common.c
+++ b/gfx/gfx_common.c
@@ -26,7 +26,11 @@
static int gettimeofday(struct timeval *val, void *dummy)
{
(void)dummy;
+#ifdef _XBOX360
+ DWORD msec = GetTickCount();
+#else
DWORD msec = timeGetTime();
+#endif
uint64_t usec = msec * 1000;
val->tv_sec = usec / 1000000;
val->tv_usec = usec % 1000000;