Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pass the vr_use_immersive_mode as a Vertex Shader Uniform flag #37

Merged
merged 1 commit into from
Jan 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/video_core/rasterizer_accelerated.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include <limits>
#include "common/alignment.h"
#include "common/settings.h"
#include "core/memory.h"
#include "video_core/pica_state.h"
#include "video_core/rasterizer_accelerated.h"
Expand Down Expand Up @@ -136,6 +137,7 @@ void RasterizerAccelerated::SyncEntireState() {

// Sync uniforms
SyncClipPlane();
SyncVRImmersive();
SyncDepthScale();
SyncDepthOffset();
SyncAlphaTest();
Expand Down Expand Up @@ -860,4 +862,9 @@ void RasterizerAccelerated::SyncClipPlane() {
}
}

void RasterizerAccelerated::SyncVRImmersive() {
vs_uniform_block_data.data.vr_use_immersive_mode = Settings::values.vr_use_immersive_mode.GetValue();
vs_uniform_block_data.dirty = true;
}

} // namespace VideoCore
3 changes: 3 additions & 0 deletions src/video_core/rasterizer_accelerated.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class RasterizerAccelerated : public RasterizerInterface {
/// Syncs the clip plane state to match the PICA register
void SyncClipPlane();

/// Syncs the VR immersive flag
void SyncVRImmersive();

protected:
/// Structure that keeps tracks of the vertex shader uniform state
struct VSUniformBlockData {
Expand Down
27 changes: 8 additions & 19 deletions src/video_core/shader/generator/glsl_shader_gen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ layout (set = 0, binding = 1, std140) uniform vs_data {
#else
layout (binding = 1, std140) uniform vs_data {
#endif
bool vr_use_immersive_mode;
bool enable_clip1;
vec4 clip_coef;
};
Expand Down Expand Up @@ -1681,12 +1682,7 @@ void main() {
}
)";

if (!Settings::values.vr_use_immersive_mode.GetValue())
{
out+= "\ngl_Position = vec4(vtx_pos.x, vtx_pos.y, -vtx_pos.z, vtx_pos.w);\n";
} else {
out+= "\ngl_Position = vec4(vtx_pos.x / 3.0, vtx_pos.y / 3.0, -vtx_pos.z, vtx_pos.w);\n";
}
out+= "\ngl_Position = vec4(vtx_pos.x, vtx_pos.y, -vtx_pos.z, vtx_pos.w);\n";

if (use_clip_planes) {
out += R"(
Expand Down Expand Up @@ -1807,14 +1803,7 @@ std::string GenerateVertexShader(const Pica::Shader::ShaderSetup& setup, const P
out += " vtx_pos.z = 0.f;\n";
out += " }\n";

if (!Settings::values.vr_use_immersive_mode.GetValue())
{
out+= " gl_Position = vec4(vtx_pos.x, vtx_pos.y, -vtx_pos.z, vtx_pos.w);\n";
}
else
{
out+= " gl_Position = vec4(vtx_pos.x / 3.0, vtx_pos.y / 3.0, -vtx_pos.z, vtx_pos.w);\n";
}
out+= " gl_Position = vec4(vtx_pos.x, vtx_pos.y, -vtx_pos.z, vtx_pos.w);\n";

if (config.state.use_clip_planes) {
out += " gl_ClipDistance[0] = -vtx_pos.z;\n"; // fixed PICA clipping plane z <= 0
Expand Down Expand Up @@ -1913,11 +1902,11 @@ struct Vertex {
out += " vtx_pos.z = 0.f;\n";
out += " }\n";

if (!Settings::values.vr_use_immersive_mode.GetValue()) {
out+= " gl_Position = vec4(vtx_pos.x, vtx_pos.y, -vtx_pos.z, vtx_pos.w);\n";
} else {
out+= " gl_Position = vec4(vtx_pos.x / 3.0, vtx_pos.y / 3.0, -vtx_pos.z, vtx_pos.w);\n";
}
out += " if (vr_use_immersive_mode) {\n";
out += " gl_Position = vec4(vtx_pos.x / 3.0, vtx_pos.y / 3.0, -vtx_pos.z, vtx_pos.w);\n";
out += " } else {\n";
out += " gl_Position = vec4(vtx_pos.x, vtx_pos.y, -vtx_pos.z, vtx_pos.w);\n";
out += " }\n\n";

if (state.use_clip_planes) {
out += " gl_ClipDistance[0] = -vtx_pos.z;\n"; // fixed PICA clipping plane z <= 0
Expand Down
4 changes: 0 additions & 4 deletions src/video_core/shader/generator/shader_gen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ PicaFSConfig::PicaFSConfig(const Pica::Regs& regs, bool has_fragment_shader_inte
? regs.framebuffer.output_merger.alpha_test.func.Value()
: Pica::FramebufferRegs::CompareFunc::Always);

state.vr_use_immersive_mode.Assign(Settings::values.vr_use_immersive_mode.GetValue());

state.texture0_type.Assign(regs.texturing.texture0.type);

state.texture2_use_coord1.Assign(regs.texturing.main_config.texture2_use_coord1 != 0);
Expand Down Expand Up @@ -270,8 +268,6 @@ void PicaVSConfigState::Init(const Pica::Regs& regs, Pica::Shader::ShaderSetup&
if (!use_geometry_shader_) {
gs_state.Init(regs, use_clip_planes_);
}

vr_use_immersive_mode = Settings::values.vr_use_immersive_mode.GetValue();
}

PicaVSConfig::PicaVSConfig(const Pica::Regs& regs, Pica::Shader::ShaderSetup& setup,
Expand Down
3 changes: 0 additions & 3 deletions src/video_core/shader/generator/shader_gen.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ struct PicaFSConfigState {
BitField<28, 1, u32> shadow_texture_orthographic;
BitField<29, 1, u32> use_fragment_shader_interlock;
BitField<30, 1, u32> use_custom_normal_map;
BitField<31, 1, u32> vr_use_immersive_mode;
};

union {
Expand Down Expand Up @@ -217,8 +216,6 @@ struct PicaVSConfigState {

PicaGSConfigState gs_state;

bool vr_use_immersive_mode;

};

/**
Expand Down
1 change: 1 addition & 0 deletions src/video_core/shader/generator/shader_uniforms.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ struct PicaUniformsData {
};

struct VSUniformData {
bool vr_use_immersive_mode;
bool enable_clip1;
alignas(16) Common::Vec4f clip_coef;
};
Expand Down