yuzu-emu
/
yuzu-mainline
Archived
1
0
Fork 0

fixed_pipeline_state: Add depth clamp

This commit is contained in:
ReinUsesLisp 2020-01-06 21:11:23 -03:00
parent 9c548146ca
commit 3142f1b597
2 changed files with 18 additions and 10 deletions

View File

@ -109,6 +109,9 @@ constexpr FixedPipelineState::Rasterizer GetRasterizerState(const Maxwell& regs)
const auto topology = static_cast<std::size_t>(regs.draw.topology.Value()); const auto topology = static_cast<std::size_t>(regs.draw.topology.Value());
const bool depth_bias_enabled = enabled_lut[PolygonOffsetEnableLUT[topology]]; const bool depth_bias_enabled = enabled_lut[PolygonOffsetEnableLUT[topology]];
const auto& clip = regs.view_volume_clip_control;
const bool depth_clamp_enabled = clip.depth_clamp_near == 1 || clip.depth_clamp_far == 1;
Maxwell::Cull::FrontFace front_face = regs.cull.front_face; Maxwell::Cull::FrontFace front_face = regs.cull.front_face;
if (regs.screen_y_control.triangle_rast_flip != 0 && if (regs.screen_y_control.triangle_rast_flip != 0 &&
regs.viewport_transform[0].scale_y > 0.0f) { regs.viewport_transform[0].scale_y > 0.0f) {
@ -119,8 +122,9 @@ constexpr FixedPipelineState::Rasterizer GetRasterizerState(const Maxwell& regs)
} }
const bool gl_ndc = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne; const bool gl_ndc = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne;
return FixedPipelineState::Rasterizer(regs.cull.enabled, depth_bias_enabled, gl_ndc, return FixedPipelineState::Rasterizer(regs.cull.enabled, depth_bias_enabled,
regs.cull.cull_face, front_face); depth_clamp_enabled, gl_ndc, regs.cull.cull_face,
front_face);
} }
} // Anonymous namespace } // Anonymous namespace
@ -222,15 +226,17 @@ bool FixedPipelineState::Tessellation::operator==(const Tessellation& rhs) const
std::size_t FixedPipelineState::Rasterizer::Hash() const noexcept { std::size_t FixedPipelineState::Rasterizer::Hash() const noexcept {
return static_cast<std::size_t>(cull_enable) ^ return static_cast<std::size_t>(cull_enable) ^
(static_cast<std::size_t>(depth_bias_enable) << 1) ^ (static_cast<std::size_t>(depth_bias_enable) << 1) ^
(static_cast<std::size_t>(ndc_minus_one_to_one) << 2) ^ (static_cast<std::size_t>(depth_clamp_enable) << 2) ^
(static_cast<std::size_t>(ndc_minus_one_to_one) << 3) ^
(static_cast<std::size_t>(cull_face) << 24) ^ (static_cast<std::size_t>(cull_face) << 24) ^
(static_cast<std::size_t>(front_face) << 48); (static_cast<std::size_t>(front_face) << 48);
} }
bool FixedPipelineState::Rasterizer::operator==(const Rasterizer& rhs) const noexcept { bool FixedPipelineState::Rasterizer::operator==(const Rasterizer& rhs) const noexcept {
return std::tie(cull_enable, depth_bias_enable, ndc_minus_one_to_one, cull_face, front_face) == return std::tie(cull_enable, depth_bias_enable, depth_clamp_enable, ndc_minus_one_to_one,
std::tie(rhs.cull_enable, rhs.depth_bias_enable, rhs.ndc_minus_one_to_one, rhs.cull_face, cull_face, front_face) ==
rhs.front_face); std::tie(rhs.cull_enable, rhs.depth_bias_enable, rhs.depth_clamp_enable,
rhs.ndc_minus_one_to_one, rhs.cull_face, rhs.front_face);
} }
std::size_t FixedPipelineState::DepthStencil::Hash() const noexcept { std::size_t FixedPipelineState::DepthStencil::Hash() const noexcept {

View File

@ -170,15 +170,17 @@ struct FixedPipelineState {
}; };
struct Rasterizer { struct Rasterizer {
constexpr Rasterizer(bool cull_enable, bool depth_bias_enable, bool ndc_minus_one_to_one, constexpr Rasterizer(bool cull_enable, bool depth_bias_enable, bool depth_clamp_enable,
Maxwell::Cull::CullFace cull_face, Maxwell::Cull::FrontFace front_face) bool ndc_minus_one_to_one, Maxwell::Cull::CullFace cull_face,
Maxwell::Cull::FrontFace front_face)
: cull_enable{cull_enable}, depth_bias_enable{depth_bias_enable}, : cull_enable{cull_enable}, depth_bias_enable{depth_bias_enable},
ndc_minus_one_to_one{ndc_minus_one_to_one}, cull_face{cull_face}, front_face{ depth_clamp_enable{depth_clamp_enable}, ndc_minus_one_to_one{ndc_minus_one_to_one},
front_face} {} cull_face{cull_face}, front_face{front_face} {}
Rasterizer() = default; Rasterizer() = default;
bool cull_enable; bool cull_enable;
bool depth_bias_enable; bool depth_bias_enable;
bool depth_clamp_enable;
bool ndc_minus_one_to_one; bool ndc_minus_one_to_one;
Maxwell::Cull::CullFace cull_face; Maxwell::Cull::CullFace cull_face;
Maxwell::Cull::FrontFace front_face; Maxwell::Cull::FrontFace front_face;