[Vulkan] PsParamGen

This commit is contained in:
Triang3l
2022-06-26 15:01:27 +03:00
parent a99a1be880
commit 6688b13773
5 changed files with 212 additions and 6 deletions

View File

@@ -134,13 +134,27 @@ VulkanPipelineCache::GetCurrentPixelShaderModification(
assert_true(shader.type() == xenos::ShaderType::kPixel);
assert_true(shader.is_ucode_analyzed());
const auto& regs = register_file_;
auto sq_program_cntl = regs.Get<reg::SQ_PROGRAM_CNTL>();
SpirvShaderTranslator::Modification modification(
shader_translator_->GetDefaultPixelShaderModification(
shader.GetDynamicAddressableRegisterCount(
sq_program_cntl.ps_num_reg)));
if (sq_program_cntl.param_gen) {
auto sq_context_misc = regs.Get<reg::SQ_CONTEXT_MISC>();
if (sq_context_misc.param_gen_pos <
std::min(std::max(modification.pixel.dynamic_addressable_register_count,
shader.register_static_address_bound()),
xenos::kMaxInterpolators)) {
modification.pixel.param_gen_enable = 1;
modification.pixel.param_gen_interpolator = sq_context_misc.param_gen_pos;
auto vgt_draw_initiator = regs.Get<reg::VGT_DRAW_INITIATOR>();
modification.pixel.param_gen_point = uint32_t(
vgt_draw_initiator.prim_type == xenos::PrimitiveType::kPointList);
}
}
return modification;
}