mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-30 15:00:06 +00:00
b6319c3a43
This CL breaks the monolithic markv_codec file into files for the base class, encoder, decoder and logger.
75 lines
3.2 KiB
C++
75 lines
3.2 KiB
C++
// 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_
|