dxvk/src/dxbc/dxbc_module.h

54 lines
1.1 KiB
C++

#pragma once
#include "../dxvk/dxvk_shader.h"
#include "dxbc_chunk_isgn.h"
#include "dxbc_chunk_shex.h"
#include "dxbc_header.h"
#include "dxbc_reader.h"
// References used for figuring out DXBC:
// - https://github.com/tgjones/slimshader-cpp
// - Wine
namespace dxvk {
/**
* \brief DXBC shader module
*
* Reads the DXBC byte code and extracts information
* about the resource bindings and the instruction
* stream. A module can then be compiled to SPIR-V.
*/
class DxbcModule {
public:
DxbcModule(DxbcReader& reader);
~DxbcModule();
/**
* \brief Shader type and version
* \returns Shader type and version
*/
DxbcProgramVersion version() const {
return m_shexChunk->version();
}
/**
* \brief Compiles DXBC shader to SPIR-V module
* \returns The compiled DXVK shader object
*/
SpirvCodeBuffer compile() const;
private:
DxbcHeader m_header;
Rc<DxbcIsgn> m_isgnChunk;
Rc<DxbcIsgn> m_osgnChunk;
Rc<DxbcShex> m_shexChunk;
};
}