diff --git a/app/src/main/cpp/skyline/gpu/interconnect/graphics_context.h b/app/src/main/cpp/skyline/gpu/interconnect/graphics_context.h index 81c083e2..37037ae3 100644 --- a/app/src/main/cpp/skyline/gpu/interconnect/graphics_context.h +++ b/app/src/main/cpp/skyline/gpu/interconnect/graphics_context.h @@ -1152,6 +1152,10 @@ namespace skyline::gpu::interconnect { rasterizerState.get().depthBiasSlopeFactor = factor; } + void SetDepthMode(maxwell3d::DepthMode mode) { + UpdateRuntimeInformation(runtimeInfo.convert_depth_mode, mode == maxwell3d::DepthMode::MinusOneToOne, maxwell3d::PipelineStage::Vertex, maxwell3d::PipelineStage::Geometry); + } + /* Color Blending */ private: std::array commonRtBlendState{}, independentRtBlendState{}; //!< Per-RT blending state for common/independent blending for trivial toggling behavior diff --git a/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell/types.h b/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell/types.h index b5e35b7c..93d9755a 100644 --- a/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell/types.h +++ b/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell/types.h @@ -761,5 +761,10 @@ namespace skyline::soc::gm20b::engine::maxwell3d::type { } format; }; + enum class DepthMode : u32 { + MinusOneToOne = 0, + ZeroToOne = 1 + }; + #pragma pack(pop) } diff --git a/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell_3d.cpp b/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell_3d.cpp index 10aa0f33..b9ad83b4 100644 --- a/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell_3d.cpp +++ b/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell_3d.cpp @@ -668,6 +668,10 @@ namespace skyline::soc::gm20b::engine::maxwell3d { BOOST_PP_REPEAT(16, CBUF_UPDATE_CALLBACKS, 0) #undef CBUF_UPDATE_CALLBACKS + MAXWELL3D_CASE(depthMode, { + context.SetDepthMode(depthMode); + }) + default: break; } diff --git a/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell_3d.h b/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell_3d.h index 226e8213..7f3132cd 100644 --- a/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell_3d.h +++ b/app/src/main/cpp/skyline/soc/gm20b/engines/maxwell_3d.h @@ -66,6 +66,8 @@ namespace skyline::soc::gm20b::engine::maxwell3d { Register<0x35D, u32> drawVertexFirst; //!< The first vertex to draw Register<0x35E, u32> drawVertexCount; //!< The amount of vertices to draw, calling this method triggers non-indexed drawing + Register<0x35F, type::DepthMode> depthMode; + Register<0x360, std::array> clearColorValue; Register<0x364, float> clearDepthValue; Register<0x368, u32> clearStencilValue;