diff options
Diffstat (limited to '3rdparty/bgfx/src/shader_dxbc.cpp')
-rw-r--r-- | 3rdparty/bgfx/src/shader_dxbc.cpp | 340 |
1 files changed, 278 insertions, 62 deletions
diff --git a/3rdparty/bgfx/src/shader_dxbc.cpp b/3rdparty/bgfx/src/shader_dxbc.cpp index 49da315b3e9..6f27ff7d2a3 100644 --- a/3rdparty/bgfx/src/shader_dxbc.cpp +++ b/3rdparty/bgfx/src/shader_dxbc.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2018 Branimir Karadzic. All rights reserved. + * Copyright 2011-2022 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -108,17 +108,17 @@ namespace bgfx { 1, 0 }, // DCL_CONSTANT_BUFFER { 1, 0 }, // DCL_SAMPLER { 1, 1 }, // DCL_INDEX_RANGE - { 1, 0 }, // DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY - { 1, 0 }, // DCL_GS_INPUT_PRIMITIVE + { 0, 0 }, // DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY + { 0, 0 }, // DCL_GS_INPUT_PRIMITIVE { 0, 1 }, // DCL_MAX_OUTPUT_VERTEX_COUNT { 1, 0 }, // DCL_INPUT { 1, 1 }, // DCL_INPUT_SGV - { 1, 0 }, // DCL_INPUT_SIV + { 1, 1 }, // DCL_INPUT_SIV { 1, 0 }, // DCL_INPUT_PS { 1, 1 }, // DCL_INPUT_PS_SGV { 1, 1 }, // DCL_INPUT_PS_SIV { 1, 0 }, // DCL_OUTPUT - { 1, 0 }, // DCL_OUTPUT_SGV + { 1, 1 }, // DCL_OUTPUT_SGV { 1, 1 }, // DCL_OUTPUT_SIV { 0, 1 }, // DCL_TEMPS { 0, 3 }, // DCL_INDEXABLE_TEMP @@ -135,8 +135,8 @@ namespace bgfx { 0, 0 }, // HS_CONTROL_POINT_PHASE { 0, 0 }, // HS_FORK_PHASE { 0, 0 }, // HS_JOIN_PHASE - { 0, 0 }, // EMIT_STREAM - { 0, 0 }, // CUT_STREAM + { 1, 0 }, // EMIT_STREAM + { 1, 0 }, // CUT_STREAM { 1, 0 }, // EMITTHENCUT_STREAM { 1, 0 }, // INTERFACE_CALL { 0, 0 }, // BUFINFO @@ -161,7 +161,7 @@ namespace bgfx { 5, 0 }, // BFI { 0, 0 }, // BFREV { 5, 0 }, // SWAPC - { 0, 0 }, // DCL_STREAM + { 1, 0 }, // DCL_STREAM { 1, 0 }, // DCL_FUNCTION_BODY { 0, 0 }, // DCL_FUNCTION_TABLE { 0, 0 }, // DCL_INTERFACE @@ -468,7 +468,7 @@ namespace bgfx const char* getName(DxbcOpcode::Enum _opcode) { - BX_CHECK(_opcode < DxbcOpcode::Count, "Unknown opcode id %d.", _opcode); + BX_ASSERT(_opcode < DxbcOpcode::Count, "Unknown opcode id %d.", _opcode); return s_dxbcOpcode[_opcode]; } @@ -503,6 +503,69 @@ namespace bgfx }; BX_STATIC_ASSERT(BX_COUNTOF(s_dxbcInterpolationName) == DxbcInterpolation::Count); + const char *s_dxbcPrimitiveTopologyName[] = + { + "", + "PointList", + "LineList", + "LineStrip", + "TriangleList", + "TriangleStrip", + "", + "", + "", + "", + "LineListAdj", + "LineStripAdj", + "TriangleListAdj", + "TriangleStripAdj", + }; + BX_STATIC_ASSERT(BX_COUNTOF(s_dxbcPrimitiveTopologyName) == DxbcPrimitiveTopology::Count); + + const char *s_dxbcPrimitiveName[] = { + "", + "Point", + "Line", + "Triangle", + "", + "", + "LineAdj", + "TriangleAdj", + "_1ControlPointPatch", + "_2ControlPointPatch", + "_3ControlPointPatch", + "_4ControlPointPatch", + "_5ControlPointPatch", + "_6ControlPointPatch", + "_7ControlPointPatch", + "_8ControlPointPatch", + "_9ControlPointPatch", + "_10ControlPointPatch", + "_11ControlPointPatch", + "_12ControlPointPatch", + "_13ControlPointPatch", + "_14ControlPointPatch", + "_15ControlPointPatch", + "_16ControlPointPatch", + "_17ControlPointPatch", + "_18ControlPointPatch", + "_19ControlPointPatch", + "_20ControlPointPatch", + "_21ControlPointPatch", + "_22ControlPointPatch", + "_23ControlPointPatch", + "_24ControlPointPatch", + "_25ControlPointPatch", + "_26ControlPointPatch", + "_27ControlPointPatch", + "_28ControlPointPatch", + "_29ControlPointPatch", + "_30ControlPointPatch", + "_31ControlPointPatch", + "_32ControlPointPatch", + }; + BX_STATIC_ASSERT(BX_COUNTOF(s_dxbcPrimitiveName) == DxbcPrimitive::Count); + // mesa/src/gallium/state_trackers/d3d1x/d3d1xshader/defs/shortfiles.txt static const char* s_dxbcOperandType[] = { @@ -717,8 +780,8 @@ namespace bgfx } // dxbc hash function is slightly modified version of MD5 hash. - // https://tools.ietf.org/html/rfc1321 - // http://www.efgh.com/software/md5.txt + // https://web.archive.org/web/20190207230524/https://tools.ietf.org/html/rfc1321 + // https://web.archive.org/web/20190207230538/http://www.efgh.com/software/md5.txt // // Assumption is that data pointer, size are both 4-byte aligned, // and little endian. @@ -825,7 +888,7 @@ namespace bgfx break; default: - BX_CHECK(false, "sub operand addressing mode %d", _subOperand.addrMode); + BX_ASSERT(false, "sub operand addressing mode %d", _subOperand.addrMode); break; } @@ -878,7 +941,7 @@ namespace bgfx break; default: - BX_CHECK(false, "sub operand addressing mode %d", _subOperand.addrMode); + BX_ASSERT(false, "sub operand addressing mode %d", _subOperand.addrMode); break; } @@ -967,7 +1030,7 @@ namespace bgfx break; default: - BX_CHECK(false, "operand %d addressing mode %d", ii, _operand.addrMode[ii]); + BX_ASSERT(false, "operand %d addressing mode %d", ii, _operand.addrMode[ii]); break; } } @@ -1042,7 +1105,7 @@ namespace bgfx break; default: - BX_CHECK(false, "operand %d addressing mode %d", ii, _operand.addrMode[ii]); + BX_ASSERT(false, "operand %d addressing mode %d", ii, _operand.addrMode[ii]); break; } } @@ -1065,6 +1128,8 @@ namespace bgfx // +-------------------------------- extended _instruction.opcode = DxbcOpcode::Enum( (token & UINT32_C(0x000007ff) ) ); + BX_ASSERT(_instruction.opcode < DxbcOpcode::Enum::Count, "unknown opcode"); + _instruction.length = uint8_t( (token & UINT32_C(0x7f000000) ) >> 24); bool extended = 0 != (token & UINT32_C(0x80000000) ); @@ -1147,11 +1212,30 @@ namespace bgfx _instruction.enableShaderExtensions = 0 != (token & UINT32_C(0x00040000) ); break; - case DxbcOpcode::DCL_INPUT_PS: + case DxbcOpcode::DCL_GS_INPUT_PRIMITIVE: + // 0 1 2 3 + // 76543210765432107654321076543210 + // ........ pppppp........... + // ^----------------- Primitive + + _instruction.primitive = DxbcPrimitive::Enum( (token & UINT32_C(0x0001f800) ) >> 11); + break; + + case DxbcOpcode::DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY: + // 0 1 2 3 + // 76543210765432107654321076543210 + // ........ pppppp........... + // ^----------------- Primitive Topology + + _instruction.primitiveTopology = DxbcPrimitiveTopology::Enum( (token & UINT32_C(0x0001f800) ) >> 11); + break; + + case DxbcOpcode::DCL_INPUT_PS: BX_FALLTHROUGH; + case DxbcOpcode::DCL_INPUT_PS_SIV: // 0 1 2 3 // 76543210765432107654321076543210 // ........ iiiii........... - // ^---------------- Interploation + // ^---------------- Interpolation _instruction.interpolation = DxbcInterpolation::Enum( (token & UINT32_C(0x0000f800) ) >> 11); break; @@ -1279,7 +1363,7 @@ namespace bgfx size += read(_reader, tableId, _err); uint32_t num; - size += read(_reader, num); + size += read(_reader, num, _err); for (uint32_t ii = 0; ii < num; ++ii) { @@ -1297,7 +1381,7 @@ namespace bgfx uint32_t num; size += read(_reader, num, _err); - BX_CHECK(false, "not implemented."); + BX_ASSERT(false, "not implemented."); } break; @@ -1325,7 +1409,7 @@ namespace bgfx break; default: - BX_CHECK(false, "Instruction %s with invalid number of operands %d (numValues %d)." + BX_ASSERT(false, "Instruction %s with invalid number of operands %d (numValues %d)." , getName(_instruction.opcode) , info.numOperands , info.numValues @@ -1356,7 +1440,7 @@ namespace bgfx token &= UINT32_C(0x000007ff); token |= _instruction.customDataClass << 11; - size += bx::write(_writer, token); + size += bx::write(_writer, token, _err); uint32_t len = uint32_t(_instruction.customData.size()*sizeof(uint32_t) ); size += bx::write(_writer, len/4+2, _err); @@ -1379,7 +1463,16 @@ namespace bgfx token |= _instruction.enableShaderExtensions ? UINT32_C(0x00040000) : 0; break; - case DxbcOpcode::DCL_INPUT_PS: + case DxbcOpcode::DCL_GS_INPUT_PRIMITIVE: + token |= (_instruction.primitive << 11) & UINT32_C(0x0001f800); + break; + + case DxbcOpcode::DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY: + token |= (_instruction.primitiveTopology << 11) & UINT32_C(0x0001f800); + break; + + case DxbcOpcode::DCL_INPUT_PS: BX_FALLTHROUGH; + case DxbcOpcode::DCL_INPUT_PS_SIV: token |= (_instruction.interpolation << 11) & UINT32_C(0x0000f800); break; @@ -1408,7 +1501,7 @@ namespace bgfx break; } - size += bx::write(_writer, token); + size += bx::write(_writer, token, _err); for (uint32_t ii = 0; _instruction.extended[ii] != DxbcInstruction::ExtendedType::Count; ++ii) { @@ -1547,6 +1640,22 @@ namespace bgfx ); break; + case DxbcOpcode::DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY: + size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size) + , "%s %s" + , getName(_instruction.opcode) + , s_dxbcPrimitiveTopologyName[_instruction.primitiveTopology] + ); + break; + + case DxbcOpcode::DCL_GS_INPUT_PRIMITIVE: + size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size) + , "%s %s" + , getName(_instruction.opcode) + , s_dxbcPrimitiveName[_instruction.primitive] + ); + break; + case DxbcOpcode::IF: size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size) , "%s%s" @@ -1732,7 +1841,7 @@ namespace bgfx DxbcSignature::Element element; uint32_t nameOffset; - size += bx::read(_reader, nameOffset); + size += bx::read(_reader, nameOffset, _err); char name[DXBC_MAX_NAME_STRING]; readString(_reader, offset + nameOffset, name, DXBC_MAX_NAME_STRING, _err); @@ -1782,7 +1891,7 @@ namespace bgfx } else { - size += bx::write(_writer, it->second); + size += bx::write(_writer, it->second, _err); } size += bx::write(_writer, element.semanticIndex, _err); @@ -1849,6 +1958,12 @@ namespace bgfx #define DXBC_CHUNK_INPUT_SIGNATURE BX_MAKEFOURCC('I', 'S', 'G', 'N') #define DXBC_CHUNK_OUTPUT_SIGNATURE BX_MAKEFOURCC('O', 'S', 'G', 'N') +#define DXBC_CHUNK_SFI0 BX_MAKEFOURCC('S', 'F', 'I', '0') +#define DXBC_CHUNK_SPDB BX_MAKEFOURCC('S', 'P', 'D', 'B') + +#define DXBC_CHUNK_RDEF BX_MAKEFOURCC('R', 'D', 'E', 'F') +#define DXBC_CHUNK_STAT BX_MAKEFOURCC('S', 'T', 'A', 'T') + int32_t read(bx::ReaderSeekerI* _reader, DxbcContext& _dxbc, bx::Error* _err) { int32_t size = 0; @@ -1867,6 +1982,7 @@ namespace bgfx uint32_t fourcc; size += bx::read(_reader, fourcc, _err); + _dxbc.chunksFourcc[ii] = fourcc; uint32_t chunkSize; size += bx::read(_reader, chunkSize, _err); @@ -1896,12 +2012,27 @@ namespace bgfx _dxbc.shader.aon9 = true; break; + case DXBC_CHUNK_SFI0: // ? + BX_ASSERT(chunkSize == sizeof(_dxbc.sfi0.data), + "Unexpected size of SFI0 chunk"); + + size += bx::read(_reader, _dxbc.sfi0.data, _err); + break; + + case DXBC_CHUNK_SPDB: // Shader debugging info (new). + _dxbc.spdb.debugCode.resize(chunkSize); + size += bx::read(_reader, _dxbc.spdb.debugCode.data(), chunkSize, _err); + break; + case DXBC_CHUNK_RDEF: // Resource definition. + _dxbc.rdef.rdefCode.resize(chunkSize); + size += bx::read(_reader, _dxbc.rdef.rdefCode.data(), chunkSize, _err); + break; + case DXBC_CHUNK_STAT: // Statistics. + _dxbc.stat.statCode.resize(chunkSize); + size += bx::read(_reader, _dxbc.stat.statCode.data(), chunkSize, _err); + 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). - case BX_MAKEFOURCC('S', 'P', 'D', 'B'): // Shader debugging info (new). - case BX_MAKEFOURCC('S', 'F', 'I', '0'): // ? - case BX_MAKEFOURCC('S', 'T', 'A', 'T'): // Statistics. case BX_MAKEFOURCC('P', 'C', 'S', 'G'): // Patch constant signature. case BX_MAKEFOURCC('P', 'S', 'O', '1'): // Pipeline State Object 1 case BX_MAKEFOURCC('P', 'S', 'O', '2'): // Pipeline State Object 2 @@ -1912,7 +2043,7 @@ namespace bgfx default: size += chunkSize; - BX_CHECK(false, "UNKNOWN FOURCC %c%c%c%c %d" + BX_ASSERT(false, "UNKNOWN FOURCC %c%c%c%c %d" , ( (char*)&fourcc)[0] , ( (char*)&fourcc)[1] , ( (char*)&fourcc)[2] @@ -1930,8 +2061,32 @@ namespace bgfx { int32_t size = 0; + uint32_t numSupportedChunks = 0; + for (uint32_t ii = 0; ii < _dxbc.header.numChunks; ++ii) + { + switch(_dxbc.chunksFourcc[ii]) + { + case DXBC_CHUNK_SHADER_EX: + case DXBC_CHUNK_SHADER: + case BX_MAKEFOURCC('I', 'S', 'G', '1'): + case DXBC_CHUNK_INPUT_SIGNATURE: + case BX_MAKEFOURCC('O', 'S', 'G', '1'): + case BX_MAKEFOURCC('O', 'S', 'G', '5'): + case DXBC_CHUNK_OUTPUT_SIGNATURE: + case DXBC_CHUNK_SFI0: + case DXBC_CHUNK_SPDB: + case DXBC_CHUNK_RDEF: + case DXBC_CHUNK_STAT: + ++numSupportedChunks; + break; + + default: + break; + } + } + int64_t dxbcOffset = bx::seek(_writer); - size += bx::write(_writer, DXBC_CHUNK_HEADER); + size += bx::write(_writer, DXBC_CHUNK_HEADER, _err); size += bx::writeRep(_writer, 0, 16, _err); @@ -1940,35 +2095,96 @@ namespace bgfx int64_t sizeOffset = bx::seek(_writer); size += bx::writeRep(_writer, 0, 4, _err); - uint32_t numChunks = 3; - size += bx::write(_writer, numChunks, _err); + size += bx::write(_writer, numSupportedChunks, _err); int64_t chunksOffsets = bx::seek(_writer); - size += bx::writeRep(_writer, 0, numChunks*sizeof(uint32_t), _err); - - uint32_t chunkOffset[3]; - uint32_t chunkSize[3]; - - chunkOffset[0] = uint32_t(bx::seek(_writer) - dxbcOffset); - size += write(_writer, DXBC_CHUNK_INPUT_SIGNATURE, _err); - size += write(_writer, UINT32_C(0), _err); - chunkSize[0] = write(_writer, _dxbc.inputSignature, _err); - - chunkOffset[1] = uint32_t(bx::seek(_writer) - dxbcOffset); - size += write(_writer, DXBC_CHUNK_OUTPUT_SIGNATURE, _err); - size += write(_writer, UINT32_C(0), _err); - chunkSize[1] = write(_writer, _dxbc.outputSignature, _err); - - chunkOffset[2] = uint32_t(bx::seek(_writer) - dxbcOffset); - size += write(_writer, _dxbc.shader.shex ? DXBC_CHUNK_SHADER_EX : DXBC_CHUNK_SHADER, _err); - size += write(_writer, UINT32_C(0), _err); - chunkSize[2] = write(_writer, _dxbc.shader, _err); - - size += 0 - + chunkSize[0] - + chunkSize[1] - + chunkSize[2] - ; + size += bx::writeRep(_writer, 0, numSupportedChunks*sizeof(uint32_t), _err); + + uint32_t chunkOffset[DXBC_MAX_CHUNKS] = {}; + uint32_t chunkSize[DXBC_MAX_CHUNKS] = {}; + + for (uint32_t ii = 0, idx = 0; ii < _dxbc.header.numChunks; ++ii) + { + switch (_dxbc.chunksFourcc[ii]) + { + case DXBC_CHUNK_SHADER_EX: + case DXBC_CHUNK_SHADER: + chunkOffset[idx] = uint32_t(bx::seek(_writer) - dxbcOffset); + size += bx::write(_writer, _dxbc.shader.shex ? DXBC_CHUNK_SHADER_EX : DXBC_CHUNK_SHADER, _err); + size += bx::write(_writer, UINT32_C(0), _err); + chunkSize[idx] = write(_writer, _dxbc.shader, _err); + size += chunkSize[idx++]; + break; + + case BX_MAKEFOURCC('I', 'S', 'G', '1'): + case DXBC_CHUNK_INPUT_SIGNATURE: + chunkOffset[idx] = uint32_t(bx::seek(_writer) - dxbcOffset); + size += bx::write(_writer, DXBC_CHUNK_INPUT_SIGNATURE, _err); + size += bx::write(_writer, UINT32_C(0), _err); + chunkSize[idx] = write(_writer, _dxbc.inputSignature, _err); + size += chunkSize[idx++]; + break; + + case BX_MAKEFOURCC('O', 'S', 'G', '1'): + case BX_MAKEFOURCC('O', 'S', 'G', '5'): + case DXBC_CHUNK_OUTPUT_SIGNATURE: + chunkOffset[idx] = uint32_t(bx::seek(_writer) - dxbcOffset); + size += bx::write(_writer, DXBC_CHUNK_OUTPUT_SIGNATURE, _err); + size += bx::write(_writer, UINT32_C(0), _err); + chunkSize[idx] = write(_writer, _dxbc.outputSignature, _err); + size += chunkSize[idx++]; + break; + + case DXBC_CHUNK_SFI0: + chunkOffset[idx] = uint32_t(bx::seek(_writer) - dxbcOffset); + size += bx::write(_writer, DXBC_CHUNK_SFI0, _err); + size += bx::write(_writer, UINT32_C(0), _err); + chunkSize[idx] = bx::write(_writer, _dxbc.sfi0.data, _err); + size += chunkSize[idx++]; + break; + + case DXBC_CHUNK_SPDB: // Shader debugging info (new). + chunkOffset[idx] = uint32_t(bx::seek(_writer) - dxbcOffset); + size += bx::write(_writer, DXBC_CHUNK_SPDB, _err); + size += bx::write(_writer, UINT32_C(0), _err); + chunkSize[idx] = bx::write(_writer, _dxbc.spdb.debugCode.data(), int32_t(_dxbc.spdb.debugCode.size() ), _err); + size += chunkSize[idx++]; + break; + + case DXBC_CHUNK_RDEF: // Resource definition. + chunkOffset[idx] = uint32_t(bx::seek(_writer) - dxbcOffset); + size += bx::write(_writer, DXBC_CHUNK_RDEF, _err); + size += bx::write(_writer, uint32_t(_dxbc.rdef.rdefCode.size()), _err); + chunkSize[idx] = bx::write(_writer, _dxbc.rdef.rdefCode.data(), int32_t(_dxbc.rdef.rdefCode.size() ), _err); + size += chunkSize[idx++]; + break; + + case DXBC_CHUNK_STAT: // Statistics. + chunkOffset[idx] = uint32_t(bx::seek(_writer) - dxbcOffset); + size += bx::write(_writer, DXBC_CHUNK_STAT, _err); + size += bx::write(_writer, uint32_t(_dxbc.stat.statCode.size()), _err); + chunkSize[idx] = bx::write(_writer, _dxbc.stat.statCode.data(), int32_t(_dxbc.stat.statCode.size() ), _err); + size += chunkSize[idx++]; + break; + + case BX_MAKEFOURCC('A', 'o', 'n', '9'): // Contains DX9BC for feature level 9.x (*s_4_0_level_9_*) shaders. + case BX_MAKEFOURCC('I', 'F', 'C', 'E'): // Interface. + case BX_MAKEFOURCC('S', 'D', 'G', 'B'): // Shader debugging info (old). + case BX_MAKEFOURCC('P', 'C', 'S', 'G'): // Patch constant signature. + case BX_MAKEFOURCC('P', 'S', 'O', '1'): // Pipeline State Object 1 + case BX_MAKEFOURCC('P', 'S', 'O', '2'): // Pipeline State Object 2 + case BX_MAKEFOURCC('X', 'N', 'A', 'P'): // ? + case BX_MAKEFOURCC('X', 'N', 'A', 'S'): // ? + default: + BX_ASSERT(false, "Writing of DXBC %c%c%c%c chunk unsupported" + , ( (char*)&_dxbc.chunksFourcc[ii])[0] + , ( (char*)&_dxbc.chunksFourcc[ii])[1] + , ( (char*)&_dxbc.chunksFourcc[ii])[2] + , ( (char*)&_dxbc.chunksFourcc[ii])[3] + ); + break; + } + } int64_t eof = bx::seek(_writer); @@ -1976,9 +2192,9 @@ namespace bgfx bx::write(_writer, size, _err); bx::seek(_writer, chunksOffsets, bx::Whence::Begin); - bx::write(_writer, chunkOffset, sizeof(chunkOffset), _err); + bx::write(_writer, chunkOffset, numSupportedChunks*sizeof(chunkOffset[0]), _err); - for (uint32_t ii = 0; ii < BX_COUNTOF(chunkOffset); ++ii) + for (uint32_t ii = 0; ii < numSupportedChunks; ++ii) { bx::seek(_writer, chunkOffset[ii]+4, bx::Whence::Begin); bx::write(_writer, chunkSize[ii], _err); @@ -1999,7 +2215,7 @@ namespace bgfx { DxbcInstruction instruction; uint32_t size = read(&reader, instruction, _err); - BX_CHECK(size/4 == instruction.length, "read %d, expected %d", size/4, instruction.length); BX_UNUSED(size); + BX_ASSERT(size/4 == instruction.length, "read %d, expected %d", size/4, instruction.length); BX_UNUSED(size); bool cont = _fn(token * sizeof(uint32_t), instruction, _userData); if (!cont) @@ -2026,7 +2242,7 @@ namespace bgfx { DxbcInstruction instruction; uint32_t size = read(&reader, instruction, _err); - BX_CHECK(size/4 == instruction.length, "read %d, expected %d", size/4, instruction.length); BX_UNUSED(size); + BX_ASSERT(size/4 == instruction.length, "read %d, expected %d", size/4, instruction.length); BX_UNUSED(size); _fn(instruction, _userData); |