summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/environment.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader_recompiler/environment.h')
-rw-r--r--src/shader_recompiler/environment.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/shader_recompiler/environment.h b/src/shader_recompiler/environment.h
new file mode 100644
index 000000000..8369d0d84
--- /dev/null
+++ b/src/shader_recompiler/environment.h
@@ -0,0 +1,53 @@
1#pragma once
2
3#include <array>
4
5#include "common/common_types.h"
6#include "shader_recompiler/program_header.h"
7#include "shader_recompiler/shader_info.h"
8#include "shader_recompiler/stage.h"
9
10namespace Shader {
11
12class Environment {
13public:
14 virtual ~Environment() = default;
15
16 [[nodiscard]] virtual u64 ReadInstruction(u32 address) = 0;
17
18 [[nodiscard]] virtual u32 ReadCbufValue(u32 cbuf_index, u32 cbuf_offset) = 0;
19
20 [[nodiscard]] virtual TextureType ReadTextureType(u32 raw_handle) = 0;
21
22 [[nodiscard]] virtual u32 TextureBoundBuffer() const = 0;
23
24 [[nodiscard]] virtual u32 LocalMemorySize() const = 0;
25
26 [[nodiscard]] virtual u32 SharedMemorySize() const = 0;
27
28 [[nodiscard]] virtual std::array<u32, 3> WorkgroupSize() const = 0;
29
30 [[nodiscard]] const ProgramHeader& SPH() const noexcept {
31 return sph;
32 }
33
34 [[nodiscard]] const std::array<u32, 8>& GpPassthroughMask() const noexcept {
35 return gp_passthrough_mask;
36 }
37
38 [[nodiscard]] Stage ShaderStage() const noexcept {
39 return stage;
40 }
41
42 [[nodiscard]] u32 StartAddress() const noexcept {
43 return start_address;
44 }
45
46protected:
47 ProgramHeader sph{};
48 std::array<u32, 8> gp_passthrough_mask{};
49 Stage stage{};
50 u32 start_address{};
51};
52
53} // namespace Shader