DX11 renderer wip.
This commit is contained in:
parent
055131b7bb
commit
09aa9a38c1
@ -165,6 +165,7 @@ namespace bgfx
|
||||
D3D9_UnableToCreateDevice,
|
||||
D3D9_UnableToCreateRenderTarget,
|
||||
D3D9_UnableToCreateTexture,
|
||||
D3D11_UnableToInitialize,
|
||||
OPENGL_UnableToCreateContext,
|
||||
};
|
||||
};
|
||||
@ -175,7 +176,8 @@ namespace bgfx
|
||||
{
|
||||
Null = 0,
|
||||
Direct3D9,
|
||||
OpenGLES,
|
||||
Direct3D11,
|
||||
OpenGLES2,
|
||||
OpenGL,
|
||||
};
|
||||
};
|
||||
@ -283,10 +285,10 @@ namespace bgfx
|
||||
};
|
||||
};
|
||||
|
||||
typedef void (*fatalFn)(Fatal::Enum _code, const char* _str);
|
||||
typedef void* (*reallocFn)(void* _ptr, size_t _size);
|
||||
typedef void (*freeFn)(void* _ptr);
|
||||
typedef void (*cacheFn)(uint64_t _id, bool _store, void* _data, uint32_t& _length);
|
||||
typedef void (*FatalFn)(Fatal::Enum _code, const char* _str);
|
||||
typedef void* (*ReallocFn)(void* _ptr, size_t _size);
|
||||
typedef void (*FreeFn)(void* _ptr);
|
||||
typedef void (*CacheFn)(uint64_t _id, bool _store, void* _data, uint32_t& _length);
|
||||
|
||||
struct VertexDecl
|
||||
{
|
||||
@ -305,7 +307,7 @@ namespace bgfx
|
||||
RendererType::Enum getRendererType();
|
||||
|
||||
///
|
||||
void init(bool _createRenderThread = true, fatalFn _fatal = NULL, reallocFn _realloc = NULL, freeFn _free = NULL, cacheFn _cache = NULL);
|
||||
void init(bool _createRenderThread = true, FatalFn _fatal = NULL, ReallocFn _realloc = NULL, FreeFn _free = NULL, CacheFn _cache = NULL);
|
||||
|
||||
///
|
||||
void shutdown();
|
||||
|
@ -25,6 +25,7 @@ project "bgfx"
|
||||
|
||||
includedirs {
|
||||
BGFX_DIR .. "include",
|
||||
"$(DXSDK_DIR)/include",
|
||||
}
|
||||
|
||||
files {
|
||||
|
@ -52,4 +52,6 @@ project "shaderc"
|
||||
|
||||
links {
|
||||
"d3dx9",
|
||||
"d3dcompiler",
|
||||
"dxguid",
|
||||
}
|
||||
|
41
src/bgfx.cpp
41
src/bgfx.cpp
@ -63,10 +63,10 @@ namespace bgfx
|
||||
_length = 0;
|
||||
}
|
||||
|
||||
fatalFn g_fatal = fatalStub;
|
||||
reallocFn g_realloc = reallocStub;
|
||||
freeFn g_free = freeStub;
|
||||
cacheFn g_cache = cacheStub;
|
||||
FatalFn g_fatal = fatalStub;
|
||||
ReallocFn g_realloc = reallocStub;
|
||||
FreeFn g_free = freeStub;
|
||||
CacheFn g_cache = cacheStub;
|
||||
|
||||
static BX_THREAD uint32_t s_threadIndex = 0;
|
||||
static Context s_ctx;
|
||||
@ -199,8 +199,8 @@ namespace bgfx
|
||||
{
|
||||
m_decl.begin();
|
||||
m_decl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float);
|
||||
m_decl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8);
|
||||
m_decl.add(bgfx::Attrib::Color1, 4, bgfx::AttribType::Uint8);
|
||||
m_decl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true);
|
||||
m_decl.add(bgfx::Attrib::Color1, 4, bgfx::AttribType::Uint8, true);
|
||||
m_decl.add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float);
|
||||
m_decl.end();
|
||||
|
||||
@ -228,8 +228,11 @@ namespace bgfx
|
||||
m_texture = s_ctx.createTexture(mem, BGFX_TEXTURE_MIN_POINT|BGFX_TEXTURE_MAG_POINT|BGFX_TEXTURE_MIP_POINT, NULL, NULL);
|
||||
|
||||
#if BGFX_CONFIG_RENDERER_DIRECT3D9
|
||||
mem = bgfx::alloc(sizeof(vs_debugfont_hlsl)+1);
|
||||
memcpy(mem->data, vs_debugfont_hlsl, mem->size-1);
|
||||
mem = bgfx::alloc(sizeof(vs_debugfont_dx9)+1);
|
||||
memcpy(mem->data, vs_debugfont_dx9, mem->size-1);
|
||||
#elif BGFX_CONFIG_RENDERER_DIRECT3D11
|
||||
mem = bgfx::alloc(sizeof(vs_debugfont_dx11)+1);
|
||||
memcpy(mem->data, vs_debugfont_dx11, mem->size-1);
|
||||
#else
|
||||
mem = bgfx::alloc(sizeof(vs_debugfont_glsl)+1);
|
||||
memcpy(mem->data, vs_debugfont_glsl, mem->size-1);
|
||||
@ -238,8 +241,11 @@ namespace bgfx
|
||||
bgfx::VertexShaderHandle vsh = bgfx::createVertexShader(mem);
|
||||
|
||||
#if BGFX_CONFIG_RENDERER_DIRECT3D9
|
||||
mem = bgfx::alloc(sizeof(fs_debugfont_hlsl)+1);
|
||||
memcpy(mem->data, fs_debugfont_hlsl, mem->size-1);
|
||||
mem = bgfx::alloc(sizeof(fs_debugfont_dx9)+1);
|
||||
memcpy(mem->data, fs_debugfont_dx9, mem->size-1);
|
||||
#elif BGFX_CONFIG_RENDERER_DIRECT3D11
|
||||
mem = bgfx::alloc(sizeof(fs_debugfont_dx11)+1);
|
||||
memcpy(mem->data, fs_debugfont_dx11, mem->size-1);
|
||||
#else
|
||||
mem = bgfx::alloc(sizeof(fs_debugfont_glsl)+1);
|
||||
memcpy(mem->data, fs_debugfont_glsl, mem->size-1);
|
||||
@ -372,6 +378,11 @@ namespace bgfx
|
||||
"u_alphaRef",
|
||||
};
|
||||
|
||||
const char* getPredefinedUniformName(PredefinedUniform::Enum _enum)
|
||||
{
|
||||
return s_predefinedName[_enum];
|
||||
}
|
||||
|
||||
PredefinedUniform::Enum nameToPredefinedUniformEnum(const char* _name)
|
||||
{
|
||||
for (uint32_t ii = 0; ii < PredefinedUniform::Count; ++ii)
|
||||
@ -460,16 +471,18 @@ namespace bgfx
|
||||
{
|
||||
#if BGFX_CONFIG_RENDERER_DIRECT3D9
|
||||
return RendererType::Direct3D9;
|
||||
#elif BGFX_CONFIG_RENDERER_DIRECT3D11
|
||||
return RendererType::Direct3D11;
|
||||
#elif BGFX_CONFIG_RENDERER_OPENGL
|
||||
return RendererType::OpenGL;
|
||||
#elif BGFX_CONFIG_RENDERER_OPENGLES2
|
||||
return RendererType::OpenGLES;
|
||||
return RendererType::OpenGLES2;
|
||||
#else
|
||||
return RendererType::Null;
|
||||
#endif // BGFX_CONFIG_RENDERER_
|
||||
}
|
||||
|
||||
void init(bool _createRenderThread, fatalFn _fatal, reallocFn _realloc, freeFn _free, cacheFn _cache)
|
||||
void init(bool _createRenderThread, FatalFn _fatal, ReallocFn _realloc, FreeFn _free, CacheFn _cache)
|
||||
{
|
||||
if (NULL != _fatal)
|
||||
{
|
||||
@ -742,9 +755,9 @@ namespace bgfx
|
||||
return mem;
|
||||
}
|
||||
|
||||
void release(Memory* _mem)
|
||||
void release(const Memory* _mem)
|
||||
{
|
||||
g_free(_mem);
|
||||
g_free(const_cast<Memory*>(_mem) );
|
||||
}
|
||||
|
||||
void setDebug(uint32_t _debug)
|
||||
|
13
src/bgfx_p.h
13
src/bgfx_p.h
@ -134,6 +134,8 @@ namespace stl = std;
|
||||
|
||||
#if BGFX_CONFIG_RENDERER_DIRECT3D9
|
||||
# define BGFX_RENDERER_NAME "Direct3D 9"
|
||||
#elif BGFX_CONFIG_RENDERER_DIRECT3D11
|
||||
# define BGFX_RENDERER_NAME "Direct3D 11"
|
||||
#elif BGFX_CONFIG_RENDERER_OPENGL
|
||||
# define BGFX_RENDERER_NAME "OpenGL"
|
||||
#elif BGFX_CONFIG_RENDERER_OPENGLES2
|
||||
@ -143,13 +145,13 @@ namespace stl = std;
|
||||
namespace bgfx
|
||||
{
|
||||
extern const uint32_t g_constantTypeSize[ConstantType::Count];
|
||||
extern fatalFn g_fatal;
|
||||
extern reallocFn g_realloc;
|
||||
extern freeFn g_free;
|
||||
extern cacheFn g_cache;
|
||||
extern FatalFn g_fatal;
|
||||
extern ReallocFn g_realloc;
|
||||
extern FreeFn g_free;
|
||||
extern CacheFn g_cache;
|
||||
|
||||
void fatal(bgfx::Fatal::Enum _code, const char* _format, ...);
|
||||
void release(Memory* _mem);
|
||||
void release(const Memory* _mem);
|
||||
void saveTga(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, bool _grayscale = false, bool _yflip = false);
|
||||
const char* getAttribName(Attrib::Enum _attr);
|
||||
bool renderFrame();
|
||||
@ -339,6 +341,7 @@ namespace bgfx
|
||||
uint16_t m_count;
|
||||
};
|
||||
|
||||
const char* getPredefinedUniformName(PredefinedUniform::Enum _enum);
|
||||
PredefinedUniform::Enum nameToPredefinedUniformEnum(const char* _name);
|
||||
|
||||
class StreamRead
|
||||
|
1474
src/charset.h
1474
src/charset.h
File diff suppressed because it is too large
Load Diff
@ -24,7 +24,7 @@
|
||||
# endif // BGFX_CONFIG_RENDERER_OPENGLES
|
||||
|
||||
# ifndef BGFX_CONFIG_RENDERER_NULL
|
||||
# define BGFX_CONFIG_RENDERER_NULL (!(BGFX_CONFIG_RENDERER_DIRECT3D9|BGFX_CONFIG_RENDERER_OPENGL|BGFX_CONFIG_RENDERER_OPENGLES2) )
|
||||
# define BGFX_CONFIG_RENDERER_NULL (!(BGFX_CONFIG_RENDERER_DIRECT3D9|BGFX_CONFIG_RENDERER_DIRECT3D11|BGFX_CONFIG_RENDERER_OPENGL|BGFX_CONFIG_RENDERER_OPENGLES2) )
|
||||
# endif // BGFX_CONFIG_RENDERER_NULL
|
||||
#endif // !defined...
|
||||
|
||||
|
58
src/fs_debugfont_dx11.bin.h
Normal file
58
src/fs_debugfont_dx11.bin.h
Normal file
@ -0,0 +1,58 @@
|
||||
static const uint8_t fs_debugfont_dx11[879] =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x68, 0x03, 0x44, 0x58, 0x42, 0x43, 0x86, 0xad, 0xb6, 0x81, 0xa7, 0x03, // ....h.DXBC......
|
||||
0x01, 0x3e, 0x2a, 0x57, 0xe1, 0x88, 0xd8, 0x74, 0xb7, 0x81, 0x01, 0x00, 0x00, 0x00, 0x68, 0x03, // .>*W...t......h.
|
||||
0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x80, 0x01, // ......4.........
|
||||
0x00, 0x00, 0xb4, 0x01, 0x00, 0x00, 0xcc, 0x02, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xb8, 0x00, // ..........RDEF..
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3c, 0x00, // ..............<.
|
||||
0x00, 0x00, 0x00, 0x05, 0xff, 0xff, 0x00, 0x91, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x52, 0x44, // ..............RD
|
||||
0x31, 0x31, 0x3c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x28, 0x00, // 11<....... ...(.
|
||||
0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, // ..$...........|.
|
||||
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7c, 0x00, // ..............|.
|
||||
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, // ................
|
||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
|
||||
0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, // texColor.Microso
|
||||
0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, // ft (R) HLSL Shad
|
||||
0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, // er Compiler 9.29
|
||||
0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x84, 0x00, // .952.3111.ISGN..
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........h.....
|
||||
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
|
||||
0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ..t.............
|
||||
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, // ..........t.....
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, // ................
|
||||
0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ..z.............
|
||||
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, // ..........SV_POS
|
||||
0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, // ITION.COLOR.TEXC
|
||||
0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, // OORD..OSGN,.....
|
||||
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...... .........
|
||||
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, // ..............SV
|
||||
0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x45, 0x58, 0x10, 0x01, // _TARGET...SHEX..
|
||||
0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x6a, 0x08, 0x00, 0x01, 0x5a, 0x00, // ..P...D...j...Z.
|
||||
0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, // ...`......X....p
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, // ......UU..b.....
|
||||
0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, // ......b.........
|
||||
0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, // ..b...2.......e.
|
||||
0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, // ... ......h.....
|
||||
0x00, 0x00, 0x45, 0x00, 0x00, 0x8b, 0xc2, 0x00, 0x00, 0x80, 0x43, 0x55, 0x15, 0x00, 0x12, 0x00, // ..E.......CU....
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x7e, // ......F.......F~
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......`........
|
||||
0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, // ..........F.....
|
||||
0x00, 0x00, 0x46, 0x1e, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F...A.......2.
|
||||
0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, // ..F.......F.....
|
||||
0x00, 0x00, 0x31, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, // ..1...........:.
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x81, 0x80, 0x80, 0x3b, 0x0d, 0x00, // .......@.....;..
|
||||
0x04, 0x03, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, // ..........6....
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......F.......>.
|
||||
0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, // ..STAT..........
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...............
|
||||
};
|
25
src/fs_debugfont_dx9.bin.h
Normal file
25
src/fs_debugfont_dx9.bin.h
Normal file
@ -0,0 +1,25 @@
|
||||
static const uint8_t fs_debugfont_dx9[345] =
|
||||
{
|
||||
0x00, 0x00, 0x54, 0x01, 0x01, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, 0x42, // ..T.......".CTAB
|
||||
0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x01, 0x02, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, // ....S...........
|
||||
0x1c, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........L...0...
|
||||
0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........<.......
|
||||
0x75, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, // u_texColor......
|
||||
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x32, // ............ps_2
|
||||
0x5f, 0x61, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, // _a.Microsoft (R)
|
||||
0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, // HLSL Shader Com
|
||||
0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, // piler 9.29.952.3
|
||||
0x31, 0x31, 0x31, 0x00, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x81, 0x80, 0x80, 0xbb, // 111.Q...........
|
||||
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, // ................
|
||||
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
|
||||
0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0xb0, // ................
|
||||
0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, // ............B...
|
||||
0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, // ................
|
||||
0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, // ................
|
||||
0x01, 0x00, 0xe4, 0x81, 0x00, 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ................
|
||||
0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x02, 0x00, 0x00, 0x03, // ................
|
||||
0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x58, 0x00, 0x00, 0x04, // ............X...
|
||||
0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, 0x00, 0xaa, 0xa0, // ..........U.....
|
||||
0x41, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, // A...............
|
||||
0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
|
||||
};
|
58
src/renderer_d3d.h
Normal file
58
src/renderer_d3d.h
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright 2011-2012 Branimir Karadzic. All rights reserved.
|
||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||
*/
|
||||
|
||||
#ifndef __RENDERER_D3D_H__
|
||||
#define __RENDERER_D3D_H__
|
||||
|
||||
#if BGFX_CONFIG_DEBUG && BX_PLATFORM_WINDOWS && BX_COMPILER_MSVC
|
||||
# include <dxerr.h>
|
||||
# pragma comment(lib, "dxerr.lib")
|
||||
# define DX_CHECK_EXTRA_F " (%s): %s"
|
||||
# define DX_CHECK_EXTRA_ARGS , DXGetErrorString(__hr__), DXGetErrorDescription(__hr__)
|
||||
#else
|
||||
# define DX_CHECK_EXTRA_F ""
|
||||
# define DX_CHECK_EXTRA_ARGS
|
||||
#endif // BGFX_CONFIG_DEBUG && BX_PLATFORM_WINDOWS && BX_COMPILER_MSVC
|
||||
|
||||
namespace bgfx
|
||||
{
|
||||
#define _DX_CHECK(_call) \
|
||||
do { \
|
||||
HRESULT __hr__ = _call; \
|
||||
BX_CHECK(SUCCEEDED(__hr__), #_call " FAILED 0x%08x" DX_CHECK_EXTRA_F "\n" \
|
||||
, (uint32_t)__hr__ \
|
||||
DX_CHECK_EXTRA_ARGS \
|
||||
); \
|
||||
} while (0)
|
||||
|
||||
#if BGFX_CONFIG_DEBUG
|
||||
# define DX_CHECK(_call) _DX_CHECK(_call)
|
||||
#else
|
||||
# define DX_CHECK(_call) _call
|
||||
#endif // BGFX_CONFIG_DEBUG
|
||||
|
||||
#if BGFX_CONFIG_DEBUG
|
||||
# define DX_RELEASE(_ptr, _expected) \
|
||||
do { \
|
||||
if (NULL != _ptr) \
|
||||
{ \
|
||||
ULONG count = _ptr->Release(); \
|
||||
BX_CHECK(_expected == count, "RefCount is %d (expected %d).", count, _expected); \
|
||||
_ptr = NULL; \
|
||||
} \
|
||||
} while (0)
|
||||
#else
|
||||
# define DX_RELEASE(_ptr, _expected) \
|
||||
do { \
|
||||
if (NULL != _ptr) \
|
||||
{ \
|
||||
_ptr->Release(); \
|
||||
_ptr = NULL; \
|
||||
} \
|
||||
} while (0)
|
||||
#endif // BGFX_CONFIG_DEBUG
|
||||
} // namespace bgfx
|
||||
|
||||
#endif // __RENDERER_D3D_H__
|
File diff suppressed because it is too large
Load Diff
289
src/renderer_d3d11.h
Normal file
289
src/renderer_d3d11.h
Normal file
@ -0,0 +1,289 @@
|
||||
/*
|
||||
* Copyright 2011-2012 Branimir Karadzic. All rights reserved.
|
||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||
*/
|
||||
|
||||
#ifndef __RENDERER_D3D11_H__
|
||||
#define __RENDERER_D3D11_H__
|
||||
|
||||
#include <d3d11.h>
|
||||
#include "renderer_d3d.h"
|
||||
|
||||
typedef HRESULT (WINAPI *CreateDXGIFactoryFn)(REFIID, void**);
|
||||
|
||||
namespace bgfx
|
||||
{
|
||||
template <typename Ty>
|
||||
class StateCacheT
|
||||
{
|
||||
public:
|
||||
void add(uint64_t _id, Ty* _item)
|
||||
{
|
||||
invalidate(_id);
|
||||
m_hashMap.insert(stl::make_pair(_id, _item) );
|
||||
}
|
||||
|
||||
Ty* find(uint64_t _id)
|
||||
{
|
||||
HashMap::iterator it = m_hashMap.find(_id);
|
||||
if (it != m_hashMap.end() )
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void invalidate(uint64_t _id)
|
||||
{
|
||||
HashMap::iterator it = m_hashMap.find(_id);
|
||||
if (it != m_hashMap.end() )
|
||||
{
|
||||
DX_RELEASE(it->second, 0);
|
||||
m_hashMap.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
void invalidate()
|
||||
{
|
||||
for (HashMap::iterator it = m_hashMap.begin(), itEnd = m_hashMap.end(); it != itEnd; ++it)
|
||||
{
|
||||
DX_RELEASE(it->second, 0);
|
||||
}
|
||||
m_hashMap.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
typedef stl::unordered_map<uint64_t, Ty*> HashMap;
|
||||
HashMap m_hashMap;
|
||||
};
|
||||
|
||||
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 destroy()
|
||||
{
|
||||
if (NULL != m_ptr)
|
||||
{
|
||||
DX_RELEASE(m_ptr, 0);
|
||||
m_dynamic = false;
|
||||
}
|
||||
}
|
||||
|
||||
ID3D11Buffer* 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 destroy()
|
||||
{
|
||||
if (NULL != m_ptr)
|
||||
{
|
||||
DX_RELEASE(m_ptr, 0);
|
||||
m_dynamic = false;
|
||||
}
|
||||
}
|
||||
|
||||
ID3D11Buffer* m_ptr;
|
||||
uint32_t m_size;
|
||||
VertexDeclHandle m_decl;
|
||||
bool m_dynamic;
|
||||
};
|
||||
|
||||
struct Uniform
|
||||
{
|
||||
Uniform()
|
||||
: m_ptr(NULL)
|
||||
, m_data(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
void create(ConstantType::Enum _type, uint16_t _num, bool _alloc = true);
|
||||
void destroy();
|
||||
|
||||
ID3D11Buffer* m_ptr;
|
||||
void* m_data;
|
||||
};
|
||||
|
||||
struct Shader
|
||||
{
|
||||
Shader()
|
||||
: m_ptr(NULL)
|
||||
, m_code(NULL)
|
||||
, m_buffer(NULL)
|
||||
, m_hash(0)
|
||||
{
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if (NULL != m_buffer)
|
||||
{
|
||||
DX_RELEASE(m_buffer, 0);
|
||||
}
|
||||
|
||||
DX_RELEASE(m_ptr, 0);
|
||||
|
||||
if (NULL != m_code)
|
||||
{
|
||||
release(m_code);
|
||||
m_code = NULL;
|
||||
m_hash = 0;
|
||||
}
|
||||
}
|
||||
|
||||
IUnknown* m_ptr;
|
||||
const Memory* m_code;
|
||||
ID3D11Buffer* m_buffer;
|
||||
ConstantBuffer* m_constantBuffer;
|
||||
|
||||
PredefinedUniform m_predefined[PredefinedUniform::Count];
|
||||
|
||||
uint32_t m_hash;
|
||||
|
||||
uint16_t m_numUniforms;
|
||||
uint8_t m_numPredefined;
|
||||
};
|
||||
|
||||
struct Material
|
||||
{
|
||||
Material()
|
||||
: m_vsh(NULL)
|
||||
, m_fsh(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
void create(const Memory* _mem, uint32_t _flags);
|
||||
|
||||
void destroy()
|
||||
{
|
||||
DX_RELEASE(m_ptr, 0);
|
||||
}
|
||||
|
||||
void commit(uint8_t _stage);
|
||||
|
||||
ID3D11ShaderResourceView* m_ptr;
|
||||
ID3D11SamplerState* m_sampler;
|
||||
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 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_D3D11_H__
|
@ -193,11 +193,11 @@ namespace bgfx
|
||||
m_D3DPERF_EndEvent = (D3DPERF_EndEventFunc)GetProcAddress(m_d3d9dll, "D3DPERF_EndEvent");
|
||||
|
||||
#if BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
||||
Direct3DCreate9ExFunc direct3DCreate9Ex = (Direct3DCreate9ExFunc)GetProcAddress(m_d3d9dll, "Direct3DCreate9Ex");
|
||||
Direct3DCreate9ExFn direct3DCreate9Ex = (Direct3DCreate9ExFn)GetProcAddress(m_d3d9dll, "Direct3DCreate9Ex");
|
||||
BGFX_FATAL(NULL != direct3DCreate9Ex, bgfx::Fatal::D3D9_UnableToCreateInterface, "Function Direct3DCreate9Ex not found.");
|
||||
direct3DCreate9Ex(D3D_SDK_VERSION, &m_d3d9);
|
||||
#else
|
||||
Direct3DCreate9Func direct3DCreate9 = (Direct3DCreate9Func)GetProcAddress(m_d3d9dll, "Direct3DCreate9");
|
||||
Direct3DCreate9Fn direct3DCreate9 = (Direct3DCreate9Fn)GetProcAddress(m_d3d9dll, "Direct3DCreate9");
|
||||
BGFX_FATAL(NULL != direct3DCreate9, bgfx::Fatal::D3D9_UnableToCreateInterface, "Function Direct3DCreate9 not found.");
|
||||
m_d3d9 = direct3DCreate9(D3D_SDK_VERSION);
|
||||
#endif // defined(D3D_DISABLE_9EX)
|
||||
@ -308,8 +308,10 @@ namespace bgfx
|
||||
|| (m_caps.VertexShaderVersion >= D3DVS_VERSION(3, 0) )
|
||||
;
|
||||
|
||||
if (m_instancing)
|
||||
if (m_amd
|
||||
&& s_extendedFormats[ExtendedFormat::Inst].m_supported)
|
||||
{
|
||||
// ATi only
|
||||
m_device->SetRenderState(D3DRS_POINTSIZE, D3DFMT_INST);
|
||||
}
|
||||
|
||||
@ -949,14 +951,6 @@ namespace bgfx
|
||||
elem->Type = declType;
|
||||
elem->Offset = _decl.m_offset[attr];
|
||||
++elem;
|
||||
|
||||
// BX_TRACE("\tattr %d, num %d, type %d, norm %d, offset %d"
|
||||
// , attr
|
||||
// , num
|
||||
// , type
|
||||
// , normalized
|
||||
// , _decl.m_offset[attr]
|
||||
// );
|
||||
}
|
||||
}
|
||||
|
||||
@ -1657,7 +1651,7 @@ namespace bgfx
|
||||
matrix_ortho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f);
|
||||
|
||||
PredefinedUniform& predefined = material.m_predefined[0];
|
||||
uint8_t flags = predefined.m_type&BGFX_UNIFORM_FRAGMENTBIT;
|
||||
uint8_t flags = predefined.m_type;
|
||||
s_renderCtx.setShaderConstantF(flags, predefined.m_loc, proj, 4);
|
||||
|
||||
s_renderCtx.m_textures[m_texture.idx].commit(0);
|
||||
@ -1829,11 +1823,13 @@ namespace bgfx
|
||||
|
||||
void Context::rendererSubmit()
|
||||
{
|
||||
IDirect3DDevice9* device = s_renderCtx.m_device;
|
||||
|
||||
PIX_BEGINEVENT(D3DCOLOR_RGBA(0xff, 0x00, 0x00, 0xff), "rendererSubmit");
|
||||
|
||||
s_renderCtx.updateResolution(m_render->m_resolution);
|
||||
|
||||
s_renderCtx.m_device->BeginScene();
|
||||
device->BeginScene();
|
||||
|
||||
if (0 < m_render->m_iboffset)
|
||||
{
|
||||
@ -1859,7 +1855,7 @@ namespace bgfx
|
||||
matrix_mul(viewProj[ii].val, m_render->m_view[ii].val, m_render->m_proj[ii].val);
|
||||
}
|
||||
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_FILLMODE, m_render->m_debug&BGFX_DEBUG_WIREFRAME ? D3DFILL_WIREFRAME : D3DFILL_SOLID) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_FILLMODE, m_render->m_debug&BGFX_DEBUG_WIREFRAME ? D3DFILL_WIREFRAME : D3DFILL_SOLID) );
|
||||
uint16_t materialIdx = bgfx::invalidHandle;
|
||||
SortKey key;
|
||||
uint8_t view = 0xff;
|
||||
@ -1913,7 +1909,7 @@ namespace bgfx
|
||||
vp.Height = rect.m_height;
|
||||
vp.MinZ = 0.0f;
|
||||
vp.MaxZ = 1.0f;
|
||||
DX_CHECK(s_renderCtx.m_device->SetViewport(&vp) );
|
||||
DX_CHECK(device->SetViewport(&vp) );
|
||||
|
||||
Clear& clear = m_render->m_clear[view];
|
||||
|
||||
@ -1927,13 +1923,13 @@ namespace bgfx
|
||||
flags |= D3DCLEAR_TARGET;
|
||||
uint32_t rgba = clear.m_rgba;
|
||||
color = D3DCOLOR_RGBA(rgba>>24, (rgba>>16)&0xff, (rgba>>8)&0xff, rgba&0xff);
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_RED|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_BLUE|D3DCOLORWRITEENABLE_ALPHA) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_RED|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_BLUE|D3DCOLORWRITEENABLE_ALPHA) );
|
||||
}
|
||||
|
||||
if (BGFX_CLEAR_DEPTH_BIT & clear.m_flags)
|
||||
{
|
||||
flags |= D3DCLEAR_ZBUFFER;
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ZWRITEENABLE, TRUE) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ZWRITEENABLE, TRUE) );
|
||||
}
|
||||
|
||||
if (BGFX_CLEAR_STENCIL_BIT & clear.m_flags)
|
||||
@ -1948,18 +1944,18 @@ namespace bgfx
|
||||
rc.top = rect.m_y;
|
||||
rc.right = rect.m_x + rect.m_width;
|
||||
rc.bottom = rect.m_y + rect.m_height;
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetScissorRect(&rc) );
|
||||
DX_CHECK(s_renderCtx.m_device->Clear(0, NULL, flags, color, clear.m_depth, clear.m_stencil) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_SCISSORTESTENABLE, FALSE) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE) );
|
||||
DX_CHECK(device->SetScissorRect(&rc) );
|
||||
DX_CHECK(device->Clear(0, NULL, flags, color, clear.m_depth, clear.m_stencil) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_SCISSORTESTENABLE, FALSE) );
|
||||
}
|
||||
}
|
||||
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ZENABLE, TRUE) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ZENABLE, TRUE) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER) );
|
||||
}
|
||||
|
||||
if ( (BGFX_STATE_CULL_MASK|BGFX_STATE_DEPTH_WRITE|BGFX_STATE_DEPTH_TEST_MASK
|
||||
@ -1970,22 +1966,22 @@ namespace bgfx
|
||||
if (BGFX_STATE_CULL_MASK & changedFlags)
|
||||
{
|
||||
uint32_t cull = (newFlags&BGFX_STATE_CULL_MASK)>>BGFX_STATE_CULL_SHIFT;
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_CULLMODE, s_cullMode[cull]) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_CULLMODE, s_cullMode[cull]) );
|
||||
}
|
||||
|
||||
if (BGFX_STATE_DEPTH_WRITE & changedFlags)
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ZWRITEENABLE, !!(BGFX_STATE_DEPTH_WRITE & newFlags) ) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ZWRITEENABLE, !!(BGFX_STATE_DEPTH_WRITE & newFlags) ) );
|
||||
}
|
||||
|
||||
if (BGFX_STATE_DEPTH_TEST_MASK & changedFlags)
|
||||
{
|
||||
uint32_t func = (newFlags&BGFX_STATE_DEPTH_TEST_MASK)>>BGFX_STATE_DEPTH_TEST_SHIFT;
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ZENABLE, 0 != func) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ZENABLE, 0 != func) );
|
||||
|
||||
if (0 != func)
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ZFUNC, s_depthFunc[func]) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ZFUNC, s_depthFunc[func]) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -1993,39 +1989,39 @@ namespace bgfx
|
||||
{
|
||||
uint32_t ref = (newFlags&BGFX_STATE_ALPHA_REF_MASK)>>BGFX_STATE_ALPHA_REF_SHIFT;
|
||||
alphaRef = ref/255.0f;
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ALPHAREF, ref) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ALPHATESTENABLE, !!(BGFX_STATE_ALPHA_TEST & newFlags) ) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ALPHAREF, ref) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ALPHATESTENABLE, !!(BGFX_STATE_ALPHA_TEST & newFlags) ) );
|
||||
}
|
||||
|
||||
if ( (BGFX_STATE_PT_POINTS|BGFX_STATE_POINT_SIZE_MASK) & changedFlags)
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_POINTSIZE, castfu( (float)( (newFlags&BGFX_STATE_POINT_SIZE_MASK)>>BGFX_STATE_POINT_SIZE_SHIFT) ) ) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_POINTSIZE, castfu( (float)( (newFlags&BGFX_STATE_POINT_SIZE_MASK)>>BGFX_STATE_POINT_SIZE_SHIFT) ) ) );
|
||||
}
|
||||
|
||||
#if BX_PLATFORM_WINDOWS
|
||||
if (BGFX_STATE_SRGBWRITE & changedFlags)
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_SRGBWRITEENABLE, (newFlags&BGFX_STATE_SRGBWRITE) == BGFX_STATE_SRGBWRITE) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_SRGBWRITEENABLE, (newFlags&BGFX_STATE_SRGBWRITE) == BGFX_STATE_SRGBWRITE) );
|
||||
}
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
|
||||
if (BGFX_STATE_MSAA & changedFlags)
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, (newFlags&BGFX_STATE_MSAA) == BGFX_STATE_MSAA) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, (newFlags&BGFX_STATE_MSAA) == BGFX_STATE_MSAA) );
|
||||
}
|
||||
|
||||
if ( (BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE) & changedFlags)
|
||||
{
|
||||
uint32_t writeEnable = (newFlags&BGFX_STATE_ALPHA_WRITE) ? D3DCOLORWRITEENABLE_ALPHA : 0;
|
||||
writeEnable |= (newFlags&BGFX_STATE_RGB_WRITE) ? D3DCOLORWRITEENABLE_RED|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_BLUE : 0;
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_COLORWRITEENABLE, writeEnable) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_COLORWRITEENABLE, writeEnable) );
|
||||
}
|
||||
|
||||
if (BGFX_STATE_BLEND_MASK & changedFlags)
|
||||
{
|
||||
bool alphaBlendEnabled = !!(BGFX_STATE_BLEND_MASK & newFlags);
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_ALPHABLENDENABLE, alphaBlendEnabled) );
|
||||
// DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, alphaBlendEnabled) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ALPHABLENDENABLE, alphaBlendEnabled) );
|
||||
// DX_CHECK(device->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, alphaBlendEnabled) );
|
||||
|
||||
if (alphaBlendEnabled)
|
||||
{
|
||||
@ -2033,10 +2029,10 @@ namespace bgfx
|
||||
uint32_t src = blend&0xf;
|
||||
uint32_t dst = (blend>>4)&0xf;
|
||||
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_SRCBLEND, s_blendFactor[src]) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_DESTBLEND, s_blendFactor[dst]) );
|
||||
// DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_SRCBLENDALPHA, D3DBLEND_SRCALPHA) );
|
||||
// DX_CHECK(s_renderCtx.m_device->SetRenderState(D3DRS_DESTBLENDALPHA, D3DBLEND_INVSRCALPHA) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_SRCBLEND, s_blendFactor[src]) );
|
||||
DX_CHECK(device->SetRenderState(D3DRS_DESTBLEND, s_blendFactor[dst]) );
|
||||
// DX_CHECK(device->SetRenderState(D3DRS_SRCBLENDALPHA, D3DBLEND_SRCALPHA) );
|
||||
// DX_CHECK(device->SetRenderState(D3DRS_DESTBLENDALPHA, D3DBLEND_INVSRCALPHA) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -2055,14 +2051,14 @@ namespace bgfx
|
||||
|
||||
if (bgfx::invalidHandle == materialIdx)
|
||||
{
|
||||
s_renderCtx.m_device->SetVertexShader(NULL);
|
||||
s_renderCtx.m_device->SetPixelShader(NULL);
|
||||
device->SetVertexShader(NULL);
|
||||
device->SetPixelShader(NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
Material& material = s_renderCtx.m_materials[materialIdx];
|
||||
s_renderCtx.m_device->SetVertexShader( (IDirect3DVertexShader9*)material.m_vsh->m_ptr);
|
||||
s_renderCtx.m_device->SetPixelShader( (IDirect3DPixelShader9*)material.m_fsh->m_ptr);
|
||||
device->SetVertexShader( (IDirect3DVertexShader9*)material.m_vsh->m_ptr);
|
||||
device->SetPixelShader( (IDirect3DPixelShader9*)material.m_fsh->m_ptr);
|
||||
}
|
||||
|
||||
materialChanged =
|
||||
@ -2220,7 +2216,7 @@ namespace bgfx
|
||||
}
|
||||
else
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetTexture(stage, NULL) );
|
||||
DX_CHECK(device->SetTexture(stage, NULL) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -2240,30 +2236,31 @@ namespace bgfx
|
||||
|
||||
uint16_t decl = vb.m_decl.idx == bgfx::invalidHandle ? state.m_vertexDecl.idx : vb.m_decl.idx;
|
||||
const VertexDeclaration& vertexDecl = s_renderCtx.m_vertexDecls[decl];
|
||||
DX_CHECK(s_renderCtx.m_device->SetStreamSource(0, vb.m_ptr, 0, vertexDecl.m_decl.m_stride) );
|
||||
DX_CHECK(device->SetStreamSource(0, vb.m_ptr, 0, vertexDecl.m_decl.m_stride) );
|
||||
|
||||
if (invalidHandle != state.m_instanceDataBuffer.idx)
|
||||
if (invalidHandle != state.m_instanceDataBuffer.idx
|
||||
&& s_renderCtx.m_instancing)
|
||||
{
|
||||
const VertexBuffer& inst = s_renderCtx.m_vertexBuffers[state.m_instanceDataBuffer.idx];
|
||||
DX_CHECK(s_renderCtx.m_device->SetStreamSourceFreq(0, D3DSTREAMSOURCE_INDEXEDDATA|state.m_numInstances) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetStreamSourceFreq(1, D3DSTREAMSOURCE_INSTANCEDATA|1) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetStreamSource(1, inst.m_ptr, state.m_instanceDataOffset, state.m_instanceDataStride) );
|
||||
DX_CHECK(device->SetStreamSourceFreq(0, D3DSTREAMSOURCE_INDEXEDDATA|state.m_numInstances) );
|
||||
DX_CHECK(device->SetStreamSourceFreq(1, D3DSTREAMSOURCE_INSTANCEDATA|1) );
|
||||
DX_CHECK(device->SetStreamSource(1, inst.m_ptr, state.m_instanceDataOffset, state.m_instanceDataStride) );
|
||||
|
||||
IDirect3DVertexDeclaration9* ptr = createVertexDecl(vertexDecl.m_decl, state.m_instanceDataStride/16);
|
||||
DX_CHECK(s_renderCtx.m_device->SetVertexDeclaration(ptr) );
|
||||
DX_CHECK(device->SetVertexDeclaration(ptr) );
|
||||
DX_RELEASE(ptr, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetStreamSourceFreq(0, 1) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetStreamSource(1, NULL, 0, 0) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetVertexDeclaration(vertexDecl.m_ptr) );
|
||||
DX_CHECK(device->SetStreamSourceFreq(0, 1) );
|
||||
DX_CHECK(device->SetStreamSource(1, NULL, 0, 0) );
|
||||
DX_CHECK(device->SetVertexDeclaration(vertexDecl.m_ptr) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetStreamSource(0, NULL, 0, 0) );
|
||||
DX_CHECK(s_renderCtx.m_device->SetStreamSource(1, NULL, 0, 0) );
|
||||
DX_CHECK(device->SetStreamSource(0, NULL, 0, 0) );
|
||||
DX_CHECK(device->SetStreamSource(1, NULL, 0, 0) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -2275,11 +2272,11 @@ namespace bgfx
|
||||
if (bgfx::invalidHandle != handle)
|
||||
{
|
||||
IndexBuffer& ib = s_renderCtx.m_indexBuffers[handle];
|
||||
DX_CHECK(s_renderCtx.m_device->SetIndices(ib.m_ptr) );
|
||||
DX_CHECK(device->SetIndices(ib.m_ptr) );
|
||||
}
|
||||
else
|
||||
{
|
||||
DX_CHECK(s_renderCtx.m_device->SetIndices(NULL) );
|
||||
DX_CHECK(device->SetIndices(NULL) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -2308,7 +2305,7 @@ namespace bgfx
|
||||
numInstances = state.m_numInstances;
|
||||
numPrimsRendered = numPrimsSubmitted*state.m_numInstances;
|
||||
|
||||
DX_CHECK(s_renderCtx.m_device->DrawIndexedPrimitive(primType
|
||||
DX_CHECK(device->DrawIndexedPrimitive(primType
|
||||
, state.m_startVertex
|
||||
, 0
|
||||
, numVertices
|
||||
@ -2323,7 +2320,7 @@ namespace bgfx
|
||||
numInstances = state.m_numInstances;
|
||||
numPrimsRendered = numPrimsSubmitted*state.m_numInstances;
|
||||
|
||||
DX_CHECK(s_renderCtx.m_device->DrawIndexedPrimitive(primType
|
||||
DX_CHECK(device->DrawIndexedPrimitive(primType
|
||||
, state.m_startVertex
|
||||
, 0
|
||||
, numVertices
|
||||
@ -2337,7 +2334,7 @@ namespace bgfx
|
||||
numPrimsSubmitted = numVertices/primNumVerts;
|
||||
numInstances = state.m_numInstances;
|
||||
numPrimsRendered = numPrimsSubmitted*state.m_numInstances;
|
||||
DX_CHECK(s_renderCtx.m_device->DrawPrimitive(primType
|
||||
DX_CHECK(device->DrawPrimitive(primType
|
||||
, state.m_startVertex
|
||||
, numPrimsSubmitted
|
||||
) );
|
||||
@ -2412,7 +2409,7 @@ namespace bgfx
|
||||
PIX_ENDEVENT();
|
||||
}
|
||||
|
||||
s_renderCtx.m_device->EndScene();
|
||||
device->EndScene();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,9 +23,9 @@
|
||||
# include <d3d9.h>
|
||||
|
||||
# if BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
||||
typedef HRESULT (WINAPI *Direct3DCreate9ExFunc)(UINT SDKVersion, IDirect3D9Ex**);
|
||||
typedef HRESULT (WINAPI *Direct3DCreate9ExFn)(UINT SDKVersion, IDirect3D9Ex**);
|
||||
# else
|
||||
typedef IDirect3D9* (WINAPI *Direct3DCreate9Func)(UINT SDKVersion);
|
||||
typedef IDirect3D9* (WINAPI *Direct3DCreate9Fn)(UINT SDKVersion);
|
||||
# endif // BGFX_CONFIG_RENDERER_DIRECT3D9EX
|
||||
|
||||
typedef int (WINAPI *D3DPERF_BeginEventFunc)(D3DCOLOR col, LPCWSTR wszName);
|
||||
@ -56,20 +56,10 @@ typedef DWORD (WINAPI *D3DPERF_GetStatusFunc)();
|
||||
# define _PIX_ENDEVENT() do {} while(0)
|
||||
#endif // BX_PLATFORM_
|
||||
|
||||
#include "renderer_d3d.h"
|
||||
|
||||
namespace bgfx
|
||||
{
|
||||
# define _DX_CHECK(_call) \
|
||||
do { \
|
||||
HRESULT __hr__ = _call; \
|
||||
BX_CHECK(SUCCEEDED(__hr__), #_call " FAILED 0x%08x\n", (uint32_t)__hr__); \
|
||||
} while (0)
|
||||
|
||||
#if BGFX_CONFIG_DEBUG
|
||||
# define DX_CHECK(_call) _DX_CHECK(_call)
|
||||
#else
|
||||
# define DX_CHECK(_call) _call
|
||||
#endif // BGFX_CONFIG_DEBUG
|
||||
|
||||
#if BGFX_CONFIG_DEBUG_PIX
|
||||
# define PIX_SETMARKER(_col, _name) _PIX_SETMARKER(_col, _name)
|
||||
# define PIX_BEGINEVENT(_col, _name) _PIX_BEGINEVENT(_col, _name)
|
||||
@ -80,27 +70,6 @@ namespace bgfx
|
||||
# define PIX_ENDEVENT()
|
||||
#endif // BGFX_CONFIG_DEBUG_PIX
|
||||
|
||||
#if BGFX_CONFIG_DEBUG
|
||||
# define DX_RELEASE(_ptr, _expected) \
|
||||
do { \
|
||||
if (NULL != _ptr) \
|
||||
{ \
|
||||
ULONG count = _ptr->Release(); \
|
||||
BX_CHECK(_expected == count, "RefCount is %d (expected %d).", count, _expected); \
|
||||
_ptr = NULL; \
|
||||
} \
|
||||
} while (0)
|
||||
#else
|
||||
# define DX_RELEASE(_ptr, _expected) \
|
||||
do { \
|
||||
if (NULL != _ptr) \
|
||||
{ \
|
||||
_ptr->Release(); \
|
||||
_ptr = NULL; \
|
||||
} \
|
||||
} while (0)
|
||||
#endif // BGFX_CONFIG_DEBUG
|
||||
|
||||
# ifndef D3DFMT_ATI1
|
||||
# define D3DFMT_ATI1 ( (D3DFORMAT)MAKEFOURCC('A','T','I','1') )
|
||||
# endif // D3DFMT_ATI1
|
||||
|
@ -1,141 +1,145 @@
|
||||
/*
|
||||
* Copyright 2011-2012 Branimir Karadzic. All rights reserved.
|
||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "bgfx_p.h"
|
||||
|
||||
#if BGFX_CONFIG_RENDERER_NULL
|
||||
|
||||
namespace bgfx
|
||||
{
|
||||
void ConstantBuffer::commit()
|
||||
{
|
||||
}
|
||||
|
||||
void TextVideoMemBlitter::setup()
|
||||
{
|
||||
}
|
||||
|
||||
void TextVideoMemBlitter::render(uint32_t /*_numIndices*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::flip()
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererInit()
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererShutdown()
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateIndexBuffer(IndexBufferHandle /*_handle*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyIndexBuffer(IndexBufferHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateVertexDecl(VertexDeclHandle /*_handle*/, const VertexDecl& /*_decl*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyVertexDecl(VertexDeclHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateVertexBuffer(VertexBufferHandle /*_handle*/, Memory* /*_mem*/, VertexDeclHandle /*_declHandle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyVertexBuffer(VertexBufferHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateDynamicIndexBuffer(IndexBufferHandle /*_handle*/, uint32_t /*_size*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererUpdateDynamicIndexBuffer(IndexBufferHandle /*_handle*/, uint32_t /*_offset*/, uint32_t /*_size*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyDynamicIndexBuffer(IndexBufferHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateDynamicVertexBuffer(VertexBufferHandle /*_handle*/, uint32_t /*_size*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererUpdateDynamicVertexBuffer(VertexBufferHandle /*_handle*/, uint32_t /*_offset*/, uint32_t /*_size*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyDynamicVertexBuffer(VertexBufferHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateVertexShader(VertexShaderHandle /*_handle*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyVertexShader(VertexShaderHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateFragmentShader(FragmentShaderHandle /*_handle*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyFragmentShader(FragmentShaderHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateMaterial(MaterialHandle /*_handle*/, VertexShaderHandle /*_vsh*/, FragmentShaderHandle /*_fsh*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyMaterial(FragmentShaderHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateTexture(TextureHandle /*_handle*/, Memory* /*_mem*/, uint32_t /*_flags*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyTexture(TextureHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateRenderTarget(RenderTargetHandle /*_handle*/, uint16_t /*_width*/, uint16_t /*_height*/, uint32_t /*_flags*/, uint32_t /*_textureFlags*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyRenderTarget(RenderTargetHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateUniform(UniformHandle /*_handle*/, ConstantType::Enum /*_type*/, uint16_t /*_num*/, const char* /*_name*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyUniform(UniformHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererSaveScreenShot(Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererSubmit()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
#endif // BGFX_CONFIG_RENDERER_NULL
|
||||
/*
|
||||
* Copyright 2011-2012 Branimir Karadzic. All rights reserved.
|
||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "bgfx_p.h"
|
||||
|
||||
#if BGFX_CONFIG_RENDERER_NULL
|
||||
|
||||
namespace bgfx
|
||||
{
|
||||
void ConstantBuffer::commit()
|
||||
{
|
||||
}
|
||||
|
||||
void TextVideoMemBlitter::setup()
|
||||
{
|
||||
}
|
||||
|
||||
void TextVideoMemBlitter::render(uint32_t /*_numIndices*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::flip()
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererInit()
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererShutdown()
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateIndexBuffer(IndexBufferHandle /*_handle*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyIndexBuffer(IndexBufferHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateVertexDecl(VertexDeclHandle /*_handle*/, const VertexDecl& /*_decl*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyVertexDecl(VertexDeclHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateVertexBuffer(VertexBufferHandle /*_handle*/, Memory* /*_mem*/, VertexDeclHandle /*_declHandle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyVertexBuffer(VertexBufferHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateDynamicIndexBuffer(IndexBufferHandle /*_handle*/, uint32_t /*_size*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererUpdateDynamicIndexBuffer(IndexBufferHandle /*_handle*/, uint32_t /*_offset*/, uint32_t /*_size*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyDynamicIndexBuffer(IndexBufferHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateDynamicVertexBuffer(VertexBufferHandle /*_handle*/, uint32_t /*_size*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererUpdateDynamicVertexBuffer(VertexBufferHandle /*_handle*/, uint32_t /*_offset*/, uint32_t /*_size*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyDynamicVertexBuffer(VertexBufferHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateVertexShader(VertexShaderHandle /*_handle*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyVertexShader(VertexShaderHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateFragmentShader(FragmentShaderHandle /*_handle*/, Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyFragmentShader(FragmentShaderHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateMaterial(MaterialHandle /*_handle*/, VertexShaderHandle /*_vsh*/, FragmentShaderHandle /*_fsh*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyMaterial(FragmentShaderHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateTexture(TextureHandle /*_handle*/, Memory* /*_mem*/, uint32_t /*_flags*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyTexture(TextureHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateRenderTarget(RenderTargetHandle /*_handle*/, uint16_t /*_width*/, uint16_t /*_height*/, uint32_t /*_flags*/, uint32_t /*_textureFlags*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyRenderTarget(RenderTargetHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererCreateUniform(UniformHandle /*_handle*/, ConstantType::Enum /*_type*/, uint16_t /*_num*/, const char* /*_name*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererDestroyUniform(UniformHandle /*_handle*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererSaveScreenShot(Memory* /*_mem*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererUpdateUniform(uint16_t /*_loc*/, const void* /*_data*/, uint32_t /*_size*/)
|
||||
{
|
||||
}
|
||||
|
||||
void Context::rendererSubmit()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
#endif // BGFX_CONFIG_RENDERER_NULL
|
||||
|
179
src/vs_debugfont_dx11.bin.h
Normal file
179
src/vs_debugfont_dx11.bin.h
Normal file
@ -0,0 +1,179 @@
|
||||
static const uint8_t vs_debugfont_dx11[2809] =
|
||||
{
|
||||
0x01, 0x00, 0xc0, 0x0a, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, // .....u_modelView
|
||||
0x50, 0x72, 0x6f, 0x6a, 0x09, 0x00, 0x00, 0x0a, 0x40, 0x00, 0xdc, 0x0a, 0x44, 0x58, 0x42, 0x43, // Proj....@...DXBC
|
||||
0x49, 0xc3, 0x37, 0x49, 0xa7, 0x55, 0xe6, 0x4d, 0x05, 0x66, 0x2d, 0x74, 0x33, 0xa1, 0xec, 0xf1, // I.7I.U.M.f-t3...
|
||||
0x01, 0x00, 0x00, 0x00, 0xdc, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, // ............4...
|
||||
0xcc, 0x07, 0x00, 0x00, 0x54, 0x08, 0x00, 0x00, 0xe0, 0x08, 0x00, 0x00, 0x40, 0x0a, 0x00, 0x00, // ....T.......@...
|
||||
0x52, 0x44, 0x45, 0x46, 0x90, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, // RDEF........h...
|
||||
0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x05, 0xfe, 0xff, 0x00, 0x91, 0x00, 0x00, // ....<...........
|
||||
0x5d, 0x07, 0x00, 0x00, 0x52, 0x44, 0x31, 0x31, 0x3c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ]...RD11<.......
|
||||
0x20, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, // ...(...$.......
|
||||
0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x00, 0xab, 0xab, 0xab, // ....$Globals....
|
||||
0x5c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x0a, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x18, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xf4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
|
||||
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x31, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1...............
|
||||
0xf4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x05, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........=.......
|
||||
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x44, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // D...............
|
||||
0xf4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x05, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ........O.......
|
||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........`.......
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x84, 0x05, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
|
||||
0x98, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x05, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ............0...
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xf4, 0x05, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....@...........
|
||||
0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, // ............P...
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x10, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....`...........
|
||||
0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, // ............p...
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x2e, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x06, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, // ........>.......
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x49, 0x06, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // I...............
|
||||
0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x53, 0x06, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, // ........S.......
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x5e, 0x06, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ^...............
|
||||
0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x06, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, // ........j.......
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x78, 0x06, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // x...............
|
||||
0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x85, 0x06, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, // ................
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x93, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
|
||||
0xa4, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x06, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, // ............@...
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xf8, 0x06, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x24, 0x07, 0x00, 0x00, 0xc0, 0x09, 0x00, 0x00, // ........$.......
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...............
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x30, 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // 0.......@.......
|
||||
0xa4, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x40, 0x0a, 0x00, 0x00, // ........@...@...
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...............
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x51, 0x07, 0x00, 0x00, 0x80, 0x0a, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Q.......@.......
|
||||
0xa4, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
|
||||
0x65, 0x66, 0x00, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x00, 0xab, 0xab, 0xab, 0x00, 0x00, 0x03, 0x00, // ef.float........
|
||||
0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x04, 0x00, 0x00, // ................
|
||||
0x75, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x00, 0x75, 0x5f, 0x72, 0x67, 0x62, 0x64, 0x69, 0x73, 0x70, // u_time.u_rgbdisp
|
||||
0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, // lacement.u_inter
|
||||
0x6c, 0x61, 0x63, 0x65, 0x00, 0x75, 0x5f, 0x7a, 0x6f, 0x6f, 0x6d, 0x00, 0x75, 0x5f, 0x73, 0x74, // lace.u_zoom.u_st
|
||||
0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x00, 0x75, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x00, // rength.u_center.
|
||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x00, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, // float2..........
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x65, // ........X...u_me
|
||||
0x73, 0x68, 0x54, 0x69, 0x6c, 0x65, 0x55, 0x56, 0x00, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x00, // shTileUV.float3.
|
||||
0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x91, 0x05, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x61, 0x74, 0x44, 0x69, 0x66, 0x66, 0x75, 0x73, 0x65, // ....u_matDiffuse
|
||||
0x00, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, // .float4.........
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x05, 0x00, 0x00, 0x75, 0x5f, 0x68, 0x69, // ............u_hi
|
||||
0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x75, 0x5f, 0x6c, // ghlightColor.u_l
|
||||
0x69, 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x00, 0x75, 0x5f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x41, // ightDir.u_lightA
|
||||
0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x00, 0x75, 0x5f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x69, // mbient.u_lightDi
|
||||
0x66, 0x66, 0x75, 0x73, 0x65, 0x00, 0x75, 0x5f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x65, // ffuse.u_lightSpe
|
||||
0x63, 0x75, 0x6c, 0x61, 0x72, 0x00, 0x75, 0x5f, 0x66, 0x6f, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // cular.u_fogColor
|
||||
0x00, 0x75, 0x5f, 0x66, 0x6f, 0x67, 0x41, 0x72, 0x67, 0x73, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // .u_fogArgs.u_vie
|
||||
0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, // wRect.u_viewTexe
|
||||
0x6c, 0x00, 0x75, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // l.u_shadowColor.
|
||||
0x75, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x72, 0x67, 0x73, 0x00, 0x75, 0x5f, 0x63, // u_filterArgs.u_c
|
||||
0x6f, 0x6e, 0x74, 0x6f, 0x75, 0x72, 0x41, 0x72, 0x67, 0x73, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ontourArgs.u_vie
|
||||
0x77, 0x00, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, // w.float4x4......
|
||||
0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x06, 0x00, 0x00, // ................
|
||||
0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, // u_viewProj......
|
||||
0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x06, 0x00, 0x00, // ................
|
||||
0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, // u_model.........
|
||||
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...............
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
|
||||
0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // delView.u_modelV
|
||||
0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // iewProj.u_modelV
|
||||
0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x58, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // iewProjX.u_viewP
|
||||
0x72, 0x6f, 0x6a, 0x58, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // rojX.Microsoft (
|
||||
0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
|
||||
0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, // ompiler 9.29.952
|
||||
0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0xab, 0xab, 0x49, 0x53, 0x47, 0x4e, 0x80, 0x00, 0x00, 0x00, // .3111...ISGN....
|
||||
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........h.......
|
||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
|
||||
0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // q...............
|
||||
0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........q.......
|
||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, // ................
|
||||
0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // w...............
|
||||
0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, // ........POSITION
|
||||
0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // .COLOR.TEXCOORD.
|
||||
0x4f, 0x53, 0x47, 0x4e, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGN............
|
||||
0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // h...............
|
||||
0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........t.......
|
||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
|
||||
0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // t...............
|
||||
0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........z.......
|
||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, // ................
|
||||
0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
|
||||
0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x45, 0x58, // R.TEXCOORD..SHEX
|
||||
0x58, 0x01, 0x00, 0x00, 0x50, 0x00, 0x01, 0x00, 0x56, 0x00, 0x00, 0x00, 0x6a, 0x08, 0x00, 0x01, // X...P...V...j...
|
||||
0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, // Y...F. .........
|
||||
0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...r......._...
|
||||
0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, // ........_.......
|
||||
0x02, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, // ...._...2.......
|
||||
0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // g.... ..........
|
||||
0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // e.... ......e...
|
||||
0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, // . ......e...2 ..
|
||||
0x03, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, // ....h.......8...
|
||||
0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
|
||||
0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, // F. .........2...
|
||||
0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F. .....
|
||||
0xa0, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ............F...
|
||||
0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....2...........
|
||||
0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, // F. .............
|
||||
0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, // ....F...........
|
||||
0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // . ......F.......
|
||||
0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, // F. .........6...
|
||||
0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // . ......F.......
|
||||
0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
|
||||
0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, // ....6...2 ......
|
||||
0x46, 0x10, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, // F.......>...STAT
|
||||
0x94, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........
|
||||
};
|
24
src/vs_debugfont_dx9.bin.h
Normal file
24
src/vs_debugfont_dx9.bin.h
Normal file
@ -0,0 +1,24 @@
|
||||
static const uint8_t vs_debugfont_dx9[335] =
|
||||
{
|
||||
0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, // ...u_modelViewPr
|
||||
0x6f, 0x6a, 0x09, 0x01, 0x00, 0x00, 0x04, 0x00, 0x34, 0x01, 0x00, 0x02, 0xfe, 0xff, 0xfe, 0xff, // oj......4.......
|
||||
0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x02, // #.CTAB....W.....
|
||||
0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x50, 0x00, // ..............P.
|
||||
0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, // ..0...........@.
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
|
||||
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, // wProj...........
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x32, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......vs_2_0.Mic
|
||||
0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
|
||||
0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
|
||||
0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0x1f, 0x00, // 9.29.952.3111...
|
||||
0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // ................
|
||||
0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x01, 0x80, 0x02, 0x00, // ................
|
||||
0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0f, 0x90, 0x05, 0x00, // ................
|
||||
0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x90, 0x01, 0x00, 0xe4, 0xa0, 0x04, 0x00, // ........U.......
|
||||
0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, // ................
|
||||
0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, // ................
|
||||
0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, // ................
|
||||
0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0f, 0xd0, 0x01, 0x00, // ................
|
||||
0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xd0, 0x02, 0x00, 0xe4, 0x90, 0x01, 0x00, // ................
|
||||
0x00, 0x02, 0x00, 0x00, 0x03, 0xe0, 0x03, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ...............
|
||||
};
|
@ -3,6 +3,7 @@
|
||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||
*/
|
||||
|
||||
#define NOMINMAX
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
@ -17,7 +18,7 @@ extern "C" {
|
||||
# include <fpp.h>
|
||||
} // extern "C"
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
# define BX_TRACE(_format, ...) fprintf(stderr, "" _format "\n", ##__VA_ARGS__)
|
||||
#endif // DEBUG
|
||||
|
||||
@ -35,6 +36,7 @@ extern "C" {
|
||||
|
||||
#if BX_PLATFORM_WINDOWS
|
||||
# include <d3dx9.h>
|
||||
# include <d3dcompiler.h>
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
|
||||
long int fsize(FILE* _file)
|
||||
@ -93,7 +95,7 @@ struct Uniform
|
||||
typedef std::vector<Uniform> UniformArray;
|
||||
|
||||
#if BX_PLATFORM_WINDOWS
|
||||
struct ConstRemap
|
||||
struct ConstRemapDx9
|
||||
{
|
||||
ConstantType::Enum id;
|
||||
D3DXPARAMETER_CLASS paramClass;
|
||||
@ -101,23 +103,23 @@ struct ConstRemap
|
||||
uint32_t paramBytes;
|
||||
};
|
||||
|
||||
static const ConstRemap s_constRemap[7] =
|
||||
static const ConstRemapDx9 s_constRemapDx9[7] =
|
||||
{
|
||||
{ ConstantType::Uniform1iv, D3DXPC_SCALAR, D3DXPT_INT, 4 },
|
||||
{ ConstantType::Uniform1fv, D3DXPC_SCALAR, D3DXPT_FLOAT, 4 },
|
||||
{ ConstantType::Uniform2fv, D3DXPC_VECTOR, D3DXPT_FLOAT, 8 },
|
||||
{ ConstantType::Uniform3fv, D3DXPC_VECTOR, D3DXPT_FLOAT, 12 },
|
||||
{ ConstantType::Uniform4fv, D3DXPC_VECTOR, D3DXPT_FLOAT, 16 },
|
||||
{ ConstantType::Uniform1iv, D3DXPC_SCALAR, D3DXPT_INT, 4 },
|
||||
{ ConstantType::Uniform1fv, D3DXPC_SCALAR, D3DXPT_FLOAT, 4 },
|
||||
{ ConstantType::Uniform2fv, D3DXPC_VECTOR, D3DXPT_FLOAT, 8 },
|
||||
{ ConstantType::Uniform3fv, D3DXPC_VECTOR, D3DXPT_FLOAT, 12 },
|
||||
{ ConstantType::Uniform4fv, D3DXPC_VECTOR, D3DXPT_FLOAT, 16 },
|
||||
{ ConstantType::Uniform3x3fv, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 36 },
|
||||
{ ConstantType::Uniform4x4fv, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 64 },
|
||||
};
|
||||
|
||||
ConstantType::Enum findConstantType(const D3DXCONSTANT_DESC& constDesc)
|
||||
ConstantType::Enum findConstantTypeDx9(const D3DXCONSTANT_DESC& constDesc)
|
||||
{
|
||||
uint32_t count = sizeof(s_constRemap)/sizeof(ConstRemap);
|
||||
uint32_t count = sizeof(s_constRemapDx9)/sizeof(ConstRemapDx9);
|
||||
for (uint32_t ii = 0; ii < count; ++ii)
|
||||
{
|
||||
const ConstRemap& remap = s_constRemap[ii];
|
||||
const ConstRemapDx9& remap = s_constRemapDx9[ii];
|
||||
|
||||
if (remap.paramClass == constDesc.Class
|
||||
&& remap.paramType == constDesc.Type
|
||||
@ -130,31 +132,117 @@ ConstantType::Enum findConstantType(const D3DXCONSTANT_DESC& constDesc)
|
||||
return ConstantType::Count;
|
||||
}
|
||||
|
||||
static uint32_t s_optimizationLevel[4] =
|
||||
static uint32_t s_optimizationLevelDx9[4] =
|
||||
{
|
||||
D3DXSHADER_OPTIMIZATION_LEVEL0,
|
||||
D3DXSHADER_OPTIMIZATION_LEVEL1,
|
||||
D3DXSHADER_OPTIMIZATION_LEVEL2,
|
||||
D3DXSHADER_OPTIMIZATION_LEVEL3,
|
||||
};
|
||||
|
||||
struct ConstRemapDx11
|
||||
{
|
||||
ConstantType::Enum id;
|
||||
D3D_SHADER_VARIABLE_CLASS paramClass;
|
||||
D3D_SHADER_VARIABLE_TYPE paramType;
|
||||
uint32_t paramBytes;
|
||||
};
|
||||
|
||||
static const ConstRemapDx11 s_constRemapDx11[7] =
|
||||
{
|
||||
{ ConstantType::Uniform1iv, D3D_SVC_SCALAR, D3D_SVT_INT, 4 },
|
||||
{ ConstantType::Uniform1fv, D3D_SVC_SCALAR, D3D_SVT_FLOAT, 4 },
|
||||
{ ConstantType::Uniform2fv, D3D_SVC_VECTOR, D3D_SVT_FLOAT, 8 },
|
||||
{ ConstantType::Uniform3fv, D3D_SVC_VECTOR, D3D_SVT_FLOAT, 12 },
|
||||
{ ConstantType::Uniform4fv, D3D_SVC_VECTOR, D3D_SVT_FLOAT, 16 },
|
||||
{ ConstantType::Uniform3x3fv, D3D_SVC_MATRIX_COLUMNS, D3D_SVT_FLOAT, 36 },
|
||||
{ ConstantType::Uniform4x4fv, D3D_SVC_MATRIX_COLUMNS, D3D_SVT_FLOAT, 64 },
|
||||
};
|
||||
|
||||
ConstantType::Enum findConstantTypeDx11(const D3D11_SHADER_TYPE_DESC& constDesc, uint32_t _size)
|
||||
{
|
||||
uint32_t count = sizeof(s_constRemapDx11)/sizeof(ConstRemapDx9);
|
||||
for (uint32_t ii = 0; ii < count; ++ii)
|
||||
{
|
||||
const ConstRemapDx11& remap = s_constRemapDx11[ii];
|
||||
|
||||
if (remap.paramClass == constDesc.Class
|
||||
&& remap.paramType == constDesc.Type
|
||||
&& remap.paramBytes == _size)
|
||||
{
|
||||
return remap.id;
|
||||
}
|
||||
}
|
||||
|
||||
return ConstantType::Count;
|
||||
}
|
||||
|
||||
static uint32_t s_optimizationLevelDx11[4] =
|
||||
{
|
||||
D3DCOMPILE_OPTIMIZATION_LEVEL0,
|
||||
D3DCOMPILE_OPTIMIZATION_LEVEL1,
|
||||
D3DCOMPILE_OPTIMIZATION_LEVEL2,
|
||||
D3DCOMPILE_OPTIMIZATION_LEVEL3,
|
||||
};
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
|
||||
class Stream
|
||||
class IStreamWriter
|
||||
{
|
||||
public:
|
||||
Stream(FILE* _file, bool _bigEndian = false)
|
||||
: m_file(_file)
|
||||
virtual ~IStreamWriter() = 0;
|
||||
virtual bool open() = 0;
|
||||
virtual void close() = 0;
|
||||
virtual void writef(const char* _format, ...) = 0;
|
||||
virtual void write(const char* _str) = 0;
|
||||
virtual void write(const void* _data, size_t _size) = 0;
|
||||
|
||||
template<typename Ty>
|
||||
void write(Ty _value)
|
||||
{
|
||||
write(&_value, sizeof(Ty) );
|
||||
}
|
||||
|
||||
// template<typename Ty>
|
||||
// void write(Ty _value)
|
||||
// {
|
||||
// Ty temp = m_bigEndian ? bx::bigEndian<Ty>(_value) : _value;
|
||||
// write(&temp, sizeof(Ty) );
|
||||
// }
|
||||
};
|
||||
|
||||
IStreamWriter::~IStreamWriter()
|
||||
{
|
||||
}
|
||||
|
||||
class FileWriter : public IStreamWriter
|
||||
{
|
||||
public:
|
||||
FileWriter(const char* _filePath, bool _bigEndian = false)
|
||||
: m_filePath(_filePath)
|
||||
, m_file(NULL)
|
||||
, m_bigEndian(_bigEndian)
|
||||
{
|
||||
}
|
||||
|
||||
~Stream()
|
||||
~FileWriter()
|
||||
{
|
||||
}
|
||||
|
||||
bool open()
|
||||
{
|
||||
BX_CHECK(NULL == m_file, "Still open!");
|
||||
|
||||
m_file = fopen(m_filePath.c_str(), "wb");
|
||||
return NULL != m_file;
|
||||
}
|
||||
|
||||
void close()
|
||||
{
|
||||
m_file = NULL;
|
||||
if (NULL != m_file)
|
||||
{
|
||||
fclose(m_file);
|
||||
m_file = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void writef(const char* _format, ...)
|
||||
@ -188,16 +276,116 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Ty>
|
||||
void write(Ty _value)
|
||||
private:
|
||||
std::string m_filePath;
|
||||
FILE* m_file;
|
||||
bool m_bigEndian;
|
||||
};
|
||||
|
||||
class Bin2cStream : public IStreamWriter
|
||||
{
|
||||
public:
|
||||
Bin2cStream(const char* _filePath, const char* _name)
|
||||
: m_filePath(_filePath)
|
||||
, m_name(_name)
|
||||
, m_file(NULL)
|
||||
{
|
||||
Ty temp = m_bigEndian ? bx::bigEndian<Ty>(_value) : _value;
|
||||
write(&temp, sizeof(Ty) );
|
||||
}
|
||||
|
||||
~Bin2cStream()
|
||||
{
|
||||
}
|
||||
|
||||
bool open()
|
||||
{
|
||||
BX_CHECK(NULL == m_file, "Still open!");
|
||||
|
||||
m_file = fopen(m_filePath.c_str(), "wb");
|
||||
return NULL != m_file;
|
||||
}
|
||||
|
||||
void close()
|
||||
{
|
||||
if (NULL != m_file)
|
||||
{
|
||||
#define HEX_DUMP_WIDTH 16
|
||||
#define HEX_DUMP_SPACE_WIDTH 96
|
||||
#define HEX_DUMP_FORMAT "%-" BX_STRINGIZE(HEX_DUMP_SPACE_WIDTH) "." BX_STRINGIZE(HEX_DUMP_SPACE_WIDTH) "s"
|
||||
const uint8_t* data = &m_buffer[0];
|
||||
uint32_t size = m_buffer.size();
|
||||
|
||||
fprintf(m_file, "static const uint8_t %s[%d] =\n{\n", m_name.c_str(), size);
|
||||
|
||||
if (NULL != data)
|
||||
{
|
||||
char hex[HEX_DUMP_SPACE_WIDTH+1];
|
||||
char ascii[HEX_DUMP_WIDTH+1];
|
||||
uint32_t hexPos = 0;
|
||||
uint32_t asciiPos = 0;
|
||||
for (uint32_t ii = 0; ii < size; ++ii)
|
||||
{
|
||||
_snprintf(&hex[hexPos], sizeof(hex)-hexPos, "0x%02x, ", data[asciiPos]);
|
||||
hexPos += 6;
|
||||
|
||||
ascii[asciiPos] = isprint(data[asciiPos]) && data[asciiPos] != '\\' ? data[asciiPos] : '.';
|
||||
asciiPos++;
|
||||
|
||||
if (HEX_DUMP_WIDTH == asciiPos)
|
||||
{
|
||||
ascii[asciiPos] = '\0';
|
||||
fprintf(m_file, "\t" HEX_DUMP_FORMAT "// %s\n", hex, ascii);
|
||||
data += asciiPos;
|
||||
hexPos = 0;
|
||||
asciiPos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 != asciiPos)
|
||||
{
|
||||
ascii[asciiPos] = '\0';
|
||||
fprintf(m_file, "\t" HEX_DUMP_FORMAT "// %s\n", hex, ascii);
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(m_file, "};\n");
|
||||
#undef HEX_DUMP_WIDTH
|
||||
#undef HEX_DUMP_SPACE_WIDTH
|
||||
#undef HEX_DUMP_FORMAT
|
||||
|
||||
fclose(m_file);
|
||||
m_file = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void writef(const char* _format, ...)
|
||||
{
|
||||
va_list argList;
|
||||
va_start(argList, _format);
|
||||
|
||||
char temp[2048];
|
||||
int len = vsnprintf(temp, sizeof(temp), _format, argList);
|
||||
m_buffer.insert(m_buffer.end(), temp, temp+len);
|
||||
|
||||
va_end(argList);
|
||||
}
|
||||
|
||||
void write(const char* _str)
|
||||
{
|
||||
m_buffer.insert(m_buffer.end(), _str, _str+strlen(_str) );
|
||||
}
|
||||
|
||||
void write(const void* _data, size_t _size)
|
||||
{
|
||||
const char* data = (const char*)_data;
|
||||
m_buffer.insert(m_buffer.end(), data, data+_size);
|
||||
}
|
||||
|
||||
private:
|
||||
std::string m_filePath;
|
||||
std::string m_name;
|
||||
typedef std::vector<uint8_t> Buffer;
|
||||
Buffer m_buffer;
|
||||
FILE* m_file;
|
||||
bool m_bigEndian;
|
||||
};
|
||||
|
||||
class LineReader
|
||||
@ -266,7 +454,7 @@ void printCode(const char* _code)
|
||||
fprintf(stderr, "---\n");
|
||||
}
|
||||
|
||||
bool compileGLSLShader(CommandLine& _cmdLine, const std::string& _code, const char* _outFilePath)
|
||||
bool compileGLSLShader(CommandLine& _cmdLine, const std::string& _code, IStreamWriter& _stream)
|
||||
{
|
||||
const glslopt_shader_type type = tolower(_cmdLine.findOption('\0', "type")[0]) == 'f' ? kGlslOptShaderFragment : kGlslOptShaderVertex;
|
||||
|
||||
@ -284,40 +472,28 @@ bool compileGLSLShader(CommandLine& _cmdLine, const std::string& _code, const ch
|
||||
|
||||
const char* optimizedShader = glslopt_get_output(shader);
|
||||
|
||||
FILE* out = fopen(_outFilePath, "wb");
|
||||
if (NULL == out)
|
||||
{
|
||||
fprintf(stderr, "Unable to open output file '%s'.", _outFilePath);
|
||||
glslopt_cleanup(ctx);
|
||||
return false;
|
||||
}
|
||||
|
||||
Stream stream(out);
|
||||
|
||||
const char* profile = _cmdLine.findOption('p');
|
||||
if (NULL == profile)
|
||||
{
|
||||
stream.write("#ifdef GL_ES\n");
|
||||
stream.write("precision highp float;\n");
|
||||
stream.write("#endif // GL_ES\n\n");
|
||||
_stream.write("#ifdef GL_ES\n");
|
||||
_stream.write("precision highp float;\n");
|
||||
_stream.write("#endif // GL_ES\n\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
stream.writef("#version %s\n\n", profile);
|
||||
_stream.writef("#version %s\n\n", profile);
|
||||
}
|
||||
|
||||
stream.write(optimizedShader, strlen(optimizedShader) );
|
||||
_stream.write(optimizedShader, strlen(optimizedShader) );
|
||||
uint8_t nul = 0;
|
||||
stream.write(nul);
|
||||
stream.close();
|
||||
fclose(out);
|
||||
_stream.write(nul);
|
||||
|
||||
glslopt_cleanup(ctx);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool compileHLSLShader(CommandLine& _cmdLine, const std::string& _code, const char* _outFilePath)
|
||||
bool compileHLSLShaderDx9(CommandLine& _cmdLine, const std::string& _code, IStreamWriter& _stream)
|
||||
{
|
||||
#if BX_PLATFORM_WINDOWS
|
||||
const char* profile = _cmdLine.findOption('p');
|
||||
@ -342,8 +518,8 @@ bool compileHLSLShader(CommandLine& _cmdLine, const std::string& _code, const ch
|
||||
uint32_t optimization = 3;
|
||||
if (_cmdLine.hasArg(optimization, 'O') )
|
||||
{
|
||||
optimization = bx::uint32_min(optimization, countof(s_optimizationLevel)-1);
|
||||
flags |= s_optimizationLevel[optimization];
|
||||
optimization = bx::uint32_min(optimization, countof(s_optimizationLevelDx9)-1);
|
||||
flags |= s_optimizationLevelDx9[optimization];
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -411,7 +587,7 @@ bool compileHLSLShader(CommandLine& _cmdLine, const std::string& _code, const ch
|
||||
, constDesc.RegisterCount
|
||||
);
|
||||
|
||||
ConstantType::Enum type = findConstantType(constDesc);
|
||||
ConstantType::Enum type = findConstantTypeDx9(constDesc);
|
||||
if (ConstantType::Count != type)
|
||||
{
|
||||
Uniform un;
|
||||
@ -424,29 +600,20 @@ bool compileHLSLShader(CommandLine& _cmdLine, const std::string& _code, const ch
|
||||
}
|
||||
}
|
||||
|
||||
FILE* out = fopen(_outFilePath, "wb");
|
||||
if (NULL == out)
|
||||
{
|
||||
fprintf(stderr, "Unable to open output file '%s'.", _outFilePath);
|
||||
return false;
|
||||
}
|
||||
|
||||
Stream stream(out, bigEndian);
|
||||
|
||||
uint16_t count = (uint16_t)uniforms.size();
|
||||
stream.write(count);
|
||||
_stream.write(count);
|
||||
|
||||
uint32_t fragmentBit = profile[0] == 'p' ? ConstantType::FragmentBit : 0;
|
||||
for (UniformArray::const_iterator it = uniforms.begin(); it != uniforms.end(); ++it)
|
||||
{
|
||||
const Uniform& un = *it;
|
||||
uint8_t nameSize = (uint8_t)un.name.size();
|
||||
stream.write(nameSize);
|
||||
stream.write(un.name.c_str(), nameSize);
|
||||
stream.write<uint8_t>(un.type|fragmentBit);
|
||||
stream.write(un.num);
|
||||
stream.write(un.regIndex);
|
||||
stream.write(un.regCount);
|
||||
_stream.write(nameSize);
|
||||
_stream.write(un.name.c_str(), nameSize);
|
||||
_stream.write<uint8_t>(un.type|fragmentBit);
|
||||
_stream.write(un.num);
|
||||
_stream.write(un.regIndex);
|
||||
_stream.write(un.regCount);
|
||||
|
||||
BX_TRACE("%s, %s, %d, %d, %d"
|
||||
, un.name.c_str()
|
||||
@ -458,12 +625,10 @@ bool compileHLSLShader(CommandLine& _cmdLine, const std::string& _code, const ch
|
||||
}
|
||||
|
||||
uint16_t shaderSize = (uint16_t)code->GetBufferSize();
|
||||
stream.write(shaderSize);
|
||||
stream.write(code->GetBufferPointer(), shaderSize);
|
||||
_stream.write(shaderSize);
|
||||
_stream.write(code->GetBufferPointer(), shaderSize);
|
||||
uint8_t nul = 0;
|
||||
stream.write(nul);
|
||||
stream.close();
|
||||
fclose(out);
|
||||
_stream.write(nul);
|
||||
|
||||
if (NULL != code)
|
||||
{
|
||||
@ -487,6 +652,231 @@ bool compileHLSLShader(CommandLine& _cmdLine, const std::string& _code, const ch
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
}
|
||||
|
||||
bool compileHLSLShaderDx11(CommandLine& _cmdLine, const std::string& _code, IStreamWriter& _stream)
|
||||
{
|
||||
#if BX_PLATFORM_WINDOWS
|
||||
const char* profile = _cmdLine.findOption('p');
|
||||
if (NULL == profile)
|
||||
{
|
||||
printf("Shader profile must be specified.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool bigEndian = _cmdLine.hasArg('\0', "xbox360");
|
||||
|
||||
uint32_t flags = D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY;
|
||||
flags |= _cmdLine.hasArg('\0', "debug") ? D3DCOMPILE_DEBUG : 0;
|
||||
flags |= _cmdLine.hasArg('\0', "avoid-flow-control") ? D3DCOMPILE_AVOID_FLOW_CONTROL : 0;
|
||||
flags |= _cmdLine.hasArg('\0', "no-preshader") ? D3DCOMPILE_NO_PRESHADER : 0;
|
||||
flags |= _cmdLine.hasArg('\0', "partial-precision") ? D3DCOMPILE_PARTIAL_PRECISION : 0;
|
||||
flags |= _cmdLine.hasArg('\0', "prefer-flow-control") ? D3DCOMPILE_PREFER_FLOW_CONTROL : 0;
|
||||
flags |= _cmdLine.hasArg('\0', "backwards-compatibility") ? D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY : 0;
|
||||
|
||||
bool werror = _cmdLine.hasArg('\0', "Werror");
|
||||
|
||||
if (werror)
|
||||
{
|
||||
flags |= D3DCOMPILE_WARNINGS_ARE_ERRORS;
|
||||
}
|
||||
|
||||
uint32_t optimization = 3;
|
||||
if (_cmdLine.hasArg(optimization, 'O') )
|
||||
{
|
||||
optimization = bx::uint32_min(optimization, countof(s_optimizationLevelDx11)-1);
|
||||
flags |= s_optimizationLevelDx11[optimization];
|
||||
}
|
||||
else
|
||||
{
|
||||
flags |= D3DCOMPILE_SKIP_OPTIMIZATION;
|
||||
}
|
||||
|
||||
BX_TRACE("Profile: %s", profile);
|
||||
BX_TRACE("Flags: 0x%08x", flags);
|
||||
BX_TRACE("Big Endian: %s", bigEndian?"true":"false");
|
||||
|
||||
ID3DBlob* code;
|
||||
ID3DBlob* errorMsg;
|
||||
|
||||
HRESULT hr = D3DCompile(_code.c_str()
|
||||
, _code.size()
|
||||
, NULL
|
||||
, NULL
|
||||
, NULL
|
||||
, "main"
|
||||
, profile
|
||||
, flags
|
||||
, 0
|
||||
, &code
|
||||
, &errorMsg
|
||||
);
|
||||
if (FAILED(hr)
|
||||
|| werror && NULL != errorMsg)
|
||||
{
|
||||
printCode(_code.c_str() );
|
||||
fprintf(stderr, BX_FILE_LINE_LITERAL "Error: 0x%08x %s\n", hr, errorMsg->GetBufferPointer() );
|
||||
return false;
|
||||
}
|
||||
|
||||
UniformArray uniforms;
|
||||
|
||||
ID3D11ShaderReflection* reflect = NULL;
|
||||
hr = D3DReflect(code->GetBufferPointer()
|
||||
, code->GetBufferSize()
|
||||
, IID_ID3D11ShaderReflection
|
||||
, (void**)&reflect
|
||||
);
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
fprintf(stderr, BX_FILE_LINE_LITERAL "Error: 0x%08x\n", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
D3D11_SHADER_DESC desc;
|
||||
hr = reflect->GetDesc(&desc);
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
fprintf(stderr, BX_FILE_LINE_LITERAL "Error: 0x%08x\n", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
BX_TRACE("Creator: %s 0x%08x", desc.Creator, desc.Version);
|
||||
BX_TRACE("Num constant buffers: %d", desc.ConstantBuffers);
|
||||
BX_TRACE("# cl ty RxC S By Name");
|
||||
|
||||
// bx::HashMurmur2A hash;
|
||||
// hash.begin();
|
||||
|
||||
BX_TRACE("Input:");
|
||||
for (uint32_t ii = 0; ii < desc.InputParameters; ++ii)
|
||||
{
|
||||
D3D11_SIGNATURE_PARAMETER_DESC spd;
|
||||
reflect->GetInputParameterDesc(ii, &spd);
|
||||
BX_TRACE("\t%2d: %s%d, %d, %d", ii, spd.SemanticName, spd.SemanticIndex, spd.SystemValueType, spd.ComponentType);
|
||||
// hash.add(inputSignature->GetBufferPointer(), inputSignature->GetBufferSize() );
|
||||
}
|
||||
|
||||
BX_TRACE("Output:");
|
||||
for (uint32_t ii = 0; ii < desc.OutputParameters; ++ii)
|
||||
{
|
||||
D3D11_SIGNATURE_PARAMETER_DESC spd;
|
||||
reflect->GetOutputParameterDesc(ii, &spd);
|
||||
BX_TRACE("\t%2d: %s%d, %d, %d", ii, spd.SemanticName, spd.SemanticIndex, spd.SystemValueType, spd.ComponentType);
|
||||
// hash.add(inputSignature->GetBufferPointer(), inputSignature->GetBufferSize() );
|
||||
}
|
||||
// uint32_t inputSignatureHash = hash.end();
|
||||
|
||||
uint16_t size = 0;
|
||||
|
||||
for (uint32_t ii = 0; ii < bx::uint32_min(1, desc.ConstantBuffers); ++ii)
|
||||
{
|
||||
ID3D11ShaderReflectionConstantBuffer* cbuffer = reflect->GetConstantBufferByIndex(ii);
|
||||
D3D11_SHADER_BUFFER_DESC bufferDesc;
|
||||
hr = cbuffer->GetDesc(&bufferDesc);
|
||||
|
||||
size = (uint16_t)bufferDesc.Size;
|
||||
|
||||
if (SUCCEEDED(hr) )
|
||||
{
|
||||
BX_TRACE("%s, %d, vars %d, size %d"
|
||||
, bufferDesc.Name
|
||||
, bufferDesc.Type
|
||||
, bufferDesc.Variables
|
||||
, bufferDesc.Size
|
||||
);
|
||||
|
||||
for (uint32_t jj = 0; jj < bufferDesc.Variables; ++jj)
|
||||
{
|
||||
ID3D11ShaderReflectionVariable* var = cbuffer->GetVariableByIndex(jj);
|
||||
ID3D11ShaderReflectionType* type = var->GetType();
|
||||
D3D11_SHADER_VARIABLE_DESC varDesc;
|
||||
hr = var->GetDesc(&varDesc);
|
||||
if (SUCCEEDED(hr) )
|
||||
{
|
||||
D3D11_SHADER_TYPE_DESC constDesc;
|
||||
hr = type->GetDesc(&constDesc);
|
||||
if (SUCCEEDED(hr) )
|
||||
{
|
||||
ConstantType::Enum type = findConstantTypeDx11(constDesc, varDesc.Size);
|
||||
|
||||
if (ConstantType::Count != type
|
||||
&& 0 != (varDesc.uFlags & D3D10_SVF_USED) )
|
||||
{
|
||||
Uniform un;
|
||||
un.name = varDesc.Name;
|
||||
un.type = type;
|
||||
un.num = constDesc.Elements;
|
||||
un.regIndex = varDesc.StartOffset;
|
||||
un.regCount = varDesc.Size;
|
||||
uniforms.push_back(un);
|
||||
|
||||
BX_TRACE("\t%s, %d, size %d, flags 0x%08x, %d"
|
||||
, varDesc.Name
|
||||
, varDesc.StartOffset
|
||||
, varDesc.Size
|
||||
, varDesc.uFlags
|
||||
, type
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t count = (uint16_t)uniforms.size();
|
||||
_stream.write(count);
|
||||
|
||||
_stream.write(size);
|
||||
|
||||
uint32_t fragmentBit = profile[0] == 'p' ? ConstantType::FragmentBit : 0;
|
||||
for (UniformArray::const_iterator it = uniforms.begin(); it != uniforms.end(); ++it)
|
||||
{
|
||||
const Uniform& un = *it;
|
||||
uint8_t nameSize = (uint8_t)un.name.size();
|
||||
_stream.write(nameSize);
|
||||
_stream.write(un.name.c_str(), nameSize);
|
||||
_stream.write<uint8_t>(un.type|fragmentBit);
|
||||
_stream.write(un.num);
|
||||
_stream.write(un.regIndex);
|
||||
_stream.write(un.regCount);
|
||||
|
||||
BX_TRACE("%s, %s, %d, %d, %d"
|
||||
, un.name.c_str()
|
||||
, s_constantTypeName[un.type]
|
||||
, un.num
|
||||
, un.regIndex
|
||||
, un.regCount
|
||||
);
|
||||
}
|
||||
|
||||
uint16_t shaderSize = (uint16_t)code->GetBufferSize();
|
||||
_stream.write(shaderSize);
|
||||
_stream.write(code->GetBufferPointer(), shaderSize);
|
||||
uint8_t nul = 0;
|
||||
_stream.write(nul);
|
||||
|
||||
if (NULL != reflect)
|
||||
{
|
||||
reflect->Release();
|
||||
}
|
||||
|
||||
if (NULL != code)
|
||||
{
|
||||
code->Release();
|
||||
}
|
||||
|
||||
if (NULL != errorMsg)
|
||||
{
|
||||
errorMsg->Release();
|
||||
}
|
||||
|
||||
return true;
|
||||
#else
|
||||
fprintf(stderr, "HLSL compiler is not supported on this platform.\n");
|
||||
return false;
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
}
|
||||
|
||||
struct Preprocessor
|
||||
{
|
||||
Preprocessor(const char* _filePath)
|
||||
@ -653,6 +1043,20 @@ struct Preprocessor
|
||||
uint32_t m_fgetsPos;
|
||||
};
|
||||
|
||||
const char* baseName(const char* _filePath)
|
||||
{
|
||||
const char* bs = strrchr(_filePath, '\\');
|
||||
const char* fs = strrchr(_filePath, '/');
|
||||
const char* column = strrchr(_filePath, ':');
|
||||
const char* basename = std::max(std::max(bs, fs), column);
|
||||
if (NULL != basename)
|
||||
{
|
||||
return basename+1;
|
||||
}
|
||||
|
||||
return _filePath;
|
||||
}
|
||||
|
||||
// OpenGL #version Features Direct3D Features Shader Model
|
||||
// 2.1 120 vf 9.0 vf 2.0
|
||||
// 3.0 130
|
||||
@ -695,6 +1099,33 @@ int main(int _argc, const char* _argv[])
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
const char* bin2c = NULL;
|
||||
if (cmdLine.hasArg("bin2c") )
|
||||
{
|
||||
bin2c = cmdLine.findOption("bin2c");
|
||||
if (NULL == bin2c)
|
||||
{
|
||||
bin2c = baseName(outFilePath);
|
||||
uint32_t len = strlen(bin2c);
|
||||
char* temp = (char*)alloca(len+1);
|
||||
for (char *out = temp; *bin2c != '\0';)
|
||||
{
|
||||
char ch = *bin2c++;
|
||||
if (isalnum(ch) )
|
||||
{
|
||||
*out++ = ch;
|
||||
}
|
||||
else
|
||||
{
|
||||
*out++ = '_';
|
||||
}
|
||||
}
|
||||
temp[len] = '\0';
|
||||
|
||||
bin2c = temp;
|
||||
}
|
||||
}
|
||||
|
||||
bool depends = cmdLine.hasArg("depends");
|
||||
bool preprocessOnly = cmdLine.hasArg("preprocess");
|
||||
|
||||
@ -782,14 +1213,14 @@ int main(int _argc, const char* _argv[])
|
||||
|
||||
if (preprocessOnly)
|
||||
{
|
||||
FILE* out = fopen(outFilePath, "wb");
|
||||
if (NULL == out)
|
||||
FileWriter stream(outFilePath);
|
||||
|
||||
if (!stream.open() )
|
||||
{
|
||||
fprintf(stderr, "Unable to open output file '%s'.", outFilePath);
|
||||
return false;
|
||||
}
|
||||
|
||||
Stream stream(out);
|
||||
if (glsl)
|
||||
{
|
||||
const char* profile = cmdLine.findOption('p');
|
||||
@ -806,20 +1237,50 @@ int main(int _argc, const char* _argv[])
|
||||
}
|
||||
stream.write(preprocessor.m_preprocessed.c_str(), preprocessor.m_preprocessed.size() );
|
||||
stream.close();
|
||||
fclose(out);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
bool compiled = false;
|
||||
|
||||
if (glsl)
|
||||
{
|
||||
compiled = compileGLSLShader(cmdLine, preprocessor.m_preprocessed, outFilePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
compiled = compileHLSLShader(cmdLine, preprocessor.m_preprocessed, outFilePath);
|
||||
IStreamWriter* stream = NULL;
|
||||
|
||||
if (NULL != bin2c)
|
||||
{
|
||||
stream = new Bin2cStream(outFilePath, bin2c);
|
||||
}
|
||||
else
|
||||
{
|
||||
stream = new FileWriter(outFilePath);
|
||||
}
|
||||
|
||||
if (!stream->open() )
|
||||
{
|
||||
fprintf(stderr, "Unable to open output file '%s'.", outFilePath);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (glsl)
|
||||
{
|
||||
compiled = compileGLSLShader(cmdLine, preprocessor.m_preprocessed, *stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* profile = cmdLine.findOption('p');
|
||||
if (0 == strncmp(&profile[1], "s_4", 3)
|
||||
|| 0 == strncmp(&profile[1], "s_5", 3) )
|
||||
{
|
||||
compiled = compileHLSLShaderDx11(cmdLine, preprocessor.m_preprocessed, *stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
compiled = compileHLSLShaderDx9(cmdLine, preprocessor.m_preprocessed, *stream);
|
||||
}
|
||||
}
|
||||
|
||||
stream->close();
|
||||
delete stream;
|
||||
}
|
||||
|
||||
if (compiled
|
||||
@ -827,19 +1288,18 @@ int main(int _argc, const char* _argv[])
|
||||
{
|
||||
std::string ofp = outFilePath;
|
||||
ofp += ".d";
|
||||
FILE* out = fopen(ofp.c_str(), "wb");
|
||||
if (NULL != out)
|
||||
FileWriter stream(ofp.c_str() );
|
||||
if (stream.open() )
|
||||
{
|
||||
Stream stream(out);
|
||||
stream.write(outFilePath);
|
||||
stream.write(":");
|
||||
stream.write(preprocessor.m_depends.c_str() );
|
||||
stream.write("\n");
|
||||
stream.close();
|
||||
fclose(out);
|
||||
}
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
fprintf(stderr, "Failed to build shader.\n");
|
||||
|
Loading…
Reference in New Issue
Block a user