mirror of https://github.com/bkaradzic/bgfx
D3D12: Skip patching DXBC with Aon9 chunk.
This commit is contained in:
parent
f3e4d83540
commit
3afc13e521
|
@ -747,10 +747,10 @@ namespace bgfx { namespace d3d11
|
|||
|
||||
#if USE_D3D11_DYNAMIC_LIB
|
||||
m_d3d11dll = bx::dlopen("d3d11.dll");
|
||||
BX_WARN(NULL != m_d3d11dll, "Failed to load d3d11.dll.");
|
||||
|
||||
if (NULL == m_d3d11dll)
|
||||
{
|
||||
BX_TRACE("Failed to load d3d11.dll.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -777,25 +777,25 @@ namespace bgfx { namespace d3d11
|
|||
}
|
||||
|
||||
D3D11CreateDevice = (PFN_D3D11_CREATE_DEVICE)bx::dlsym(m_d3d11dll, "D3D11CreateDevice");
|
||||
BX_WARN(NULL != D3D11CreateDevice, "Function D3D11CreateDevice not found.");
|
||||
if (NULL == D3D11CreateDevice)
|
||||
{
|
||||
BX_TRACE("Function D3D11CreateDevice not found.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
m_dxgidll = bx::dlopen("dxgi.dll");
|
||||
BX_WARN(NULL != m_dxgidll, "Failed to load dxgi.dll.");
|
||||
if (NULL == m_dxgidll)
|
||||
{
|
||||
BX_TRACE("Failed to load dxgi.dll.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
errorState = ErrorState::LoadedDXGI;
|
||||
|
||||
CreateDXGIFactory = (PFN_CREATE_DXGI_FACTORY)bx::dlsym(m_dxgidll, "CreateDXGIFactory");
|
||||
BX_WARN(NULL != CreateDXGIFactory, "Function CreateDXGIFactory not found.");
|
||||
if (NULL == CreateDXGIFactory)
|
||||
{
|
||||
BX_TRACE("Function CreateDXGIFactory not found.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -828,9 +828,9 @@ namespace bgfx { namespace d3d11
|
|||
hr = S_OK;
|
||||
factory = NULL;
|
||||
#endif // BX_PLATFORM_*
|
||||
BX_WARN(SUCCEEDED(hr), "Unable to create DXGI factory.");
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
BX_TRACE("Unable to create DXGI factory.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -910,8 +910,10 @@ namespace bgfx { namespace d3d11
|
|||
D3D_FEATURE_LEVEL_11_0,
|
||||
D3D_FEATURE_LEVEL_10_1,
|
||||
D3D_FEATURE_LEVEL_10_0,
|
||||
#if BX_PLATFORM_WINRT
|
||||
D3D_FEATURE_LEVEL_9_3,
|
||||
D3D_FEATURE_LEVEL_9_2,
|
||||
#endif // BX_PLATFORM_WINRT
|
||||
};
|
||||
|
||||
for (;;)
|
||||
|
@ -965,10 +967,10 @@ namespace bgfx { namespace d3d11
|
|||
|
||||
break;
|
||||
}
|
||||
BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 device.");
|
||||
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
BX_TRACE("Unable to create Direct3D11 device.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -980,10 +982,10 @@ namespace bgfx { namespace d3d11
|
|||
else
|
||||
{
|
||||
m_device->GetImmediateContext(&m_deviceCtx);
|
||||
BX_WARN(NULL != m_deviceCtx, "Unable to create Direct3D11 device.");
|
||||
|
||||
if (NULL == m_deviceCtx)
|
||||
{
|
||||
BX_TRACE("Unable to create Direct3D11 device.");
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
@ -1020,9 +1022,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
|||
}
|
||||
}
|
||||
|
||||
BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 device.");
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
BX_TRACE("Unable to create Direct3D11 device.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -1045,9 +1047,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
|||
}
|
||||
|
||||
hr = adapter->GetDesc(&m_adapterDesc);
|
||||
BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 device.");
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
BX_TRACE("Unable to create Direct3D11 device.");
|
||||
DX_RELEASE(adapter, 2);
|
||||
goto error;
|
||||
}
|
||||
|
@ -1062,10 +1064,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
|||
{
|
||||
#if !BX_PLATFORM_WINDOWS
|
||||
hr = adapter->GetParent(__uuidof(IDXGIFactory2), (void**)&m_factory);
|
||||
BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 device.");
|
||||
DX_RELEASE(adapter, 2);
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
BX_TRACE("Unable to create Direct3D11 device.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -1122,10 +1124,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
|||
}
|
||||
#else
|
||||
hr = adapter->GetParent(IID_IDXGIFactory, (void**)&m_factory);
|
||||
BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 device.");
|
||||
DX_RELEASE(adapter, 2);
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
BX_TRACE("Unable to create Direct3D11 device.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -1152,9 +1154,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
|||
| DXGI_MWA_NO_ALT_ENTER
|
||||
) );
|
||||
#endif // BX_PLATFORM_*
|
||||
BX_WARN(SUCCEEDED(hr), "Failed to create swap chain.");
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
BX_TRACE("Failed to create swap chain.");
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
@ -1867,9 +1869,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
|||
|
||||
void saveScreenShot(const char* _filePath) BX_OVERRIDE
|
||||
{
|
||||
BX_WARN(NULL != m_swapChain, "Unable to capture screenshot %s.", _filePath);
|
||||
if (NULL == m_swapChain)
|
||||
{
|
||||
BX_TRACE("Unable to capture screenshot %s.", _filePath);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5722,8 +5724,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
|||
tvm.clear();
|
||||
uint16_t pos = 0;
|
||||
tvm.printf(0, pos++, BGFX_CONFIG_DEBUG ? 0x89 : 0x8f
|
||||
, " %s / " BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME " "
|
||||
, " %s (FL %d.%d) / " BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME " "
|
||||
, getRendererName()
|
||||
, (m_featureLevel >> 12) & 0xf
|
||||
, (m_featureLevel >> 8) & 0xf
|
||||
);
|
||||
|
||||
const DXGI_ADAPTER_DESC& desc = m_adapterDesc;
|
||||
|
|
|
@ -457,7 +457,11 @@ namespace bgfx { namespace d3d12
|
|||
struct RendererContextD3D12 : public RendererContextI
|
||||
{
|
||||
RendererContextD3D12()
|
||||
: m_wireframe(false)
|
||||
: m_d3d12dll(NULL)
|
||||
, m_dxgidll(NULL)
|
||||
, m_renderdocdll(NULL)
|
||||
, m_featureLevel(D3D_FEATURE_LEVEL(0) )
|
||||
, m_wireframe(false)
|
||||
, m_maxAnisotropy(1)
|
||||
, m_depthClamp(false)
|
||||
, m_fsChanges(0)
|
||||
|
@ -660,12 +664,13 @@ namespace bgfx { namespace d3d12
|
|||
, (featureLevel[ii] >> 12) & 0xf
|
||||
, (featureLevel[ii] >> 8) & 0xf
|
||||
);
|
||||
m_featureLevel = featureLevel[ii];
|
||||
}
|
||||
BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D12 device.");
|
||||
}
|
||||
|
||||
if (FAILED(hr) )
|
||||
{
|
||||
BX_TRACE("Unable to create Direct3D12 device.");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -2261,8 +2266,9 @@ data.NumQualityLevels = 0;
|
|||
bx::Error err;
|
||||
read(&rd, dxbc, &err);
|
||||
|
||||
bool patchShader = true;
|
||||
if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
|
||||
bool patchShader = !dxbc.shader.aon9;
|
||||
if (BX_ENABLED(BGFX_CONFIG_DEBUG)
|
||||
&& patchShader)
|
||||
{
|
||||
union { uint32_t offset; void* ptr; } cast = { 0 };
|
||||
filter(dxbc.shader, dxbc.shader, patchCb0, cast.ptr);
|
||||
|
@ -2307,6 +2313,11 @@ data.NumQualityLevels = 0;
|
|||
desc.PS.pShaderBytecode = temp->data;
|
||||
desc.PS.BytecodeLength = temp->size;
|
||||
}
|
||||
else
|
||||
{
|
||||
desc.PS.pShaderBytecode = program.m_fsh->m_code->data;
|
||||
desc.PS.BytecodeLength = program.m_fsh->m_code->size;
|
||||
}
|
||||
|
||||
desc.DS.pShaderBytecode = NULL;
|
||||
desc.DS.BytecodeLength = 0;
|
||||
|
@ -2643,6 +2654,9 @@ data.NumQualityLevels = 0;
|
|||
void* m_kernel32dll;
|
||||
void* m_d3d12dll;
|
||||
void* m_dxgidll;
|
||||
void* m_renderdocdll;
|
||||
|
||||
D3D_FEATURE_LEVEL m_featureLevel;
|
||||
|
||||
D3D_DRIVER_TYPE m_driverType;
|
||||
DXGI_ADAPTER_DESC m_adapterDesc;
|
||||
|
@ -5273,8 +5287,10 @@ data.NumQualityLevels = 0;
|
|||
tvm.clear();
|
||||
uint16_t pos = 0;
|
||||
tvm.printf(0, pos++, BGFX_CONFIG_DEBUG ? 0x89 : 0x8f
|
||||
, " %s / " BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME " "
|
||||
, " %s (FL %d.%d) / " BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME " "
|
||||
, getRendererName()
|
||||
, (m_featureLevel >> 12) & 0xf
|
||||
, (m_featureLevel >> 8) & 0xf
|
||||
);
|
||||
|
||||
const DXGI_ADAPTER_DESC& desc = m_adapterDesc;
|
||||
|
|
|
@ -282,9 +282,9 @@ namespace bgfx
|
|||
size += bx::read(_reader, token, _err);
|
||||
|
||||
_subOperand.type = Dx9bcOperandType::Enum( ( (token & UINT32_C(0x70000000) ) >> 28)
|
||||
| ( (token & UINT32_C(0x00001800) ) >> 8) );
|
||||
| ( (token & UINT32_C(0x00001800) ) >> 8) );
|
||||
_subOperand.regIndex = (token & UINT32_C(0x000007ff) );
|
||||
_subOperand.swizzleBits = uint8_t( (token & UINT32_C(0x00ff0000) ) >> 16);
|
||||
_subOperand.swizzleBits = uint8_t( (token & UINT32_C(0x00ff0000) ) >> 16);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
@ -741,7 +741,7 @@ namespace bgfx
|
|||
|
||||
_fn(instruction, _userData);
|
||||
|
||||
write(&writer, instruction);
|
||||
write(&writer, instruction, _err);
|
||||
|
||||
token += instruction.length;
|
||||
}
|
||||
|
|
|
@ -187,6 +187,8 @@ namespace bgfx
|
|||
|
||||
struct Dx9bcSubOperand
|
||||
{
|
||||
Dx9bcSubOperand() { /* not pod */ }
|
||||
|
||||
Dx9bcOperandType::Enum type;
|
||||
uint32_t regIndex;
|
||||
uint8_t swizzleBits;
|
||||
|
@ -194,6 +196,8 @@ namespace bgfx
|
|||
|
||||
struct Dx9bcOperand
|
||||
{
|
||||
Dx9bcOperand() { /* not pod */ }
|
||||
|
||||
Dx9bcOperandType::Enum type;
|
||||
uint32_t regIndex;
|
||||
|
||||
|
@ -214,6 +218,8 @@ namespace bgfx
|
|||
|
||||
struct Dx9bcInstruction
|
||||
{
|
||||
Dx9bcInstruction() { /* not pod */ }
|
||||
|
||||
Dx9bcOpcode::Enum opcode;
|
||||
uint16_t length;
|
||||
uint8_t numOperands;
|
||||
|
@ -232,6 +238,8 @@ namespace bgfx
|
|||
|
||||
struct Dx9bcShader
|
||||
{
|
||||
Dx9bcShader() { /* not pod */ }
|
||||
|
||||
stl::vector<uint8_t> byteCode;
|
||||
};
|
||||
|
||||
|
@ -240,6 +248,8 @@ namespace bgfx
|
|||
|
||||
struct Dx9bc
|
||||
{
|
||||
Dx9bc() { /* not pod */ }
|
||||
|
||||
uint32_t version;
|
||||
Dx9bcShader shader;
|
||||
};
|
||||
|
|
|
@ -790,7 +790,7 @@ namespace bgfx
|
|||
case DxbcOperandAddrMode::Reg:
|
||||
{
|
||||
DxbcSubOperand subOperand;
|
||||
size += read(_reader, subOperand);
|
||||
size += read(_reader, subOperand, _err);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -799,7 +799,7 @@ namespace bgfx
|
|||
size += bx::read(_reader, _subOperand.regIndex, _err);
|
||||
|
||||
DxbcSubOperand subOperand;
|
||||
size += read(_reader, subOperand);
|
||||
size += read(_reader, subOperand, _err);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -809,7 +809,7 @@ namespace bgfx
|
|||
size += bx::read(_reader, _subOperand.regIndex, _err);
|
||||
|
||||
DxbcSubOperand subOperand;
|
||||
size += read(_reader, subOperand);
|
||||
size += read(_reader, subOperand, _err);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -843,7 +843,7 @@ namespace bgfx
|
|||
case DxbcOperandAddrMode::Reg:
|
||||
{
|
||||
DxbcSubOperand subOperand;
|
||||
size += write(_writer, subOperand);
|
||||
size += write(_writer, subOperand, _err);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -852,7 +852,7 @@ namespace bgfx
|
|||
size += bx::write(_writer, _subOperand.regIndex, _err);
|
||||
|
||||
DxbcSubOperand subOperand;
|
||||
size += write(_writer, subOperand);
|
||||
size += write(_writer, subOperand, _err);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -862,7 +862,7 @@ namespace bgfx
|
|||
size += bx::write(_writer, _subOperand.regIndex, _err);
|
||||
|
||||
DxbcSubOperand subOperand;
|
||||
size += write(_writer, subOperand);
|
||||
size += write(_writer, subOperand, _err);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1747,6 +1747,7 @@ namespace bgfx
|
|||
int32_t size = 0;
|
||||
size += bx::read(_reader, _dxbc.header, _err);
|
||||
_dxbc.shader.shex = false;
|
||||
_dxbc.shader.aon9 = false;
|
||||
|
||||
for (uint32_t ii = 0; ii < _dxbc.header.numChunks; ++ii)
|
||||
{
|
||||
|
@ -1785,6 +1786,9 @@ namespace bgfx
|
|||
break;
|
||||
|
||||
case BX_MAKEFOURCC('A', 'o', 'n', '9'): // Contains DX9BC for feature level 9.x (*s_4_0_level_9_*) shaders.
|
||||
_dxbc.shader.aon9 = true;
|
||||
break;
|
||||
|
||||
case BX_MAKEFOURCC('I', 'F', 'C', 'E'): // Interface.
|
||||
case BX_MAKEFOURCC('R', 'D', 'E', 'F'): // Resource definition.
|
||||
case BX_MAKEFOURCC('S', 'D', 'G', 'B'): // Shader debugging info (old).
|
||||
|
|
|
@ -448,6 +448,8 @@ namespace bgfx
|
|||
|
||||
struct DxbcSubOperand
|
||||
{
|
||||
DxbcSubOperand() { /* not pod */ }
|
||||
|
||||
DxbcOperandType::Enum type;
|
||||
uint8_t mode;
|
||||
uint8_t modeBits;
|
||||
|
@ -459,6 +461,8 @@ namespace bgfx
|
|||
|
||||
struct DxbcOperand
|
||||
{
|
||||
DxbcOperand() { /* not pod */ }
|
||||
|
||||
DxbcOperandType::Enum type;
|
||||
DxbcOperandMode::Enum mode;
|
||||
uint8_t modeBits;
|
||||
|
@ -480,6 +484,8 @@ namespace bgfx
|
|||
|
||||
struct DxbcInstruction
|
||||
{
|
||||
DxbcInstruction() { /* not pod */ }
|
||||
|
||||
struct ExtendedType
|
||||
{
|
||||
enum Enum
|
||||
|
@ -546,6 +552,8 @@ namespace bgfx
|
|||
|
||||
struct DxbcSignature
|
||||
{
|
||||
DxbcSignature() { /* not pod */ }
|
||||
|
||||
struct Element
|
||||
{
|
||||
stl::string name;
|
||||
|
@ -570,6 +578,7 @@ namespace bgfx
|
|||
uint32_t version;
|
||||
stl::vector<uint8_t> byteCode;
|
||||
bool shex;
|
||||
bool aon9;
|
||||
};
|
||||
|
||||
int32_t read(bx::ReaderSeekerI* _reader, DxbcShader& _shader, bx::Error* _err);
|
||||
|
|
|
@ -524,6 +524,8 @@ namespace bgfx
|
|||
|
||||
struct SpvOperand
|
||||
{
|
||||
SpvOperand() { /* not pod */ }
|
||||
|
||||
enum Enum
|
||||
{
|
||||
AccessQualifier,
|
||||
|
@ -575,6 +577,8 @@ namespace bgfx
|
|||
|
||||
struct SpvInstruction
|
||||
{
|
||||
SpvInstruction() { /* not pod */ }
|
||||
|
||||
SpvOpcode::Enum opcode;
|
||||
uint16_t length;
|
||||
uint16_t numOperands;
|
||||
|
@ -593,6 +597,8 @@ namespace bgfx
|
|||
|
||||
struct SpvShader
|
||||
{
|
||||
SpvShader() { /* not pod */ }
|
||||
|
||||
stl::vector<uint8_t> byteCode;
|
||||
};
|
||||
|
||||
|
@ -607,6 +613,8 @@ namespace bgfx
|
|||
|
||||
struct SpirV
|
||||
{
|
||||
SpirV() { /* not pod */ }
|
||||
|
||||
struct Header
|
||||
{
|
||||
uint32_t magic;
|
||||
|
|
Loading…
Reference in New Issue