diff options
author | 2016-03-12 12:31:13 +0100 | |
---|---|---|
committer | 2016-03-12 12:31:13 +0100 | |
commit | a026a582f1a0ea8c1ede3acaddacef506ef3f3b0 (patch) | |
tree | e31573822f2359677de519f9f3b600d98e8764cd /3rdparty/bgfx/src/shader_dxbc.cpp | |
parent | 477d2abd43984f076b7e45f5527591fa8fd0d241 (diff) | |
parent | dcab55bf53b94713a6f72e9633f5101c8dd6c08c (diff) |
Merge pull request #15 from mamedev/master
Sync to base master
Diffstat (limited to '3rdparty/bgfx/src/shader_dxbc.cpp')
-rw-r--r-- | 3rdparty/bgfx/src/shader_dxbc.cpp | 237 |
1 files changed, 120 insertions, 117 deletions
diff --git a/3rdparty/bgfx/src/shader_dxbc.cpp b/3rdparty/bgfx/src/shader_dxbc.cpp index 36d81842c8d..9f8b351e76a 100644 --- a/3rdparty/bgfx/src/shader_dxbc.cpp +++ b/3rdparty/bgfx/src/shader_dxbc.cpp @@ -552,7 +552,7 @@ namespace bgfx #define DXBC_MAX_NAME_STRING 512 - int32_t readString(bx::ReaderSeekerI* _reader, int64_t _offset, char* _out, uint32_t _max = DXBC_MAX_NAME_STRING) + int32_t readString(bx::ReaderSeekerI* _reader, int64_t _offset, char* _out, uint32_t _max, bx::Error* _err) { int64_t oldOffset = bx::seek(_reader); bx::seek(_reader, _offset, bx::Whence::Begin); @@ -562,7 +562,7 @@ namespace bgfx for (uint32_t ii = 0; ii < _max-1; ++ii) { char ch; - size += bx::read(_reader, ch); + size += bx::read(_reader, ch, _err); *_out++ = ch; if ('\0' == ch) @@ -755,7 +755,7 @@ namespace bgfx memcpy(_digest, hash, 16); } - int32_t read(bx::ReaderI* _reader, DxbcSubOperand& _subOperand) + int32_t read(bx::ReaderI* _reader, DxbcSubOperand& _subOperand, bx::Error* _err) { uint32_t token; int32_t size = 0; @@ -773,7 +773,7 @@ namespace bgfx // |+------------------------------- addressing mode 2 // +-------------------------------- extended - size += bx::read(_reader, token); + size += bx::read(_reader, token, _err); _subOperand.type = DxbcOperandType::Enum( (token & UINT32_C(0x000ff000) ) >> 12); _subOperand.numAddrModes = uint8_t( (token & UINT32_C(0x00300000) ) >> 20); _subOperand.addrMode = uint8_t( (token & UINT32_C(0x01c00000) ) >> 22); @@ -784,7 +784,7 @@ namespace bgfx switch (_subOperand.addrMode) { case DxbcOperandAddrMode::Imm32: - size += bx::read(_reader, _subOperand.regIndex); + size += bx::read(_reader, _subOperand.regIndex, _err); break; case DxbcOperandAddrMode::Reg: @@ -796,7 +796,7 @@ namespace bgfx case DxbcOperandAddrMode::RegImm32: { - size += bx::read(_reader, _subOperand.regIndex); + size += bx::read(_reader, _subOperand.regIndex, _err); DxbcSubOperand subOperand; size += read(_reader, subOperand); @@ -805,8 +805,8 @@ namespace bgfx case DxbcOperandAddrMode::RegImm64: { - size += bx::read(_reader, _subOperand.regIndex); - size += bx::read(_reader, _subOperand.regIndex); + size += bx::read(_reader, _subOperand.regIndex, _err); + size += bx::read(_reader, _subOperand.regIndex, _err); DxbcSubOperand subOperand; size += read(_reader, subOperand); @@ -821,7 +821,7 @@ namespace bgfx return size; } - int32_t write(bx::WriterI* _writer, const DxbcSubOperand& _subOperand) + int32_t write(bx::WriterI* _writer, const DxbcSubOperand& _subOperand, bx::Error* _err) { int32_t size = 0; @@ -832,12 +832,12 @@ namespace bgfx token |= (_subOperand.mode << 2) & UINT32_C(0x0000000c); token |= (_subOperand.modeBits << 4) & UINT32_C(0x00000ff0); token |= _subOperand.num & UINT32_C(0x00000003); - size += bx::write(_writer, token); + size += bx::write(_writer, token, _err); switch (_subOperand.addrMode) { case DxbcOperandAddrMode::Imm32: - size += bx::write(_writer, _subOperand.regIndex); + size += bx::write(_writer, _subOperand.regIndex, _err); break; case DxbcOperandAddrMode::Reg: @@ -849,7 +849,7 @@ namespace bgfx case DxbcOperandAddrMode::RegImm32: { - size += bx::write(_writer, _subOperand.regIndex); + size += bx::write(_writer, _subOperand.regIndex, _err); DxbcSubOperand subOperand; size += write(_writer, subOperand); @@ -858,8 +858,8 @@ namespace bgfx case DxbcOperandAddrMode::RegImm64: { - size += bx::write(_writer, _subOperand.regIndex); - size += bx::write(_writer, _subOperand.regIndex); + size += bx::write(_writer, _subOperand.regIndex, _err); + size += bx::write(_writer, _subOperand.regIndex, _err); DxbcSubOperand subOperand; size += write(_writer, subOperand); @@ -874,12 +874,12 @@ namespace bgfx return size; } - int32_t read(bx::ReaderI* _reader, DxbcOperand& _operand) + int32_t read(bx::ReaderI* _reader, DxbcOperand& _operand, bx::Error* _err) { int32_t size = 0; uint32_t token; - size += bx::read(_reader, token); + size += bx::read(_reader, token, _err); // 0 1 2 3 // 76543210765432107654321076543210 @@ -906,7 +906,7 @@ namespace bgfx if (_operand.extended) { - size += bx::read(_reader, _operand.extBits); + size += bx::read(_reader, _operand.extBits, _err); } switch (_operand.type) @@ -915,7 +915,7 @@ namespace bgfx _operand.num = 2 == _operand.num ? 4 : _operand.num; for (uint32_t ii = 0; ii < _operand.num; ++ii) { - size += bx::read(_reader, _operand.un.imm32[ii]); + size += bx::read(_reader, _operand.un.imm32[ii], _err); } break; @@ -923,7 +923,7 @@ namespace bgfx _operand.num = 2 == _operand.num ? 4 : _operand.num; for (uint32_t ii = 0; ii < _operand.num; ++ii) { - size += bx::read(_reader, _operand.un.imm64[ii]); + size += bx::read(_reader, _operand.un.imm64[ii], _err); } break; @@ -936,16 +936,16 @@ namespace bgfx switch (_operand.addrMode[ii]) { case DxbcOperandAddrMode::Imm32: - size += bx::read(_reader, _operand.regIndex[ii]); + size += bx::read(_reader, _operand.regIndex[ii], _err); break; case DxbcOperandAddrMode::Reg: - size += read(_reader, _operand.subOperand[ii]); + size += read(_reader, _operand.subOperand[ii], _err); break; case DxbcOperandAddrMode::RegImm32: - size += bx::read(_reader, _operand.regIndex[ii]); - size += read(_reader, _operand.subOperand[ii]); + size += bx::read(_reader, _operand.regIndex[ii], _err); + size += read(_reader, _operand.subOperand[ii], _err); break; default: @@ -957,7 +957,7 @@ namespace bgfx return size; } - int32_t write(bx::WriterI* _writer, const DxbcOperand& _operand) + int32_t write(bx::WriterI* _writer, const DxbcOperand& _operand, bx::Error* _err) { int32_t size = 0; @@ -973,7 +973,7 @@ namespace bgfx token |= (4 == _operand.num ? 2 : _operand.num) & UINT32_C(0x00000003); token |= ( (_operand.modeBits & "\x0f\xff\x03\x00"[_operand.mode]) << 4) & UINT32_C(0x00000ff0); - size += bx::write(_writer, token); + size += bx::write(_writer, token, _err); if (_operand.extended) { @@ -985,14 +985,14 @@ namespace bgfx case DxbcOperandType::Imm32: for (uint32_t ii = 0; ii < _operand.num; ++ii) { - size += bx::write(_writer, _operand.un.imm32[ii]); + size += bx::write(_writer, _operand.un.imm32[ii], _err); } break; case DxbcOperandType::Imm64: for (uint32_t ii = 0; ii < _operand.num; ++ii) { - size += bx::write(_writer, _operand.un.imm64[ii]); + size += bx::write(_writer, _operand.un.imm64[ii], _err); } break; @@ -1005,16 +1005,16 @@ namespace bgfx switch (_operand.addrMode[ii]) { case DxbcOperandAddrMode::Imm32: - size += bx::write(_writer, _operand.regIndex[ii]); + size += bx::write(_writer, _operand.regIndex[ii], _err); break; case DxbcOperandAddrMode::Reg: - size += write(_writer, _operand.subOperand[ii]); + size += write(_writer, _operand.subOperand[ii], _err); break; case DxbcOperandAddrMode::RegImm32: - size += bx::write(_writer, _operand.regIndex[ii]); - size += write(_writer, _operand.subOperand[ii]); + size += bx::write(_writer, _operand.regIndex[ii], _err); + size += write(_writer, _operand.subOperand[ii], _err); break; default: @@ -1026,12 +1026,12 @@ namespace bgfx return size; } - int32_t read(bx::ReaderI* _reader, DxbcInstruction& _instruction) + int32_t read(bx::ReaderI* _reader, DxbcInstruction& _instruction, bx::Error* _err) { uint32_t size = 0; uint32_t token; - size += bx::read(_reader, token); + size += bx::read(_reader, token, _err); // 0 1 2 3 // 76543210765432107654321076543210 @@ -1077,7 +1077,7 @@ namespace bgfx for (uint32_t ii = 0, num = (_instruction.length-2)/4; ii < num; ++ii) { char temp[16]; - size += bx::read(_reader, temp, 16); + size += bx::read(_reader, temp, 16, _err); } } @@ -1190,7 +1190,7 @@ namespace bgfx uint32_t extBits; size += bx::read(_reader, extBits); extended = 0 != (extBits & UINT32_C(0x80000000) ); - _instruction.extended[ii] = DxbcInstruction::ExtendedType::Enum(extBits & UINT32_C(0x0000001f) ); + _instruction.extended[ii ] = DxbcInstruction::ExtendedType::Enum(extBits & UINT32_C(0x0000001f) ); _instruction.extended[ii+1] = DxbcInstruction::ExtendedType::Count; switch (_instruction.extended[ii]) @@ -1244,7 +1244,7 @@ namespace bgfx case DxbcOpcode::DCL_FUNCTION_TABLE: { uint32_t tableId; - size += read(_reader, tableId); + size += read(_reader, tableId, _err); uint32_t num; size += read(_reader, num); @@ -1252,7 +1252,7 @@ namespace bgfx for (uint32_t ii = 0; ii < num; ++ii) { uint32_t bodyId; - size += read(_reader, bodyId); + size += read(_reader, bodyId, _err); } } break; @@ -1260,10 +1260,10 @@ namespace bgfx case DxbcOpcode::DCL_INTERFACE: { uint32_t interfaceId; - size += read(_reader, interfaceId); + size += read(_reader, interfaceId, _err); uint32_t num; - size += read(_reader, num); + size += read(_reader, num, _err); BX_CHECK(false, "not implemented."); } @@ -1279,16 +1279,16 @@ namespace bgfx _instruction.numOperands = info.numOperands; switch (info.numOperands) { - case 6: size += read(_reader, _instruction.operand[currOp++]); - case 5: size += read(_reader, _instruction.operand[currOp++]); - case 4: size += read(_reader, _instruction.operand[currOp++]); - case 3: size += read(_reader, _instruction.operand[currOp++]); - case 2: size += read(_reader, _instruction.operand[currOp++]); - case 1: size += read(_reader, _instruction.operand[currOp++]); + case 6: size += read(_reader, _instruction.operand[currOp++], _err); + case 5: size += read(_reader, _instruction.operand[currOp++], _err); + case 4: size += read(_reader, _instruction.operand[currOp++], _err); + case 3: size += read(_reader, _instruction.operand[currOp++], _err); + case 2: size += read(_reader, _instruction.operand[currOp++], _err); + case 1: size += read(_reader, _instruction.operand[currOp++], _err); case 0: if (0 < info.numValues) { - size += read(_reader, _instruction.value, info.numValues*sizeof(uint32_t) ); + size += read(_reader, _instruction.value, info.numValues*sizeof(uint32_t), _err); } break; @@ -1304,7 +1304,7 @@ namespace bgfx return size; } - int32_t write(bx::WriterI* _writer, const DxbcInstruction& _instruction) + int32_t write(bx::WriterI* _writer, const DxbcInstruction& _instruction, bx::Error* _err) { uint32_t token = 0; token |= (_instruction.opcode ) & UINT32_C(0x000007ff); @@ -1366,7 +1366,7 @@ namespace bgfx uint32_t size =0; size += bx::write(_writer, token); -; + for (uint32_t ii = 0; _instruction.extended[ii] != DxbcInstruction::ExtendedType::Count; ++ii) { // 0 1 2 3 @@ -1427,18 +1427,18 @@ namespace bgfx break; } - size += bx::write(_writer, token); + size += bx::write(_writer, token, _err); } for (uint32_t ii = 0; ii < _instruction.numOperands; ++ii) { - size += write(_writer, _instruction.operand[ii]); + size += write(_writer, _instruction.operand[ii], _err); } const DxbcOpcodeInfo& info = s_dxbcOpcodeInfo[_instruction.opcode]; if (0 < info.numValues) { - size += bx::write(_writer, _instruction.value, info.numValues*sizeof(uint32_t) ); + size += bx::write(_writer, _instruction.value, info.numValues*sizeof(uint32_t), _err); } return size; @@ -1609,15 +1609,15 @@ namespace bgfx return size; } - int32_t read(bx::ReaderSeekerI* _reader, DxbcSignature& _signature) + int32_t read(bx::ReaderSeekerI* _reader, DxbcSignature& _signature, bx::Error* _err) { int32_t size = 0; int64_t offset = bx::seek(_reader); uint32_t num; - size += bx::read(_reader, num); - size += bx::read(_reader, _signature.key); + size += bx::read(_reader, num, _err); + size += bx::read(_reader, _signature.key, _err); for (uint32_t ii = 0; ii < num; ++ii) { @@ -1627,20 +1627,20 @@ namespace bgfx size += bx::read(_reader, nameOffset); char name[DXBC_MAX_NAME_STRING]; - readString(_reader, offset + nameOffset, name); + readString(_reader, offset + nameOffset, name, DXBC_MAX_NAME_STRING, _err); element.name = name; - size += bx::read(_reader, element.semanticIndex); - size += bx::read(_reader, element.valueType); - size += bx::read(_reader, element.componentType); - size += bx::read(_reader, element.registerIndex); - size += bx::read(_reader, element.mask); - size += bx::read(_reader, element.readWriteMask); - size += bx::read(_reader, element.stream); + size += bx::read(_reader, element.semanticIndex, _err); + size += bx::read(_reader, element.valueType, _err); + size += bx::read(_reader, element.componentType, _err); + size += bx::read(_reader, element.registerIndex, _err); + size += bx::read(_reader, element.mask, _err); + size += bx::read(_reader, element.readWriteMask, _err); + size += bx::read(_reader, element.stream, _err); // padding uint8_t padding; - size += bx::read(_reader, padding); + size += bx::read(_reader, padding, _err); _signature.elements.push_back(element); } @@ -1648,13 +1648,13 @@ namespace bgfx return size; } - int32_t write(bx::WriterI* _writer, const DxbcSignature& _signature) + int32_t write(bx::WriterI* _writer, const DxbcSignature& _signature, bx::Error* _err) { int32_t size = 0; const uint32_t num = uint32_t(_signature.elements.size() ); - size += bx::write(_writer, num); - size += bx::write(_writer, _signature.key); + size += bx::write(_writer, num, _err); + size += bx::write(_writer, _signature.key, _err); typedef stl::unordered_map<stl::string, uint32_t> NameOffsetMap; NameOffsetMap nom; @@ -1669,7 +1669,7 @@ namespace bgfx if (it == nom.end() ) { nom.insert(stl::make_pair(element.name, nameOffset) ); - size += bx::write(_writer, nameOffset); + size += bx::write(_writer, nameOffset, _err); nameOffset += uint32_t(element.name.size() + 1); } else @@ -1677,15 +1677,14 @@ namespace bgfx size += bx::write(_writer, it->second); } - size += bx::write(_writer, element.semanticIndex); - size += bx::write(_writer, element.valueType); - size += bx::write(_writer, element.componentType); - size += bx::write(_writer, element.registerIndex); - size += bx::write(_writer, element.mask); - size += bx::write(_writer, element.readWriteMask); - size += bx::write(_writer, element.stream); - size += bx::write(_writer, pad); - + size += bx::write(_writer, element.semanticIndex, _err); + size += bx::write(_writer, element.valueType, _err); + size += bx::write(_writer, element.componentType, _err); + size += bx::write(_writer, element.registerIndex, _err); + size += bx::write(_writer, element.mask, _err); + size += bx::write(_writer, element.readWriteMask, _err); + size += bx::write(_writer, element.stream, _err); + size += bx::write(_writer, pad, _err); } uint32_t len = 0; @@ -1696,42 +1695,42 @@ namespace bgfx if (it != nom.end() ) { nom.erase(it); - size += bx::write(_writer, element.name.c_str(), uint32_t(element.name.size() + 1) ); + size += bx::write(_writer, element.name.c_str(), uint32_t(element.name.size() + 1), _err); len += uint32_t(element.name.size() + 1); } } // align 4 bytes - size += bx::writeRep(_writer, 0xab, (len+3)/4*4 - len); + size += bx::writeRep(_writer, 0xab, (len+3)/4*4 - len, _err); return size; } - int32_t read(bx::ReaderSeekerI* _reader, DxbcShader& _shader) + int32_t read(bx::ReaderSeekerI* _reader, DxbcShader& _shader, bx::Error* _err) { int32_t size = 0; - size += bx::read(_reader, _shader.version); + size += bx::read(_reader, _shader.version, _err); uint32_t bcLength; - size += bx::read(_reader, bcLength); + size += bx::read(_reader, bcLength, _err); uint32_t len = (bcLength-2)*sizeof(uint32_t); _shader.byteCode.resize(len); - size += bx::read(_reader, _shader.byteCode.data(), len); + size += bx::read(_reader, _shader.byteCode.data(), len, _err); return size; } - int32_t write(bx::WriterI* _writer, const DxbcShader& _shader) + int32_t write(bx::WriterI* _writer, const DxbcShader& _shader, bx::Error* _err) { const uint32_t len = uint32_t(_shader.byteCode.size() ); const uint32_t bcLength = len / sizeof(uint32_t) + 2; int32_t size = 0; - size += bx::write(_writer, _shader.version); - size += bx::write(_writer, bcLength); - size += bx::write(_writer, _shader.byteCode.data(), len); + size += bx::write(_writer, _shader.version, _err); + size += bx::write(_writer, bcLength, _err); + size += bx::write(_writer, _shader.byteCode.data(), len, _err); return size; } @@ -1743,10 +1742,10 @@ namespace bgfx #define DXBC_CHUNK_INPUT_SIGNATURE BX_MAKEFOURCC('I', 'S', 'G', 'N') #define DXBC_CHUNK_OUTPUT_SIGNATURE BX_MAKEFOURCC('O', 'S', 'G', 'N') - int32_t read(bx::ReaderSeekerI* _reader, DxbcContext& _dxbc) + int32_t read(bx::ReaderSeekerI* _reader, DxbcContext& _dxbc, bx::Error* _err) { int32_t size = 0; - size += bx::read(_reader, _dxbc.header); + size += bx::read(_reader, _dxbc.header, _err); _dxbc.shader.shex = false; for (uint32_t ii = 0; ii < _dxbc.header.numChunks; ++ii) @@ -1754,15 +1753,15 @@ namespace bgfx bx::seek(_reader, sizeof(DxbcContext::Header) + ii*sizeof(uint32_t), bx::Whence::Begin); uint32_t chunkOffset; - size += bx::read(_reader, chunkOffset); + size += bx::read(_reader, chunkOffset, _err); bx::seek(_reader, chunkOffset, bx::Whence::Begin); uint32_t fourcc; - size += bx::read(_reader, fourcc); + size += bx::read(_reader, fourcc, _err); uint32_t chunkSize; - size += bx::read(_reader, chunkSize); + size += bx::read(_reader, chunkSize, _err); switch (fourcc) { @@ -1771,18 +1770,18 @@ namespace bgfx // fallthrough case DXBC_CHUNK_SHADER: - size += read(_reader, _dxbc.shader); + size += read(_reader, _dxbc.shader, _err); break; case BX_MAKEFOURCC('I', 'S', 'G', '1'): case DXBC_CHUNK_INPUT_SIGNATURE: - size += read(_reader, _dxbc.inputSignature); + size += read(_reader, _dxbc.inputSignature, _err); break; case BX_MAKEFOURCC('O', 'S', 'G', '1'): case BX_MAKEFOURCC('O', 'S', 'G', '5'): case DXBC_CHUNK_OUTPUT_SIGNATURE: - size += read(_reader, _dxbc.outputSignature); + size += read(_reader, _dxbc.outputSignature, _err); break; case BX_MAKEFOURCC('A', 'o', 'n', '9'): // Contains DX9BC for feature level 9.x (*s_4_0_level_9_*) shaders. @@ -1816,43 +1815,43 @@ namespace bgfx return size; } - int32_t write(bx::WriterSeekerI* _writer, const DxbcContext& _dxbc) + int32_t write(bx::WriterSeekerI* _writer, const DxbcContext& _dxbc, bx::Error* _err) { int32_t size = 0; int64_t dxbcOffset = bx::seek(_writer); size += bx::write(_writer, DXBC_CHUNK_HEADER); - size += bx::writeRep(_writer, 0, 16); + size += bx::writeRep(_writer, 0, 16, _err); - size += bx::write(_writer, UINT32_C(1) ); + size += bx::write(_writer, UINT32_C(1), _err); int64_t sizeOffset = bx::seek(_writer); - size += bx::writeRep(_writer, 0, 4); + size += bx::writeRep(_writer, 0, 4, _err); uint32_t numChunks = 3; - size += bx::write(_writer, numChunks); + size += bx::write(_writer, numChunks, _err); int64_t chunksOffsets = bx::seek(_writer); - size += bx::writeRep(_writer, 0, numChunks*sizeof(uint32_t) ); + 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); - size += write(_writer, UINT32_C(0) ); - chunkSize[0] = write(_writer, _dxbc.inputSignature); + 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); - size += write(_writer, UINT32_C(0) ); - chunkSize[1] = write(_writer, _dxbc.outputSignature); + 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); - size += write(_writer, UINT32_C(0) ); - chunkSize[2] = write(_writer, _dxbc.shader); + 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] @@ -1863,15 +1862,15 @@ namespace bgfx int64_t eof = bx::seek(_writer); bx::seek(_writer, sizeOffset, bx::Whence::Begin); - bx::write(_writer, size); + bx::write(_writer, size, _err); bx::seek(_writer, chunksOffsets, bx::Whence::Begin); - bx::write(_writer, chunkOffset, sizeof(chunkOffset) ); + bx::write(_writer, chunkOffset, sizeof(chunkOffset), _err); for (uint32_t ii = 0; ii < BX_COUNTOF(chunkOffset); ++ii) { bx::seek(_writer, chunkOffset[ii]+4, bx::Whence::Begin); - bx::write(_writer, chunkSize[ii]); + bx::write(_writer, chunkSize[ii], _err); } bx::seek(_writer, eof, bx::Whence::Begin); @@ -1879,14 +1878,16 @@ namespace bgfx return size; } - void parse(const DxbcShader& _src, DxbcParseFn _fn, void* _userData) + void parse(const DxbcShader& _src, DxbcParseFn _fn, void* _userData, bx::Error* _err) { + BX_ERROR_SCOPE(_err); + bx::MemoryReader reader(_src.byteCode.data(), uint32_t(_src.byteCode.size() ) ); for (uint32_t token = 0, numTokens = uint32_t(_src.byteCode.size() / sizeof(uint32_t) ); token < numTokens;) { DxbcInstruction instruction; - uint32_t size = read(&reader, 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); bool cont = _fn(token * sizeof(uint32_t), instruction, _userData); @@ -1899,8 +1900,10 @@ namespace bgfx } } - void filter(DxbcShader& _dst, const DxbcShader& _src, DxbcFilterFn _fn, void* _userData) + void filter(DxbcShader& _dst, const DxbcShader& _src, DxbcFilterFn _fn, void* _userData, bx::Error* _err) { + BX_ERROR_SCOPE(_err); + bx::MemoryReader reader(_src.byteCode.data(), uint32_t(_src.byteCode.size() ) ); bx::MemoryBlock mb(g_allocator); @@ -1909,12 +1912,12 @@ namespace bgfx for (uint32_t token = 0, numTokens = uint32_t(_src.byteCode.size() / sizeof(uint32_t) ); token < numTokens;) { DxbcInstruction instruction; - uint32_t size = read(&reader, 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); _fn(instruction, _userData); - write(&writer, instruction); + write(&writer, instruction, _err); token += instruction.length; } |