mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-06-03 22:45:00 -06:00
57 lines
1.1 KiB
C++
57 lines
1.1 KiB
C++
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include <vector>
|
|
#include "shader_recompiler/ir/value.h"
|
|
|
|
namespace Shader::IR {
|
|
|
|
class Block;
|
|
|
|
struct AbstractSyntaxNode {
|
|
enum class Type {
|
|
Block,
|
|
If,
|
|
EndIf,
|
|
Loop,
|
|
Repeat,
|
|
Break,
|
|
Return,
|
|
Unreachable,
|
|
};
|
|
union Data {
|
|
Block* block;
|
|
struct {
|
|
U1 cond;
|
|
Block* body;
|
|
Block* merge;
|
|
} if_node;
|
|
struct {
|
|
Block* merge;
|
|
} end_if;
|
|
struct {
|
|
Block* body;
|
|
Block* continue_block;
|
|
Block* merge;
|
|
} loop;
|
|
struct {
|
|
U1 cond;
|
|
Block* loop_header;
|
|
Block* merge;
|
|
} repeat;
|
|
struct {
|
|
U1 cond;
|
|
Block* merge;
|
|
Block* skip;
|
|
} break_node;
|
|
};
|
|
|
|
Data data{};
|
|
Type type{};
|
|
};
|
|
using AbstractSyntaxList = std::vector<AbstractSyntaxNode>;
|
|
|
|
} // namespace Shader::IR
|