forked from eden-emu/eden
Compare commits
5 commits
master
...
revert_tes
Author | SHA1 | Date | |
---|---|---|---|
0ce6371f27 | |||
b85708da01 | |||
dda2364edd | |||
c175e56a39 | |||
aa3215db65 |
11 changed files with 52 additions and 58 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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, )
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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_)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue