From 4e01e9ffc54ddfc9a1a5b285b4434e2f3ac4854e Mon Sep 17 00:00:00 2001 From: Jannik Vogel Date: Fri, 13 May 2016 08:46:14 +0200 Subject: Refactor access to state in shader-jit --- src/video_core/shader/shader.h | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src/video_core/shader/shader.h') diff --git a/src/video_core/shader/shader.h b/src/video_core/shader/shader.h index 983e4a967..84898f21c 100644 --- a/src/video_core/shader/shader.h +++ b/src/video_core/shader/shader.h @@ -283,10 +283,10 @@ struct UnitState { static size_t InputOffset(const SourceRegister& reg) { switch (reg.GetRegisterType()) { case RegisterType::Input: - return offsetof(UnitState::Registers, input) + reg.GetIndex()*sizeof(Math::Vec4); + return offsetof(UnitState, registers.input) + reg.GetIndex()*sizeof(Math::Vec4); case RegisterType::Temporary: - return offsetof(UnitState::Registers, temporary) + reg.GetIndex()*sizeof(Math::Vec4); + return offsetof(UnitState, registers.temporary) + reg.GetIndex()*sizeof(Math::Vec4); default: UNREACHABLE(); @@ -297,10 +297,10 @@ struct UnitState { static size_t OutputOffset(const DestRegister& reg) { switch (reg.GetRegisterType()) { case RegisterType::Output: - return offsetof(UnitState::Registers, output) + reg.GetIndex()*sizeof(Math::Vec4); + return offsetof(UnitState, registers.output) + reg.GetIndex()*sizeof(Math::Vec4); case RegisterType::Temporary: - return offsetof(UnitState::Registers, temporary) + reg.GetIndex()*sizeof(Math::Vec4); + return offsetof(UnitState, registers.temporary) + reg.GetIndex()*sizeof(Math::Vec4); default: UNREACHABLE(); @@ -323,6 +323,23 @@ struct ShaderSetup { std::array, 4> i; } uniforms; + static size_t UniformOffset(RegisterType type, unsigned index) { + switch (type) { + case RegisterType::FloatUniform: + return offsetof(ShaderSetup, uniforms.f) + index*sizeof(Math::Vec4); + + case RegisterType::BoolUniform: + return offsetof(ShaderSetup, uniforms.b) + index*sizeof(bool); + + case RegisterType::IntUniform: + return offsetof(ShaderSetup, uniforms.i) + index*sizeof(Math::Vec4); + + default: + UNREACHABLE(); + return 0; + } + } + std::array program_code; std::array swizzle_data; -- cgit v1.2.3