47 lines
1.5 KiB
C++
47 lines
1.5 KiB
C++
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "video_core/engines/maxwell_3d.h"
|
|
|
|
namespace VideoCore {
|
|
|
|
inline Tegra::Engines::Maxwell3D::Regs::PolygonMode EffectivePolygonMode(
|
|
const Tegra::Engines::Maxwell3D::Regs& regs) {
|
|
using Maxwell = Tegra::Engines::Maxwell3D::Regs;
|
|
|
|
const bool cull_enabled = regs.gl_cull_test_enabled != 0;
|
|
const auto cull_face = regs.gl_cull_face;
|
|
const bool cull_front = cull_enabled && (cull_face == Maxwell::CullFace::Front ||
|
|
cull_face == Maxwell::CullFace::FrontAndBack);
|
|
const bool cull_back = cull_enabled && (cull_face == Maxwell::CullFace::Back ||
|
|
cull_face == Maxwell::CullFace::FrontAndBack);
|
|
|
|
const bool render_front = !cull_front;
|
|
const bool render_back = !cull_back;
|
|
|
|
const auto front_mode = regs.polygon_mode_front;
|
|
const auto back_mode = regs.polygon_mode_back;
|
|
|
|
if (render_front && render_back && front_mode != back_mode) {
|
|
if (front_mode == Maxwell::PolygonMode::Line || back_mode == Maxwell::PolygonMode::Line) {
|
|
return Maxwell::PolygonMode::Line;
|
|
}
|
|
if (front_mode == Maxwell::PolygonMode::Point || back_mode == Maxwell::PolygonMode::Point) {
|
|
return Maxwell::PolygonMode::Point;
|
|
}
|
|
}
|
|
|
|
if (render_front) {
|
|
return front_mode;
|
|
}
|
|
if (render_back) {
|
|
return back_mode;
|
|
}
|
|
return front_mode;
|
|
}
|
|
|
|
} // namespace VideoCore
|
|
|