[D3D12] Cleanup primitive types and front/back facing

This commit is contained in:
Triang3l
2019-07-13 22:25:03 +03:00
parent a16a746432
commit 4825e69fda
12 changed files with 323 additions and 303 deletions

View File

@@ -35,10 +35,10 @@ DEFINE_string(shader_input_type, "",
DEFINE_string(shader_output, "", "Output shader file path.");
DEFINE_string(shader_output_type, "ucode",
"Translator to use: [ucode, glsl45, spirv, spirvtext, dxbc].");
DEFINE_string(shader_output_domain, "",
"Abstract patch type in the generated tessellation evaluation "
"(domain) shader, or unspecified to produce a vertex shader: "
"[triangle, quad].");
DEFINE_string(shader_output_patch, "",
"Tessellation patch type in the generated tessellation "
"evaluation (domain) shader, or unspecified to produce a vertex "
"shader: [line, triangle, quad].");
DEFINE_bool(shader_output_dxbc_rov, false,
"Output ROV-based output-merger code in DXBC pixel shaders.");
@@ -108,23 +108,22 @@ int shader_compiler_main(const std::vector<std::wstring>& args) {
} else if (FLAGS_shader_output_type == "dxbc") {
translator =
std::make_unique<DxbcShaderTranslator>(0, FLAGS_shader_output_dxbc_rov);
DxbcShaderTranslator::VertexShaderType dxbc_vertex_shader_type;
if (FLAGS_shader_output_domain == "triangle") {
dxbc_vertex_shader_type =
DxbcShaderTranslator::VertexShaderType::kTriangleDomain;
} else if (FLAGS_shader_output_domain == "quad") {
dxbc_vertex_shader_type =
DxbcShaderTranslator::VertexShaderType::kQuadDomain;
} else {
dxbc_vertex_shader_type = DxbcShaderTranslator::VertexShaderType::kVertex;
}
static_cast<DxbcShaderTranslator*>(translator.get())
->SetVertexShaderType(dxbc_vertex_shader_type);
} else {
translator = std::make_unique<UcodeShaderTranslator>();
}
translator->Translate(shader.get());
PrimitiveType patch_primitive_type = PrimitiveType::kNone;
if (shader_type == ShaderType::kVertex) {
if (FLAGS_shader_output_patch == "line") {
patch_primitive_type == PrimitiveType::kLinePatch;
} else if (FLAGS_shader_output_patch == "triangle") {
patch_primitive_type == PrimitiveType::kTrianglePatch;
} else if (FLAGS_shader_output_patch == "quad") {
patch_primitive_type == PrimitiveType::kQuadPatch;
}
}
translator->Translate(shader.get(), patch_primitive_type);
const void* source_data = shader->translated_binary().data();
size_t source_data_size = shader->translated_binary().size();