|
|
@@ -1,285 +1,285 @@
|
|
|
-/*
|
|
|
- * Copyright 2011-2012 Branimir Karadzic. All rights reserved.
|
|
|
- * License: http://www.opensource.org/licenses/BSD-2-Clause
|
|
|
- */
|
|
|
-
|
|
|
-#ifndef __RENDERER_D3D9_H__
|
|
|
-#define __RENDERER_D3D9_H__
|
|
|
-
|
|
|
-#define BGFX_CONFIG_RENDERER_DIRECT3D9EX (BX_PLATFORM_WINDOWS && 0)
|
|
|
-
|
|
|
-#ifndef D3DSTREAMSOURCE_INDEXEDDATA
|
|
|
-# define D3DSTREAMSOURCE_INDEXEDDATA (1<<30)
|
|
|
-#endif// D3DSTREAMSOURCE_INDEXEDDATA
|
|
|
-
|
|
|
-#ifndef D3DSTREAMSOURCE_INSTANCEDATA
|
|
|
-# define D3DSTREAMSOURCE_INSTANCEDATA (2<<30)
|
|
|
-#endif // D3DSTREAMSOURCE_INSTANCEDATA
|
|
|
-
|
|
|
-#if BX_PLATFORM_WINDOWS
|
|
|
-# if !BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
|
|
-# define D3D_DISABLE_9EX
|
|
|
-# endif // !BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
|
|
-# include <d3d9.h>
|
|
|
-
|
|
|
-# if BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
|
|
-typedef HRESULT (WINAPI *Direct3DCreate9ExFn)(UINT SDKVersion, IDirect3D9Ex**);
|
|
|
-# else
|
|
|
-typedef IDirect3D9* (WINAPI *Direct3DCreate9Fn)(UINT SDKVersion);
|
|
|
-# endif // BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
|
|
-
|
|
|
-typedef int (WINAPI *D3DPERF_BeginEventFunc)(D3DCOLOR col, LPCWSTR wszName);
|
|
|
-typedef int (WINAPI *D3DPERF_EndEventFunc)();
|
|
|
-typedef void (WINAPI *D3DPERF_SetMarkerFunc)(D3DCOLOR col, LPCWSTR wszName);
|
|
|
-typedef void (WINAPI *D3DPERF_SetRegionFunc)(D3DCOLOR col, LPCWSTR wszName);
|
|
|
-typedef BOOL (WINAPI *D3DPERF_QueryRepeatFrameFunc)();
|
|
|
-typedef void (WINAPI *D3DPERF_SetOptionsFunc)(DWORD dwOptions);
|
|
|
-typedef DWORD (WINAPI *D3DPERF_GetStatusFunc)();
|
|
|
-
|
|
|
-# define _PIX_SETMARKER(_col, _name) s_renderCtx.m_D3DPERF_SetMarker(_col, L#_name)
|
|
|
-# define _PIX_BEGINEVENT(_col, _name) s_renderCtx.m_D3DPERF_BeginEvent(_col, L#_name)
|
|
|
-# define _PIX_ENDEVENT() s_renderCtx.m_D3DPERF_EndEvent()
|
|
|
-
|
|
|
-#elif BX_PLATFORM_XBOX360
|
|
|
-# include <xgraphics.h>
|
|
|
-# define D3DUSAGE_DYNAMIC 0 // not supported on X360
|
|
|
-# define D3DLOCK_DISCARD 0 // not supported on X360
|
|
|
-# define D3DERR_DEVICEHUNG D3DERR_DEVICELOST // not supported on X360
|
|
|
-# define D3DERR_DEVICEREMOVED D3DERR_DEVICELOST // not supported on X360
|
|
|
-# define D3DMULTISAMPLE_8_SAMPLES D3DMULTISAMPLE_4_SAMPLES
|
|
|
-# define D3DMULTISAMPLE_16_SAMPLES D3DMULTISAMPLE_4_SAMPLES
|
|
|
-
|
|
|
-# define D3DFMT_DF24 D3DFMT_D24FS8
|
|
|
-
|
|
|
-# define _PIX_SETMARKER(_col, _name) do {} while(0)
|
|
|
-# define _PIX_BEGINEVENT(_col, _name) do {} while(0)
|
|
|
-# define _PIX_ENDEVENT() do {} while(0)
|
|
|
-#endif // BX_PLATFORM_
|
|
|
-
|
|
|
-#include "renderer_d3d.h"
|
|
|
-
|
|
|
-namespace bgfx
|
|
|
-{
|
|
|
-#if BGFX_CONFIG_DEBUG_PIX
|
|
|
-# define PIX_SETMARKER(_col, _name) _PIX_SETMARKER(_col, _name)
|
|
|
-# define PIX_BEGINEVENT(_col, _name) _PIX_BEGINEVENT(_col, _name)
|
|
|
-# define PIX_ENDEVENT() _PIX_ENDEVENT()
|
|
|
-#else
|
|
|
-# define PIX_SETMARKER(_col, _name)
|
|
|
-# define PIX_BEGINEVENT(_col, _name)
|
|
|
-# define PIX_ENDEVENT()
|
|
|
-#endif // BGFX_CONFIG_DEBUG_PIX
|
|
|
-
|
|
|
-# ifndef D3DFMT_ATI1
|
|
|
-# define D3DFMT_ATI1 ( (D3DFORMAT)BX_MAKEFOURCC('A','T','I','1') )
|
|
|
-# endif // D3DFMT_ATI1
|
|
|
-
|
|
|
-# ifndef D3DFMT_ATI2
|
|
|
-# define D3DFMT_ATI2 ( (D3DFORMAT)BX_MAKEFOURCC('A','T','I','2') )
|
|
|
-# endif // D3DFMT_ATI2
|
|
|
-
|
|
|
-# ifndef D3DFMT_ATOC
|
|
|
-# define D3DFMT_ATOC ( (D3DFORMAT)BX_MAKEFOURCC('A','T','O','C') )
|
|
|
-# endif // D3DFMT_ATOC
|
|
|
-
|
|
|
-# ifndef D3DFMT_DF16
|
|
|
-# define D3DFMT_DF16 ( (D3DFORMAT)BX_MAKEFOURCC('D','F','1','6') )
|
|
|
-# endif // D3DFMT_DF16
|
|
|
-
|
|
|
-# ifndef D3DFMT_DF24
|
|
|
-# define D3DFMT_DF24 ( (D3DFORMAT)BX_MAKEFOURCC('D','F','2','4') )
|
|
|
-# endif // D3DFMT_DF24
|
|
|
-
|
|
|
-# ifndef D3DFMT_INST
|
|
|
-# define D3DFMT_INST ( (D3DFORMAT)BX_MAKEFOURCC('I','N','S','T') )
|
|
|
-# endif // D3DFMT_INST
|
|
|
-
|
|
|
-# ifndef D3DFMT_INTZ
|
|
|
-# define D3DFMT_INTZ ( (D3DFORMAT)BX_MAKEFOURCC('I','N','T','Z') )
|
|
|
-# endif // D3DFMT_INTZ
|
|
|
-
|
|
|
-# ifndef D3DFMT_NULL
|
|
|
-# define D3DFMT_NULL ( (D3DFORMAT)BX_MAKEFOURCC('N','U','L','L') )
|
|
|
-# endif // D3DFMT_NULL
|
|
|
-
|
|
|
-# ifndef D3DFMT_RESZ
|
|
|
-# define D3DFMT_RESZ ( (D3DFORMAT)BX_MAKEFOURCC('R','E','S','Z') )
|
|
|
-# endif // D3DFMT_RESZ
|
|
|
-
|
|
|
-# ifndef D3DFMT_RAWZ
|
|
|
-# define D3DFMT_RAWZ ( (D3DFORMAT)BX_MAKEFOURCC('R','A','W','Z') )
|
|
|
-# endif // D3DFMT_RAWZ
|
|
|
-
|
|
|
- struct ExtendedFormat
|
|
|
- {
|
|
|
- enum Enum
|
|
|
- {
|
|
|
- Ati1,
|
|
|
- Ati2,
|
|
|
- Df16,
|
|
|
- Df24,
|
|
|
- Inst,
|
|
|
- Intz,
|
|
|
- Null,
|
|
|
- Resz,
|
|
|
- Rawz,
|
|
|
-
|
|
|
- Count,
|
|
|
- };
|
|
|
-
|
|
|
- D3DFORMAT m_fmt;
|
|
|
- DWORD m_usage;
|
|
|
- D3DRESOURCETYPE m_type;
|
|
|
- bool m_supported;
|
|
|
- };
|
|
|
-
|
|
|
- struct Msaa
|
|
|
- {
|
|
|
- D3DMULTISAMPLE_TYPE m_type;
|
|
|
- DWORD m_quality;
|
|
|
- };
|
|
|
-
|
|
|
- struct IndexBuffer
|
|
|
- {
|
|
|
- IndexBuffer()
|
|
|
- : m_ptr(NULL)
|
|
|
- , m_dynamic(false)
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- void create(uint32_t _size, void* _data);
|
|
|
- void update(uint32_t _offset, uint32_t _size, void* _data)
|
|
|
- {
|
|
|
- void* buffer;
|
|
|
- DX_CHECK(m_ptr->Lock(_offset
|
|
|
- , _size
|
|
|
- , &buffer
|
|
|
- , m_dynamic && 0 == _offset && m_size == _size ? D3DLOCK_DISCARD : 0
|
|
|
- ) );
|
|
|
-
|
|
|
- memcpy(buffer, _data, _size);
|
|
|
-
|
|
|
- m_ptr->Unlock();
|
|
|
- }
|
|
|
-
|
|
|
- void destroy()
|
|
|
- {
|
|
|
- if (NULL != m_ptr)
|
|
|
- {
|
|
|
- DX_RELEASE(m_ptr, 0);
|
|
|
- m_dynamic = false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- void preReset();
|
|
|
- void postReset();
|
|
|
-
|
|
|
- IDirect3DIndexBuffer9* m_ptr;
|
|
|
- uint32_t m_size;
|
|
|
- bool m_dynamic;
|
|
|
- };
|
|
|
-
|
|
|
- struct VertexBuffer
|
|
|
- {
|
|
|
- VertexBuffer()
|
|
|
- : m_ptr(NULL)
|
|
|
- , m_dynamic(false)
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- void create(uint32_t _size, void* _data, VertexDeclHandle _declHandle);
|
|
|
- void update(uint32_t _offset, uint32_t _size, void* _data)
|
|
|
- {
|
|
|
- void* buffer;
|
|
|
- DX_CHECK(m_ptr->Lock(_offset
|
|
|
- , _size
|
|
|
- , &buffer
|
|
|
- , m_dynamic && 0 == _offset && m_size == _size ? D3DLOCK_DISCARD : 0
|
|
|
- ) );
|
|
|
-
|
|
|
- memcpy(buffer, _data, _size);
|
|
|
-
|
|
|
- m_ptr->Unlock();
|
|
|
- }
|
|
|
-
|
|
|
- void destroy()
|
|
|
- {
|
|
|
- if (NULL != m_ptr)
|
|
|
- {
|
|
|
- DX_RELEASE(m_ptr, 0);
|
|
|
- m_dynamic = false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- void preReset();
|
|
|
- void postReset();
|
|
|
-
|
|
|
- IDirect3DVertexBuffer9* m_ptr;
|
|
|
- uint32_t m_size;
|
|
|
- VertexDeclHandle m_decl;
|
|
|
- bool m_dynamic;
|
|
|
- };
|
|
|
-
|
|
|
- struct VertexDeclaration
|
|
|
- {
|
|
|
- void create(const VertexDecl& _decl);
|
|
|
-
|
|
|
- void destroy()
|
|
|
- {
|
|
|
- DX_RELEASE(m_ptr, 0);
|
|
|
- }
|
|
|
-
|
|
|
- IDirect3DVertexDeclaration9* m_ptr;
|
|
|
- VertexDecl m_decl;
|
|
|
- };
|
|
|
-
|
|
|
- struct Shader
|
|
|
- {
|
|
|
- Shader()
|
|
|
- : m_ptr(NULL)
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- void create(bool _fragment, const Memory* _mem);
|
|
|
- DWORD* getShaderCode(uint8_t _fragmentBit, const Memory* _mem);
|
|
|
-
|
|
|
- void destroy()
|
|
|
- {
|
|
|
- ConstantBuffer::destroy(m_constantBuffer);
|
|
|
- m_constantBuffer = NULL;
|
|
|
- m_numPredefined = 0;
|
|
|
-
|
|
|
- DX_RELEASE(m_ptr, 0);
|
|
|
- }
|
|
|
-
|
|
|
- IUnknown* m_ptr;
|
|
|
- ConstantBuffer* m_constantBuffer;
|
|
|
- PredefinedUniform m_predefined[PredefinedUniform::Count];
|
|
|
- uint8_t m_numPredefined;
|
|
|
- };
|
|
|
-
|
|
|
- struct Program
|
|
|
- {
|
|
|
- void create(const Shader& _vsh, const Shader& _fsh)
|
|
|
- {
|
|
|
- BX_CHECK(NULL != _vsh.m_ptr, "Vertex shader doesn't exist.");
|
|
|
- m_vsh = &_vsh;
|
|
|
-
|
|
|
- BX_CHECK(NULL != _fsh.m_ptr, "Fragment shader doesn't exist.");
|
|
|
- m_fsh = &_fsh;
|
|
|
-
|
|
|
- memcpy(&m_predefined[0], _vsh.m_predefined, _vsh.m_numPredefined*sizeof(PredefinedUniform) );
|
|
|
- memcpy(&m_predefined[_vsh.m_numPredefined], _fsh.m_predefined, _fsh.m_numPredefined*sizeof(PredefinedUniform) );
|
|
|
- m_numPredefined = _vsh.m_numPredefined + _fsh.m_numPredefined;
|
|
|
- }
|
|
|
-
|
|
|
- void destroy()
|
|
|
- {
|
|
|
- m_numPredefined = 0;
|
|
|
- m_vsh = NULL;
|
|
|
- m_fsh = NULL;
|
|
|
- }
|
|
|
-
|
|
|
+/*
|
|
|
+ * Copyright 2011-2012 Branimir Karadzic. All rights reserved.
|
|
|
+ * License: http://www.opensource.org/licenses/BSD-2-Clause
|
|
|
+ */
|
|
|
+
|
|
|
+#ifndef __RENDERER_D3D9_H__
|
|
|
+#define __RENDERER_D3D9_H__
|
|
|
+
|
|
|
+#define BGFX_CONFIG_RENDERER_DIRECT3D9EX (BX_PLATFORM_WINDOWS && 0)
|
|
|
+
|
|
|
+#ifndef D3DSTREAMSOURCE_INDEXEDDATA
|
|
|
+# define D3DSTREAMSOURCE_INDEXEDDATA (1<<30)
|
|
|
+#endif// D3DSTREAMSOURCE_INDEXEDDATA
|
|
|
+
|
|
|
+#ifndef D3DSTREAMSOURCE_INSTANCEDATA
|
|
|
+# define D3DSTREAMSOURCE_INSTANCEDATA (2<<30)
|
|
|
+#endif // D3DSTREAMSOURCE_INSTANCEDATA
|
|
|
+
|
|
|
+#if BX_PLATFORM_WINDOWS
|
|
|
+# if !BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
|
|
+# define D3D_DISABLE_9EX
|
|
|
+# endif // !BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
|
|
+# include <d3d9.h>
|
|
|
+
|
|
|
+# if BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
|
|
+typedef HRESULT (WINAPI *Direct3DCreate9ExFn)(UINT SDKVersion, IDirect3D9Ex**);
|
|
|
+# else
|
|
|
+typedef IDirect3D9* (WINAPI *Direct3DCreate9Fn)(UINT SDKVersion);
|
|
|
+# endif // BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
|
|
+
|
|
|
+typedef int (WINAPI *D3DPERF_BeginEventFunc)(D3DCOLOR col, LPCWSTR wszName);
|
|
|
+typedef int (WINAPI *D3DPERF_EndEventFunc)();
|
|
|
+typedef void (WINAPI *D3DPERF_SetMarkerFunc)(D3DCOLOR col, LPCWSTR wszName);
|
|
|
+typedef void (WINAPI *D3DPERF_SetRegionFunc)(D3DCOLOR col, LPCWSTR wszName);
|
|
|
+typedef BOOL (WINAPI *D3DPERF_QueryRepeatFrameFunc)();
|
|
|
+typedef void (WINAPI *D3DPERF_SetOptionsFunc)(DWORD dwOptions);
|
|
|
+typedef DWORD (WINAPI *D3DPERF_GetStatusFunc)();
|
|
|
+
|
|
|
+# define _PIX_SETMARKER(_col, _name) s_renderCtx.m_D3DPERF_SetMarker(_col, L#_name)
|
|
|
+# define _PIX_BEGINEVENT(_col, _name) s_renderCtx.m_D3DPERF_BeginEvent(_col, L#_name)
|
|
|
+# define _PIX_ENDEVENT() s_renderCtx.m_D3DPERF_EndEvent()
|
|
|
+
|
|
|
+#elif BX_PLATFORM_XBOX360
|
|
|
+# include <xgraphics.h>
|
|
|
+# define D3DUSAGE_DYNAMIC 0 // not supported on X360
|
|
|
+# define D3DLOCK_DISCARD 0 // not supported on X360
|
|
|
+# define D3DERR_DEVICEHUNG D3DERR_DEVICELOST // not supported on X360
|
|
|
+# define D3DERR_DEVICEREMOVED D3DERR_DEVICELOST // not supported on X360
|
|
|
+# define D3DMULTISAMPLE_8_SAMPLES D3DMULTISAMPLE_4_SAMPLES
|
|
|
+# define D3DMULTISAMPLE_16_SAMPLES D3DMULTISAMPLE_4_SAMPLES
|
|
|
+
|
|
|
+# define D3DFMT_DF24 D3DFMT_D24FS8
|
|
|
+
|
|
|
+# define _PIX_SETMARKER(_col, _name) do {} while(0)
|
|
|
+# define _PIX_BEGINEVENT(_col, _name) do {} while(0)
|
|
|
+# define _PIX_ENDEVENT() do {} while(0)
|
|
|
+#endif // BX_PLATFORM_
|
|
|
+
|
|
|
+#include "renderer_d3d.h"
|
|
|
+
|
|
|
+namespace bgfx
|
|
|
+{
|
|
|
+#if BGFX_CONFIG_DEBUG_PIX
|
|
|
+# define PIX_SETMARKER(_col, _name) _PIX_SETMARKER(_col, _name)
|
|
|
+# define PIX_BEGINEVENT(_col, _name) _PIX_BEGINEVENT(_col, _name)
|
|
|
+# define PIX_ENDEVENT() _PIX_ENDEVENT()
|
|
|
+#else
|
|
|
+# define PIX_SETMARKER(_col, _name)
|
|
|
+# define PIX_BEGINEVENT(_col, _name)
|
|
|
+# define PIX_ENDEVENT()
|
|
|
+#endif // BGFX_CONFIG_DEBUG_PIX
|
|
|
+
|
|
|
+# ifndef D3DFMT_ATI1
|
|
|
+# define D3DFMT_ATI1 ( (D3DFORMAT)BX_MAKEFOURCC('A','T','I','1') )
|
|
|
+# endif // D3DFMT_ATI1
|
|
|
+
|
|
|
+# ifndef D3DFMT_ATI2
|
|
|
+# define D3DFMT_ATI2 ( (D3DFORMAT)BX_MAKEFOURCC('A','T','I','2') )
|
|
|
+# endif // D3DFMT_ATI2
|
|
|
+
|
|
|
+# ifndef D3DFMT_ATOC
|
|
|
+# define D3DFMT_ATOC ( (D3DFORMAT)BX_MAKEFOURCC('A','T','O','C') )
|
|
|
+# endif // D3DFMT_ATOC
|
|
|
+
|
|
|
+# ifndef D3DFMT_DF16
|
|
|
+# define D3DFMT_DF16 ( (D3DFORMAT)BX_MAKEFOURCC('D','F','1','6') )
|
|
|
+# endif // D3DFMT_DF16
|
|
|
+
|
|
|
+# ifndef D3DFMT_DF24
|
|
|
+# define D3DFMT_DF24 ( (D3DFORMAT)BX_MAKEFOURCC('D','F','2','4') )
|
|
|
+# endif // D3DFMT_DF24
|
|
|
+
|
|
|
+# ifndef D3DFMT_INST
|
|
|
+# define D3DFMT_INST ( (D3DFORMAT)BX_MAKEFOURCC('I','N','S','T') )
|
|
|
+# endif // D3DFMT_INST
|
|
|
+
|
|
|
+# ifndef D3DFMT_INTZ
|
|
|
+# define D3DFMT_INTZ ( (D3DFORMAT)BX_MAKEFOURCC('I','N','T','Z') )
|
|
|
+# endif // D3DFMT_INTZ
|
|
|
+
|
|
|
+# ifndef D3DFMT_NULL
|
|
|
+# define D3DFMT_NULL ( (D3DFORMAT)BX_MAKEFOURCC('N','U','L','L') )
|
|
|
+# endif // D3DFMT_NULL
|
|
|
+
|
|
|
+# ifndef D3DFMT_RESZ
|
|
|
+# define D3DFMT_RESZ ( (D3DFORMAT)BX_MAKEFOURCC('R','E','S','Z') )
|
|
|
+# endif // D3DFMT_RESZ
|
|
|
+
|
|
|
+# ifndef D3DFMT_RAWZ
|
|
|
+# define D3DFMT_RAWZ ( (D3DFORMAT)BX_MAKEFOURCC('R','A','W','Z') )
|
|
|
+# endif // D3DFMT_RAWZ
|
|
|
+
|
|
|
+ struct ExtendedFormat
|
|
|
+ {
|
|
|
+ enum Enum
|
|
|
+ {
|
|
|
+ Ati1,
|
|
|
+ Ati2,
|
|
|
+ Df16,
|
|
|
+ Df24,
|
|
|
+ Inst,
|
|
|
+ Intz,
|
|
|
+ Null,
|
|
|
+ Resz,
|
|
|
+ Rawz,
|
|
|
+
|
|
|
+ Count,
|
|
|
+ };
|
|
|
+
|
|
|
+ D3DFORMAT m_fmt;
|
|
|
+ DWORD m_usage;
|
|
|
+ D3DRESOURCETYPE m_type;
|
|
|
+ bool m_supported;
|
|
|
+ };
|
|
|
+
|
|
|
+ struct Msaa
|
|
|
+ {
|
|
|
+ D3DMULTISAMPLE_TYPE m_type;
|
|
|
+ DWORD m_quality;
|
|
|
+ };
|
|
|
+
|
|
|
+ struct IndexBuffer
|
|
|
+ {
|
|
|
+ IndexBuffer()
|
|
|
+ : m_ptr(NULL)
|
|
|
+ , m_dynamic(false)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ void create(uint32_t _size, void* _data);
|
|
|
+ void update(uint32_t _offset, uint32_t _size, void* _data)
|
|
|
+ {
|
|
|
+ void* buffer;
|
|
|
+ DX_CHECK(m_ptr->Lock(_offset
|
|
|
+ , _size
|
|
|
+ , &buffer
|
|
|
+ , m_dynamic && 0 == _offset && m_size == _size ? D3DLOCK_DISCARD : 0
|
|
|
+ ) );
|
|
|
+
|
|
|
+ memcpy(buffer, _data, _size);
|
|
|
+
|
|
|
+ m_ptr->Unlock();
|
|
|
+ }
|
|
|
+
|
|
|
+ void destroy()
|
|
|
+ {
|
|
|
+ if (NULL != m_ptr)
|
|
|
+ {
|
|
|
+ DX_RELEASE(m_ptr, 0);
|
|
|
+ m_dynamic = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void preReset();
|
|
|
+ void postReset();
|
|
|
+
|
|
|
+ IDirect3DIndexBuffer9* m_ptr;
|
|
|
+ uint32_t m_size;
|
|
|
+ bool m_dynamic;
|
|
|
+ };
|
|
|
+
|
|
|
+ struct VertexBuffer
|
|
|
+ {
|
|
|
+ VertexBuffer()
|
|
|
+ : m_ptr(NULL)
|
|
|
+ , m_dynamic(false)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ void create(uint32_t _size, void* _data, VertexDeclHandle _declHandle);
|
|
|
+ void update(uint32_t _offset, uint32_t _size, void* _data)
|
|
|
+ {
|
|
|
+ void* buffer;
|
|
|
+ DX_CHECK(m_ptr->Lock(_offset
|
|
|
+ , _size
|
|
|
+ , &buffer
|
|
|
+ , m_dynamic && 0 == _offset && m_size == _size ? D3DLOCK_DISCARD : 0
|
|
|
+ ) );
|
|
|
+
|
|
|
+ memcpy(buffer, _data, _size);
|
|
|
+
|
|
|
+ m_ptr->Unlock();
|
|
|
+ }
|
|
|
+
|
|
|
+ void destroy()
|
|
|
+ {
|
|
|
+ if (NULL != m_ptr)
|
|
|
+ {
|
|
|
+ DX_RELEASE(m_ptr, 0);
|
|
|
+ m_dynamic = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void preReset();
|
|
|
+ void postReset();
|
|
|
+
|
|
|
+ IDirect3DVertexBuffer9* m_ptr;
|
|
|
+ uint32_t m_size;
|
|
|
+ VertexDeclHandle m_decl;
|
|
|
+ bool m_dynamic;
|
|
|
+ };
|
|
|
+
|
|
|
+ struct VertexDeclaration
|
|
|
+ {
|
|
|
+ void create(const VertexDecl& _decl);
|
|
|
+
|
|
|
+ void destroy()
|
|
|
+ {
|
|
|
+ DX_RELEASE(m_ptr, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ IDirect3DVertexDeclaration9* m_ptr;
|
|
|
+ VertexDecl m_decl;
|
|
|
+ };
|
|
|
+
|
|
|
+ struct Shader
|
|
|
+ {
|
|
|
+ Shader()
|
|
|
+ : m_ptr(NULL)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ void create(bool _fragment, const Memory* _mem);
|
|
|
+ DWORD* getShaderCode(uint8_t _fragmentBit, const Memory* _mem);
|
|
|
+
|
|
|
+ void destroy()
|
|
|
+ {
|
|
|
+ ConstantBuffer::destroy(m_constantBuffer);
|
|
|
+ m_constantBuffer = NULL;
|
|
|
+ m_numPredefined = 0;
|
|
|
+
|
|
|
+ DX_RELEASE(m_ptr, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ IUnknown* m_ptr;
|
|
|
+ ConstantBuffer* m_constantBuffer;
|
|
|
+ PredefinedUniform m_predefined[PredefinedUniform::Count];
|
|
|
+ uint8_t m_numPredefined;
|
|
|
+ };
|
|
|
+
|
|
|
+ struct Program
|
|
|
+ {
|
|
|
+ void create(const Shader& _vsh, const Shader& _fsh)
|
|
|
+ {
|
|
|
+ BX_CHECK(NULL != _vsh.m_ptr, "Vertex shader doesn't exist.");
|
|
|
+ m_vsh = &_vsh;
|
|
|
+
|
|
|
+ BX_CHECK(NULL != _fsh.m_ptr, "Fragment shader doesn't exist.");
|
|
|
+ m_fsh = &_fsh;
|
|
|
+
|
|
|
+ memcpy(&m_predefined[0], _vsh.m_predefined, _vsh.m_numPredefined*sizeof(PredefinedUniform) );
|
|
|
+ memcpy(&m_predefined[_vsh.m_numPredefined], _fsh.m_predefined, _fsh.m_numPredefined*sizeof(PredefinedUniform) );
|
|
|
+ m_numPredefined = _vsh.m_numPredefined + _fsh.m_numPredefined;
|
|
|
+ }
|
|
|
+
|
|
|
+ void destroy()
|
|
|
+ {
|
|
|
+ m_numPredefined = 0;
|
|
|
+ m_vsh = NULL;
|
|
|
+ m_fsh = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
void commit()
|
|
|
{
|
|
|
if (NULL != m_vsh->m_constantBuffer)
|
|
|
@@ -293,116 +293,116 @@ namespace bgfx
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const Shader* m_vsh;
|
|
|
- const Shader* m_fsh;
|
|
|
-
|
|
|
- PredefinedUniform m_predefined[PredefinedUniform::Count*2];
|
|
|
- uint8_t m_numPredefined;
|
|
|
- };
|
|
|
-
|
|
|
- struct Texture
|
|
|
- {
|
|
|
- enum Enum
|
|
|
- {
|
|
|
- Texture2D,
|
|
|
- Texture3D,
|
|
|
- TextureCube,
|
|
|
- };
|
|
|
-
|
|
|
- Texture()
|
|
|
- : m_ptr(NULL)
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- void createTexture(uint32_t _width, uint32_t _height, uint8_t _numMips, D3DFORMAT _fmt);
|
|
|
- void createVolumeTexture(uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _numMips, D3DFORMAT _fmt);
|
|
|
- void createCubeTexture(uint32_t _edge, uint32_t _numMips, D3DFORMAT _fmt);
|
|
|
-
|
|
|
- uint8_t* lock(uint8_t _side, uint8_t _lod, uint32_t& _pitch, uint32_t& _slicePitch, const Rect* _rect = NULL);
|
|
|
- void unlock(uint8_t _side, uint8_t _lod);
|
|
|
-
|
|
|
- void create(const Memory* _mem, uint32_t _flags);
|
|
|
-
|
|
|
- void destroy()
|
|
|
- {
|
|
|
- DX_RELEASE(m_ptr, 0);
|
|
|
- }
|
|
|
-
|
|
|
- void update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, const Memory* _mem);
|
|
|
- void commit(uint8_t _stage);
|
|
|
-
|
|
|
- union
|
|
|
- {
|
|
|
- IDirect3DBaseTexture9* m_ptr;
|
|
|
- IDirect3DTexture9* m_texture2d;
|
|
|
- IDirect3DVolumeTexture9* m_texture3d;
|
|
|
- IDirect3DCubeTexture9* m_textureCube;
|
|
|
- };
|
|
|
-
|
|
|
- D3DTEXTUREFILTERTYPE m_minFilter;
|
|
|
- D3DTEXTUREFILTERTYPE m_magFilter;
|
|
|
- D3DTEXTUREFILTERTYPE m_mipFilter;
|
|
|
- D3DTEXTUREADDRESS m_tau;
|
|
|
- D3DTEXTUREADDRESS m_tav;
|
|
|
- D3DTEXTUREADDRESS m_taw;
|
|
|
- Enum m_type;
|
|
|
- bool m_srgb;
|
|
|
- };
|
|
|
-
|
|
|
- struct RenderTarget
|
|
|
- {
|
|
|
- RenderTarget()
|
|
|
- : m_rt(NULL)
|
|
|
- , m_colorTexture(NULL)
|
|
|
- , m_color(NULL)
|
|
|
- , m_depthTexture(NULL)
|
|
|
- , m_depth(NULL)
|
|
|
- , m_minFilter(D3DTEXF_LINEAR)
|
|
|
- , m_magFilter(D3DTEXF_LINEAR)
|
|
|
- , m_width(0)
|
|
|
- , m_height(0)
|
|
|
- , m_flags(0)
|
|
|
- , m_depthOnly(false)
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- void create(uint16_t _width, uint16_t _height, uint32_t _flags, uint32_t _textureFlags);
|
|
|
- void createTextures();
|
|
|
- void destroyTextures();
|
|
|
-
|
|
|
- void destroy()
|
|
|
- {
|
|
|
- destroyTextures();
|
|
|
- m_flags = 0;
|
|
|
- }
|
|
|
-
|
|
|
- void preReset()
|
|
|
- {
|
|
|
- destroyTextures();
|
|
|
- }
|
|
|
-
|
|
|
- void postReset()
|
|
|
- {
|
|
|
- createTextures();
|
|
|
- }
|
|
|
-
|
|
|
- void commit(uint8_t _stage);
|
|
|
- void resolve();
|
|
|
-
|
|
|
- Msaa m_msaa;
|
|
|
- IDirect3DSurface9* m_rt;
|
|
|
- IDirect3DTexture9* m_colorTexture;
|
|
|
- IDirect3DSurface9* m_color;
|
|
|
- IDirect3DTexture9* m_depthTexture;
|
|
|
- IDirect3DSurface9* m_depth;
|
|
|
- D3DTEXTUREFILTERTYPE m_minFilter;
|
|
|
- D3DTEXTUREFILTERTYPE m_magFilter;
|
|
|
- uint16_t m_width;
|
|
|
- uint16_t m_height;
|
|
|
- uint32_t m_flags;
|
|
|
- bool m_depthOnly;
|
|
|
- };
|
|
|
-
|
|
|
-} // namespace bgfx
|
|
|
-
|
|
|
-#endif // __RENDERER_D3D9_H__
|
|
|
+ const Shader* m_vsh;
|
|
|
+ const Shader* m_fsh;
|
|
|
+
|
|
|
+ PredefinedUniform m_predefined[PredefinedUniform::Count*2];
|
|
|
+ uint8_t m_numPredefined;
|
|
|
+ };
|
|
|
+
|
|
|
+ struct Texture
|
|
|
+ {
|
|
|
+ enum Enum
|
|
|
+ {
|
|
|
+ Texture2D,
|
|
|
+ Texture3D,
|
|
|
+ TextureCube,
|
|
|
+ };
|
|
|
+
|
|
|
+ Texture()
|
|
|
+ : m_ptr(NULL)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ void createTexture(uint32_t _width, uint32_t _height, uint8_t _numMips, D3DFORMAT _fmt);
|
|
|
+ void createVolumeTexture(uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _numMips, D3DFORMAT _fmt);
|
|
|
+ void createCubeTexture(uint32_t _edge, uint32_t _numMips, D3DFORMAT _fmt);
|
|
|
+
|
|
|
+ uint8_t* lock(uint8_t _side, uint8_t _lod, uint32_t& _pitch, uint32_t& _slicePitch, const Rect* _rect = NULL);
|
|
|
+ void unlock(uint8_t _side, uint8_t _lod);
|
|
|
+
|
|
|
+ void create(const Memory* _mem, uint32_t _flags);
|
|
|
+
|
|
|
+ void destroy()
|
|
|
+ {
|
|
|
+ DX_RELEASE(m_ptr, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ void update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, const Memory* _mem);
|
|
|
+ void commit(uint8_t _stage);
|
|
|
+
|
|
|
+ union
|
|
|
+ {
|
|
|
+ IDirect3DBaseTexture9* m_ptr;
|
|
|
+ IDirect3DTexture9* m_texture2d;
|
|
|
+ IDirect3DVolumeTexture9* m_texture3d;
|
|
|
+ IDirect3DCubeTexture9* m_textureCube;
|
|
|
+ };
|
|
|
+
|
|
|
+ D3DTEXTUREFILTERTYPE m_minFilter;
|
|
|
+ D3DTEXTUREFILTERTYPE m_magFilter;
|
|
|
+ D3DTEXTUREFILTERTYPE m_mipFilter;
|
|
|
+ D3DTEXTUREADDRESS m_tau;
|
|
|
+ D3DTEXTUREADDRESS m_tav;
|
|
|
+ D3DTEXTUREADDRESS m_taw;
|
|
|
+ Enum m_type;
|
|
|
+ bool m_srgb;
|
|
|
+ };
|
|
|
+
|
|
|
+ struct RenderTarget
|
|
|
+ {
|
|
|
+ RenderTarget()
|
|
|
+ : m_rt(NULL)
|
|
|
+ , m_colorTexture(NULL)
|
|
|
+ , m_color(NULL)
|
|
|
+ , m_depthTexture(NULL)
|
|
|
+ , m_depth(NULL)
|
|
|
+ , m_minFilter(D3DTEXF_LINEAR)
|
|
|
+ , m_magFilter(D3DTEXF_LINEAR)
|
|
|
+ , m_width(0)
|
|
|
+ , m_height(0)
|
|
|
+ , m_flags(0)
|
|
|
+ , m_depthOnly(false)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ void create(uint16_t _width, uint16_t _height, uint32_t _flags, uint32_t _textureFlags);
|
|
|
+ void createTextures();
|
|
|
+ void destroyTextures();
|
|
|
+
|
|
|
+ void destroy()
|
|
|
+ {
|
|
|
+ destroyTextures();
|
|
|
+ m_flags = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ void preReset()
|
|
|
+ {
|
|
|
+ destroyTextures();
|
|
|
+ }
|
|
|
+
|
|
|
+ void postReset()
|
|
|
+ {
|
|
|
+ createTextures();
|
|
|
+ }
|
|
|
+
|
|
|
+ void commit(uint8_t _stage);
|
|
|
+ void resolve();
|
|
|
+
|
|
|
+ Msaa m_msaa;
|
|
|
+ IDirect3DSurface9* m_rt;
|
|
|
+ IDirect3DTexture9* m_colorTexture;
|
|
|
+ IDirect3DSurface9* m_color;
|
|
|
+ IDirect3DTexture9* m_depthTexture;
|
|
|
+ IDirect3DSurface9* m_depth;
|
|
|
+ D3DTEXTUREFILTERTYPE m_minFilter;
|
|
|
+ D3DTEXTUREFILTERTYPE m_magFilter;
|
|
|
+ uint16_t m_width;
|
|
|
+ uint16_t m_height;
|
|
|
+ uint32_t m_flags;
|
|
|
+ bool m_depthOnly;
|
|
|
+ };
|
|
|
+
|
|
|
+} // namespace bgfx
|
|
|
+
|
|
|
+#endif // __RENDERER_D3D9_H__
|