[GPU] Use polygon mode only for DualMode, not non-Disabled

This commit is contained in:
Triang3l 2021-06-07 16:40:01 +03:00
parent 3f156f26c4
commit 22ee200f3e
3 changed files with 10 additions and 2 deletions

View File

@ -1444,7 +1444,7 @@ bool PipelineCache::GetCurrentStateDescription(
poly_offset_scale = regs[XE_GPU_REG_PA_SU_POLY_OFFSET_BACK_SCALE].f32;
}
}
if (pa_su_sc_mode_cntl.poly_mode == xenos::PolygonModeEnable::kDisabled) {
if (pa_su_sc_mode_cntl.poly_mode != xenos::PolygonModeEnable::kDualMode) {
description_out.fill_mode_wireframe = 0;
}
} else {

View File

@ -334,7 +334,11 @@ union alignas(uint32_t) PA_SU_SC_MODE_CNTL {
uint32_t cull_front : 1; // +0
uint32_t cull_back : 1; // +1
// 0 - front is CCW, 1 - front is CW.
uint32_t face : 1; // +2
uint32_t face : 1; // +2
// The game Fuse uses poly_mode 2 for triangles, which is "reserved" on R6xx
// and not defined on Adreno 2xx, but polymode_front/back_ptype are 0
// (points) in this case in Fuse, which should not be respected for
// non-kDualMode as the game wants to draw filled triangles.
xenos::PolygonModeEnable poly_mode : 2; // +3
xenos::PolygonType polymode_front_ptype : 3; // +5
xenos::PolygonType polymode_back_ptype : 3; // +8

View File

@ -753,6 +753,10 @@ enum class TessellationMode : uint32_t {
enum class PolygonModeEnable : uint32_t {
kDisabled = 0, // Render triangles.
kDualMode = 1, // Send 2 sets of 3 polygons with the specified polygon type.
// The game Fuse uses 2 for triangles, which is "reserved" on R6xx and not
// defined on Adreno 2xx, but polymode_front/back_ptype are 0 (points) in this
// case in Fuse, which should not be respected for non-kDualMode as the game
// wants to draw filled triangles.
};
enum class PolygonType : uint32_t {