mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-04 19:36:27 +00:00
[spir-v] Correcting output components
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
@@ -98,22 +101,22 @@ void EmitShuffleButterfly(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, Sca
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EmitQuadBroadcast(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, ScalarU32 lane) {
|
void EmitQuadBroadcast(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, ScalarU32 lane) {
|
||||||
// QuadBroadcast: src = (thread_id & ~3) | (lane & 3) — SHFLIDX with quad mask 0x1C03
|
// QuadBroadcast: src = (thread_id & ~3) | (lane & 3) — SHFIDX with quad mask 0x1C03
|
||||||
const Register ret{ctx.reg_alloc.Define(inst)};
|
const Register ret{ctx.reg_alloc.Define(inst)};
|
||||||
ctx.Add("AND.U RC.x,{}.threadid,~3;"
|
ctx.Add("AND.U RC.x,{}.threadid,~3;"
|
||||||
"AND.U RC.y,{},3;"
|
"AND.U RC.y,{},3;"
|
||||||
"OR.U RC.x,RC.x,RC.y;"
|
"OR.U RC.x,RC.x,RC.y;"
|
||||||
"SHFLIDX.U {},{},RC.x,0x1C03;"
|
"SHFIDX.U {},{},RC.x,0x1C03;"
|
||||||
"MOV.U {}.x,{}.x;",
|
"MOV.U {}.x,{}.y;",
|
||||||
ctx.stage_name, lane, ret, value, ret, ret);
|
ctx.stage_name, lane, ret, value, ret, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmitQuadSwap(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, ScalarU32 direction) {
|
void EmitQuadSwap(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, ScalarU32 direction) {
|
||||||
// QuadSwap: XOR thread_id with (direction+1) within quad — SHFLXOR with quad mask 0x1C03
|
// QuadSwap: XOR thread_id with (direction+1) within quad — SHFXOR with quad mask 0x1C03
|
||||||
const Register ret{ctx.reg_alloc.Define(inst)};
|
const Register ret{ctx.reg_alloc.Define(inst)};
|
||||||
ctx.Add("ADD.U RC.x,{},1;"
|
ctx.Add("ADD.U RC.x,{},1;"
|
||||||
"SHFLXOR.U {},{},RC.x,0x1C03;"
|
"SHFXOR.U {},{},RC.x,0x1C03;"
|
||||||
"MOV.U {}.x,{}.x;",
|
"MOV.U {}.x,{}.y;",
|
||||||
direction, ret, value, ret, ret);
|
direction, ret, value, ret, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -322,7 +322,8 @@ void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) {
|
|||||||
if (ctx.runtime_info.force_early_z) {
|
if (ctx.runtime_info.force_early_z) {
|
||||||
ctx.AddExecutionMode(main, spv::ExecutionMode::EarlyFragmentTests);
|
ctx.AddExecutionMode(main, spv::ExecutionMode::EarlyFragmentTests);
|
||||||
}
|
}
|
||||||
if (ctx.profile.support_shader_quad_control && program.info.uses_derivatives) {
|
if (ctx.profile.support_shader_quad_control &&
|
||||||
|
(program.info.uses_derivatives || program.info.uses_quad_shuffles)) {
|
||||||
ctx.AddExtension("SPV_KHR_quad_control");
|
ctx.AddExtension("SPV_KHR_quad_control");
|
||||||
ctx.AddCapability(spv::Capability::QuadControlKHR);
|
ctx.AddCapability(spv::Capability::QuadControlKHR);
|
||||||
ctx.AddExecutionMode(main, spv::ExecutionMode::RequireFullQuadsKHR);
|
ctx.AddExecutionMode(main, spv::ExecutionMode::RequireFullQuadsKHR);
|
||||||
|
|||||||
Reference in New Issue
Block a user