[D3D12] DXBC STAT writing
This commit is contained in:
parent
501bec8e5e
commit
c6e0c66c44
|
@ -32,6 +32,8 @@ void DxbcShaderTranslator::Reset() {
|
|||
|
||||
rdef_constants_used_ = 0;
|
||||
writes_depth_ = false;
|
||||
|
||||
std::memset(&stat_, 0, sizeof(stat_));
|
||||
}
|
||||
|
||||
std::vector<uint8_t> DxbcShaderTranslator::CompleteTranslation() {
|
||||
|
@ -85,6 +87,18 @@ std::vector<uint8_t> DxbcShaderTranslator::CompleteTranslation() {
|
|||
(uint32_t(shader_object_.size()) - chunk_position_dwords - 2) *
|
||||
sizeof(uint32_t);
|
||||
|
||||
// TODO(Triang3l): Write SHEX.
|
||||
|
||||
// Write STATistics.
|
||||
chunk_position_dwords = uint32_t(shader_object_.size());
|
||||
shader_object_[12] = chunk_position_dwords * sizeof(uint32_t);
|
||||
shader_object_.push_back('TATS');
|
||||
shader_object_.push_back(sizeof(stat_));
|
||||
shader_object_.resize(shader_object_.size() +
|
||||
sizeof(stat_) / sizeof(uint32_t));
|
||||
std::memcpy(&shader_object_[chunk_position_dwords + 2], &stat_,
|
||||
sizeof(stat_));
|
||||
|
||||
// Fill the remaining fields of the header and copy bytes out.
|
||||
uint32_t shader_object_size =
|
||||
uint32_t(shader_object_.size() * sizeof(uint32_t));
|
||||
|
|
|
@ -217,6 +217,55 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
rdef_constant_buffers_[size_t(RdefConstantBufferIndex::kCount)];
|
||||
|
||||
bool writes_depth_;
|
||||
|
||||
// The STAT chunk (based on Wine d3dcompiler_parse_stat).
|
||||
struct Statistics {
|
||||
uint32_t instruction_count;
|
||||
uint32_t temp_register_count;
|
||||
// Unknown in Wine.
|
||||
uint32_t def_count;
|
||||
uint32_t dcl_count;
|
||||
uint32_t float_instruction_count;
|
||||
uint32_t int_instruction_count;
|
||||
uint32_t uint_instruction_count;
|
||||
uint32_t static_flow_control_count;
|
||||
uint32_t dynamic_flow_control_count;
|
||||
// Unknown in Wine.
|
||||
uint32_t macro_instruction_count;
|
||||
uint32_t temp_array_count;
|
||||
uint32_t array_instruction_count;
|
||||
uint32_t cut_instruction_count;
|
||||
uint32_t emit_instruction_count;
|
||||
uint32_t texture_normal_instructions;
|
||||
uint32_t texture_load_instructions;
|
||||
uint32_t texture_comp_instructions;
|
||||
uint32_t texture_bias_instructions;
|
||||
uint32_t texture_gradient_instructions;
|
||||
uint32_t mov_instruction_count;
|
||||
// Unknown in Wine.
|
||||
uint32_t movc_instruction_count;
|
||||
uint32_t conversion_instruction_count;
|
||||
// Unknown in Wine.
|
||||
uint32_t unknown_22;
|
||||
uint32_t input_primitive;
|
||||
uint32_t gs_output_topology;
|
||||
uint32_t gs_max_output_vertex_count;
|
||||
uint32_t unknown_26;
|
||||
uint32_t unknown_27;
|
||||
uint32_t unknown_28;
|
||||
uint32_t unknown_29;
|
||||
uint32_t c_control_points;
|
||||
uint32_t hs_output_primitive;
|
||||
uint32_t hs_partitioning;
|
||||
uint32_t tessellator_domain;
|
||||
// Unknown in Wine.
|
||||
uint32_t c_barrier_instructions;
|
||||
// Unknown in Wine.
|
||||
uint32_t c_interlocked_instructions;
|
||||
// Unknown in Wine.
|
||||
uint32_t c_texture_store_instructions;
|
||||
};
|
||||
Statistics stat_;
|
||||
};
|
||||
|
||||
} // namespace gpu
|
||||
|
|
Loading…
Reference in New Issue