123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copyright (c) 2018 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- // MARK-V is a compression format for SPIR-V binaries. It strips away
- // non-essential information (such as result ids which can be regenerated) and
- // uses various bit reduction techiniques to reduce the size of the binary and
- // make it more similar to other compressed SPIR-V files to further improve
- // compression of the dataset.
- #ifndef SOURCE_COMP_MARKV_H_
- #define SOURCE_COMP_MARKV_H_
- #include "spirv-tools/libspirv.hpp"
- namespace spvtools {
- namespace comp {
- class MarkvModel;
- struct MarkvCodecOptions {
- bool validate_spirv_binary = false;
- };
- // Debug callback. Called once per instruction.
- // |words| is instruction SPIR-V words.
- // |bits| is a textual representation of the MARK-V bit sequence used to encode
- // the instruction (char '0' for 0, char '1' for 1).
- // |comment| contains all logs generated while processing the instruction.
- using MarkvDebugConsumer =
- std::function<bool(const std::vector<uint32_t>& words,
- const std::string& bits, const std::string& comment)>;
- // Logging callback. Called often (if decoder reads a single bit, the log
- // consumer will receive 1 character string with that bit).
- // This callback is more suitable for continous output than MarkvDebugConsumer,
- // for example if the codec crashes it would allow to pinpoint on which operand
- // or bit the crash happened.
- // |snippet| could be any atomic fragment of text logged by the codec. It can
- // contain a paragraph of text with newlines, or can be just one character.
- using MarkvLogConsumer = std::function<void(const std::string& snippet)>;
- // Encodes the given SPIR-V binary to MARK-V binary.
- // |log_consumer| is optional (pass MarkvLogConsumer() to disable).
- // |debug_consumer| is optional (pass MarkvDebugConsumer() to disable).
- spv_result_t SpirvToMarkv(
- spv_const_context context, const std::vector<uint32_t>& spirv,
- const MarkvCodecOptions& options, const MarkvModel& markv_model,
- MessageConsumer message_consumer, MarkvLogConsumer log_consumer,
- MarkvDebugConsumer debug_consumer, std::vector<uint8_t>* markv);
- // Decodes a SPIR-V binary from the given MARK-V binary.
- // |log_consumer| is optional (pass MarkvLogConsumer() to disable).
- // |debug_consumer| is optional (pass MarkvDebugConsumer() to disable).
- spv_result_t MarkvToSpirv(
- spv_const_context context, const std::vector<uint8_t>& markv,
- const MarkvCodecOptions& options, const MarkvModel& markv_model,
- MessageConsumer message_consumer, MarkvLogConsumer log_consumer,
- MarkvDebugConsumer debug_consumer, std::vector<uint32_t>* spirv);
- } // namespace comp
- } // namespace spvtools
- #endif // SOURCE_COMP_MARKV_H_
|