From 918d6d3514076e90ca6676e6512216098b67e660 Mon Sep 17 00:00:00 2001 From: swurl Date: Mon, 21 Apr 2025 15:32:23 -0400 Subject: [PATCH] proper placement of clip distance init Signed-off-by: swurl --- CMakeLists.txt | 4 ++++ .../backend/spirv/emit_spirv_context_get_set.cpp | 8 -------- .../backend/spirv/emit_spirv_special.cpp | 12 +++++++++++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b88ab64e53..a68aa27e2b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -285,6 +285,10 @@ if (ARCHITECTURE_arm64 AND (ANDROID OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")) add_definitions(-DHAS_NCE=1) endif() +if (YUZU_LOG_BY_LINE) + add_definitions(-DYUZU_LOG_BY_LINE=1) +endif() + # Configure C++ standard # =========================== diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp index d52ec296ed..5dab8b62ea 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp @@ -54,14 +54,6 @@ std::optional OutputAttrPointer(EmitContext& ctx, IR::Attribute attr) { } } - for (u32 i = 0; i < ctx.profile.max_user_clip_distances; ++i) { - if (!clip_distance_written.test(i)) { - const Id idx = ctx.Const(i); - const Id element = OutputAccessChain(ctx, ctx.output_f32, ctx.clip_distances, idx); - ctx.OpStore(element, ctx.Const(0.0f)); - } - } - switch (attr) { case IR::Attribute::PointSize: return ctx.output_point_size; diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp index 7140ed6f4a..fe5e70a63b 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp @@ -108,7 +108,17 @@ void EmitPrologue(EmitContext& ctx) { ctx.OpStore(element_info.id, value); element += num; } - } + } + + if (Sirit::ValidId(ctx.clip_distances)) { + for (u32 i = 0; i < ctx.profile.max_user_clip_distances; ++i) { + if (!clip_distance_written.test(i)) { + const Id idx = ctx.Const(i); + const Id element = ctx.OpAccessChain(ctx.output_f32, ctx.clip_distances, idx); + ctx.OpStore(element, ctx.Const(0.0f)); + } + } + } } if (ctx.stage == Stage::VertexB || ctx.stage == Stage::Geometry) { SetFixedPipelinePointSize(ctx);