Browse Source

proper placement of clip distance init

Signed-off-by: swurl <swurl@swurl.xyz>
nce_cpp
swurl 8 months ago
parent
commit
918d6d3514
  1. 4
      CMakeLists.txt
  2. 8
      src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
  3. 12
      src/shader_recompiler/backend/spirv/emit_spirv_special.cpp

4
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
# ===========================

8
src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp

@ -54,14 +54,6 @@ std::optional<OutAttr> 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;

12
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);

Loading…
Cancel
Save