Compare commits

...
Sign in to create a new pull request.

5 commits

Author SHA1 Message Date
0ce6371f27 sadge unused wariable errors
All checks were successful
eden-license / license-header (pull_request) Successful in 30s
2025-07-22 21:45:40 +02:00
b85708da01 man...
All checks were successful
eden-license / license-header (pull_request) Successful in 27s
2025-07-22 21:23:29 +02:00
dda2364edd i forgot to hit save...
All checks were successful
eden-license / license-header (pull_request) Successful in 34s
2025-07-22 20:58:14 +02:00
c175e56a39 ups, fix the ir scalefactor thing
All checks were successful
eden-license / license-header (pull_request) Successful in 25s
2025-07-22 20:10:08 +02:00
aa3215db65 reverts 9f4ef30b55 & 44dc152a2b 2025-07-22 20:10:08 +02:00
11 changed files with 52 additions and 58 deletions

View file

@ -6,8 +6,8 @@
#include "shader_recompiler/backend/glasm/emit_glasm_instructions.h"
#include "shader_recompiler/backend/glasm/glasm_emit_context.h"
#include "shader_recompiler/frontend/ir/value.h"
#include "shader_recompiler/runtime_info.h"
#include "shader_recompiler/profile.h"
#include "shader_recompiler/runtime_info.h"
#include "shader_recompiler/shader_info.h"
namespace Shader::Backend::GLASM {
@ -404,16 +404,60 @@ void EmitInvocationId(EmitContext& ctx, IR::Inst& inst) {
void EmitInvocationInfo(EmitContext& ctx, IR::Inst& inst) {
switch (ctx.stage) {
case Stage::TessellationControl:
ctx.Add("SHL.U {}.x,primitive.vertexcount,16;", inst);
break;
case Stage::TessellationEval:
ctx.Add("SHL.U {}.x,primitive.vertexcount,16;", inst);
break;
case Stage::Geometry:
ctx.Add("SHL.U {}.x,{},16;", inst,
InputTopologyVertices::vertices(ctx.runtime_info.input_topology));
case Stage::Fragment:
// Return sample mask in upper 16 bits
ctx.Add("SHL.U {}.x,fragment.samplemask,16;", inst);
break;
case Stage::Geometry: {
// Return vertex count in upper 16 bits based on input topology
// Using a lookup table approach for vertex counts
const std::array<u32, 5> vertex_counts = {
1, // Points
2, // Lines
4, // LinesAdjacency
3, // Triangles
6 // TrianglesAdjacency
};
// Map the input topology to an index in our lookup table
u32 topology_index = 0;
switch (ctx.runtime_info.input_topology) {
case Shader::InputTopology::Lines:
topology_index = 1;
break;
case Shader::InputTopology::LinesAdjacency:
topology_index = 2;
break;
case Shader::InputTopology::Triangles:
topology_index = 3;
break;
case Shader::InputTopology::TrianglesAdjacency:
topology_index = 4;
break;
case Shader::InputTopology::Points:
default:
topology_index = 0;
break;
}
// Get the vertex count from the lookup table and shift it
const u32 result = vertex_counts[topology_index] << 16;
ctx.Add("MOV.S {}.x,0x{:x};", inst, result);
break;
}
case Stage::Compute:
// Return standard format (0x00ff0000)
ctx.Add("MOV.S {}.x,0x00ff0000;", inst);
break;
default:
LOG_WARNING(Shader, "(STUBBED) called");
// Return standard format (0x00ff0000)
ctx.Add("MOV.S {}.x,0x00ff0000;", inst);
break;
}
}
@ -425,14 +469,6 @@ void EmitIsHelperInvocation(EmitContext& ctx, IR::Inst& inst) {
ctx.Add("MOV.S {}.x,fragment.helperthread.x;", inst);
}
void EmitSR_WScaleFactorXY(EmitContext& ctx, IR::Inst& inst) {
LOG_WARNING(Shader, "(STUBBED) called");
}
void EmitSR_WScaleFactorZ(EmitContext& ctx, IR::Inst& inst) {
LOG_WARNING(Shader, "(STUBBED) called");
}
void EmitYDirection(EmitContext& ctx, IR::Inst& inst) {
ctx.uses_y_direction = true;
ctx.Add("MOV.F {}.x,y_direction[0].w;", inst);

View file

@ -72,8 +72,6 @@ void EmitInvocationId(EmitContext& ctx, IR::Inst& inst);
void EmitInvocationInfo(EmitContext& ctx, IR::Inst& inst);
void EmitSampleId(EmitContext& ctx, IR::Inst& inst);
void EmitIsHelperInvocation(EmitContext& ctx, IR::Inst& inst);
void EmitSR_WScaleFactorXY(EmitContext& ctx, IR::Inst& inst);
void EmitSR_WScaleFactorZ(EmitContext& ctx, IR::Inst& inst);
void EmitYDirection(EmitContext& ctx, IR::Inst& inst);
void EmitResolutionDownFactor(EmitContext& ctx, IR::Inst& inst);
void EmitRenderArea(EmitContext& ctx, IR::Inst& inst);

View file

@ -444,14 +444,6 @@ void EmitIsHelperInvocation(EmitContext& ctx, IR::Inst& inst) {
ctx.AddU1("{}=gl_HelperInvocation;", inst);
}
void EmitSR_WScaleFactorXY(EmitContext& ctx, IR::Inst& inst) {
LOG_WARNING(Shader, "(STUBBED) called");
}
void EmitSR_WScaleFactorZ(EmitContext& ctx, IR::Inst& inst) {
LOG_WARNING(Shader, "(STUBBED) called");
}
void EmitYDirection(EmitContext& ctx, IR::Inst& inst) {
ctx.uses_y_direction = true;
ctx.AddF32("{}=gl_FrontMaterial.ambient.a;", inst);

View file

@ -86,8 +86,6 @@ void EmitInvocationId(EmitContext& ctx, IR::Inst& inst);
void EmitInvocationInfo(EmitContext& ctx, IR::Inst& inst);
void EmitSampleId(EmitContext& ctx, IR::Inst& inst);
void EmitIsHelperInvocation(EmitContext& ctx, IR::Inst& inst);
void EmitSR_WScaleFactorXY(EmitContext& ctx, IR::Inst& inst);
void EmitSR_WScaleFactorZ(EmitContext& ctx, IR::Inst& inst);
void EmitYDirection(EmitContext& ctx, IR::Inst& inst);
void EmitResolutionDownFactor(EmitContext& ctx, IR::Inst& inst);
void EmitRenderArea(EmitContext& ctx, IR::Inst& inst);

View file

@ -573,16 +573,6 @@ Id EmitIsHelperInvocation(EmitContext& ctx) {
return ctx.OpLoad(ctx.U1, ctx.is_helper_invocation);
}
Id EmitSR_WScaleFactorXY(EmitContext& ctx) {
LOG_WARNING(Shader, "(STUBBED) called");
return ctx.Const(0x00ff0000u);
}
Id EmitSR_WScaleFactorZ(EmitContext& ctx) {
LOG_WARNING(Shader, "(STUBBED) called");
return ctx.Const(0x00ff0000u);
}
Id EmitYDirection(EmitContext& ctx) {
return ctx.Const(ctx.runtime_info.y_negate ? -1.0f : 1.0f);
}

View file

@ -75,8 +75,6 @@ Id EmitInvocationId(EmitContext& ctx);
Id EmitInvocationInfo(EmitContext& ctx);
Id EmitSampleId(EmitContext& ctx);
Id EmitIsHelperInvocation(EmitContext& ctx);
Id EmitSR_WScaleFactorXY(EmitContext& ctx);
Id EmitSR_WScaleFactorZ(EmitContext& ctx);
Id EmitYDirection(EmitContext& ctx);
Id EmitResolutionDownFactor(EmitContext& ctx);
Id EmitRenderArea(EmitContext& ctx);

View file

@ -382,14 +382,6 @@ U1 IREmitter::IsHelperInvocation() {
return Inst<U1>(Opcode::IsHelperInvocation);
}
U32 IREmitter::SR_WScaleFactorXY() {
return Inst<U32>(Opcode::SR_WScaleFactorXY);
}
U32 IREmitter::SR_WScaleFactorZ() {
return Inst<U32>(Opcode::SR_WScaleFactorZ);
}
F32 IREmitter::YDirection() {
return Inst<F32>(Opcode::YDirection);
}

View file

@ -102,8 +102,6 @@ public:
[[nodiscard]] U32 InvocationInfo();
[[nodiscard]] U32 SampleId();
[[nodiscard]] U1 IsHelperInvocation();
[[nodiscard]] U32 SR_WScaleFactorXY();
[[nodiscard]] U32 SR_WScaleFactorZ();
[[nodiscard]] F32 YDirection();
[[nodiscard]] F32 ResolutionDownFactor();

View file

@ -62,8 +62,6 @@ OPCODE(InvocationId, U32,
OPCODE(InvocationInfo, U32, )
OPCODE(SampleId, U32, )
OPCODE(IsHelperInvocation, U1, )
OPCODE(SR_WScaleFactorXY, U32, )
OPCODE(SR_WScaleFactorZ, U32, )
OPCODE(YDirection, F32, )
OPCODE(ResolutionDownFactor, F32, )
OPCODE(RenderArea, F32x4, )

View file

@ -139,10 +139,10 @@ enum class SpecialRegister : u64 {
return ir.WorkgroupIdZ();
case SpecialRegister::SR_WSCALEFACTOR_XY:
LOG_WARNING(Shader, "(STUBBED) SR_WSCALEFACTOR_XY");
return ir.SR_WScaleFactorXY();
return ir.Imm32(Common::BitCast<u32>(1.0f));
case SpecialRegister::SR_WSCALEFACTOR_Z:
LOG_WARNING(Shader, "(STUBBED) SR_WSCALEFACTOR_Z");
return ir.SR_WScaleFactorZ();
return ir.Imm32(Common::BitCast<u32>(1.0f));
case SpecialRegister::SR_LANEID:
return ir.LaneId();
case SpecialRegister::SR_EQMASK:

View file

@ -14,13 +14,7 @@
namespace Tegra {
constexpr u32 MacroRegistersStart = 0xE00;
constexpr u32 ComputeInline = 0x6D;
//start on PR#76 of Eden this is a unused variable in android (need to investigate)
// Dummy function that uses ComputeInline
constexpr void UseComputeInline() {
static_cast<void>(ComputeInline); // Suppress unused variable error
}
//constexpr u32 ComputeInline = 0x6D;
DmaPusher::DmaPusher(Core::System& system_, GPU& gpu_, MemoryManager& memory_manager_,
Control::ChannelState& channel_state_)