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;