| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using System;
- namespace Ryujinx.Graphics.Gal.Shader
- {
- static partial class ShaderDecode
- {
- public static void Bra(ShaderIrBlock block, long opCode, int position)
- {
- if ((opCode & 0x20) != 0)
- {
- //This reads the target offset from the constant buffer.
- //Almost impossible to support with GLSL.
- throw new NotImplementedException();
- }
- ShaderIrOperImm imm = new ShaderIrOperImm(position + opCode.Branch());
- block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Bra, imm)));
- }
- public static void Exit(ShaderIrBlock block, long opCode, int position)
- {
- int cCode = (int)opCode & 0x1f;
- //TODO: Figure out what the other condition codes mean...
- if (cCode == 0xf)
- {
- block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Exit)));
- }
- }
- public static void Kil(ShaderIrBlock block, long opCode, int position)
- {
- block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Kil)));
- }
- public static void Ssy(ShaderIrBlock block, long opCode, int position)
- {
- if ((opCode & 0x20) != 0)
- {
- //This reads the target offset from the constant buffer.
- //Almost impossible to support with GLSL.
- throw new NotImplementedException();
- }
- ShaderIrOperImm imm = new ShaderIrOperImm(position + opCode.Branch());
- block.AddNode(new ShaderIrOp(ShaderIrInst.Ssy, imm));
- }
- public static void Sync(ShaderIrBlock block, long opCode, int position)
- {
- //TODO: Implement Sync condition codes
- block.AddNode(opCode.PredNode(new ShaderIrOp(ShaderIrInst.Sync)));
- }
- }
- }
|