mirror of
https://github.com/citra-emu/citra-canary.git
synced 2024-12-25 05:15:37 +00:00
Fix geometry pipeline; attempt to fix motion controls
This commit is contained in:
parent
35c3ca995c
commit
0effb229cd
|
@ -40,7 +40,9 @@ void Module::serialize(Archive& ar, const unsigned int) {
|
|||
ar& next_gyroscope_index;
|
||||
ar& enable_accelerometer_count;
|
||||
ar& enable_gyroscope_count;
|
||||
ReloadInputDevices();
|
||||
if (Archive::is_loading::value) {
|
||||
LoadInputDevices();
|
||||
}
|
||||
// Pad state not needed as it's always updated
|
||||
// Update events are set in the constructor
|
||||
// Devices are set from the implementation (and are stateless afaik)
|
||||
|
|
|
@ -49,7 +49,7 @@ private:
|
|||
// TODO: what happens when the input size is not divisible by the output size?
|
||||
class GeometryPipeline_Point : public GeometryPipelineBackend {
|
||||
public:
|
||||
GeometryPipeline_Point() : regs(g_state.regs), unit(g_state.gs_unit) {
|
||||
GeometryPipeline_Point(const Regs& regs, Shader::GSUnitState& unit) : regs(regs), unit(unit) {
|
||||
ASSERT(regs.pipeline.variable_primitive == 0);
|
||||
ASSERT(regs.gs.input_to_uniform == 0);
|
||||
vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1;
|
||||
|
@ -89,6 +89,8 @@ private:
|
|||
Common::Vec4<float24>* buffer_end;
|
||||
unsigned int vs_output_num;
|
||||
|
||||
GeometryPipeline_Point() : regs(g_state.regs), unit(g_state.gs_unit) {}
|
||||
|
||||
template <typename Class, class Archive>
|
||||
static void serialize_common(Class* self, Archive& ar, const unsigned int version) {
|
||||
ar& boost::serialization::base_object<GeometryPipelineBackend>(*self);
|
||||
|
@ -125,7 +127,8 @@ private:
|
|||
// value in the batch. This mode is usually used for subdivision.
|
||||
class GeometryPipeline_VariablePrimitive : public GeometryPipelineBackend {
|
||||
public:
|
||||
GeometryPipeline_VariablePrimitive() : regs(g_state.regs), setup(g_state.gs) {
|
||||
GeometryPipeline_VariablePrimitive(const Regs& regs, Shader::ShaderSetup& setup)
|
||||
: regs(regs), setup(setup) {
|
||||
ASSERT(regs.pipeline.variable_primitive == 1);
|
||||
ASSERT(regs.gs.input_to_uniform == 1);
|
||||
vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1;
|
||||
|
@ -183,6 +186,8 @@ private:
|
|||
Common::Vec4<float24>* buffer_cur;
|
||||
unsigned int vs_output_num;
|
||||
|
||||
GeometryPipeline_VariablePrimitive() : regs(g_state.regs), setup(g_state.gs) {}
|
||||
|
||||
template <typename Class, class Archive>
|
||||
static void serialize_common(Class* self, Archive& ar, const unsigned int version) {
|
||||
ar& boost::serialization::base_object<GeometryPipelineBackend>(*self);
|
||||
|
@ -217,7 +222,8 @@ private:
|
|||
// particle system.
|
||||
class GeometryPipeline_FixedPrimitive : public GeometryPipelineBackend {
|
||||
public:
|
||||
GeometryPipeline_FixedPrimitive() : regs(g_state.regs), setup(g_state.gs) {
|
||||
GeometryPipeline_FixedPrimitive(const Regs& regs, Shader::ShaderSetup& setup)
|
||||
: regs(regs), setup(setup) {
|
||||
ASSERT(regs.pipeline.variable_primitive == 0);
|
||||
ASSERT(regs.gs.input_to_uniform == 1);
|
||||
vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1;
|
||||
|
@ -256,6 +262,8 @@ private:
|
|||
Common::Vec4<float24>* buffer_end;
|
||||
unsigned int vs_output_num;
|
||||
|
||||
GeometryPipeline_FixedPrimitive() : regs(g_state.regs), setup(g_state.gs) {}
|
||||
|
||||
template <typename Class, class Archive>
|
||||
static void serialize_common(Class* self, Archive& ar, const unsigned int version) {
|
||||
ar& boost::serialization::base_object<GeometryPipelineBackend>(*self);
|
||||
|
@ -329,13 +337,13 @@ void GeometryPipeline::Reconfigure() {
|
|||
|
||||
switch (state.regs.pipeline.gs_config.mode) {
|
||||
case PipelineRegs::GSMode::Point:
|
||||
backend = std::make_unique<GeometryPipeline_Point>();
|
||||
backend = std::make_unique<GeometryPipeline_Point>(state.regs, state.gs_unit);
|
||||
break;
|
||||
case PipelineRegs::GSMode::VariablePrimitive:
|
||||
backend = std::make_unique<GeometryPipeline_VariablePrimitive>();
|
||||
backend = std::make_unique<GeometryPipeline_VariablePrimitive>(state.regs, state.gs);
|
||||
break;
|
||||
case PipelineRegs::GSMode::FixedPrimitive:
|
||||
backend = std::make_unique<GeometryPipeline_FixedPrimitive>();
|
||||
backend = std::make_unique<GeometryPipeline_FixedPrimitive>(state.regs, state.gs);
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
|
|
Loading…
Reference in a new issue