1 #pragma once
2 
3 #include <wiiu/gx2.h>
4 
5 #include "../video_defines.h"
6 #include "../video_shader_parse.h"
7 
8 #include "../drivers/gx2_shaders/frame.h"
9 #include "../drivers/gx2_shaders/tex.h"
10 #include "../drivers/gx2_shaders/sprite.h"
11 #include "../drivers/gx2_shaders/menu_shaders.h"
12 
13 #undef _X
14 #undef _B
15 
16 #define _X 0x00
17 #define _Y 0x01
18 #define _Z 0x02
19 #define _W 0x03
20 #define _R 0x00
21 #define _G 0x01
22 #define _B 0x02
23 #define _A 0x03
24 #define _0 0x04
25 #define _1 0x05
26 #define GX2_COMP_SEL(c0, c1, c2, c3) (((c0) << 24) | ((c1) << 16) | ((c2) << 8) | (c3))
27 
28 #define COLOR_ARGB(r, g, b, a) (((u32)(a) << 24) | ((u32)(r) << 16) | ((u32)(g) << 8) | ((u32)(b) << 0))
29 #define COLOR_RGBA(r, g, b, a) (((u32)(r) << 24) | ((u32)(g) << 16) | ((u32)(b) << 8) | ((u32)(a) << 0))
30 
31 typedef struct
32 {
33    int width;
34    int height;
35    GX2TVRenderMode mode;
36 } wiiu_render_mode_t;
37 
38 struct gx2_overlay_data
39 {
40    GX2Texture tex;
41    sprite_vertex_t v;
42    float alpha_mod;
43 };
44 
45 typedef struct
46 {
47    struct
48    {
49       GX2Texture texture;
50       int width;
51       int height;
52       bool enable;
53       sprite_vertex_t* v;
54    } menu;
55 
56 #ifdef HAVE_OVERLAY
57    struct gx2_overlay_data *overlay;
58    unsigned overlays;
59    bool overlay_enable;
60    bool overlay_full_screen;
61 #endif
62 
63    GX2Sampler sampler_nearest[RARCH_WRAP_MAX];
64    GX2Sampler sampler_linear[RARCH_WRAP_MAX];
65    GX2Texture texture;
66    frame_vertex_t* v;
67    GX2_vec2* ubo_vp;
68    GX2_vec2* ubo_tex;
69    GX2_mat4x4* ubo_mvp;
70    void* input_ring_buffer;
71    u32 input_ring_buffer_size;
72    void* output_ring_buffer;
73    u32 output_ring_buffer_size;
74 
75    int width;
76    int height;
77 
78    float* menu_shader_vbo;
79    menu_shader_uniform_t* menu_shader_ubo;
80 
81    struct
82    {
83       sprite_vertex_t* v;
84       int size;
85       int current;
86    } vertex_cache;
87    struct
88    {
89       tex_shader_vertex_t* v;
90       int size;
91       int current;
92    } vertex_cache_tex;
93 
94    void* drc_scan_buffer;
95    void* tv_scan_buffer;
96    GX2ColorBuffer color_buffer;
97    GX2ContextState* ctx_state;
98    void* cmd_buffer;
99    struct video_shader* shader_preset;
100    struct
101    {
102       GFDFile* gfd;
103       float* vs_ubos[2];
104       float* ps_ubos[2];
105       GX2Texture texture;
106       GX2ColorBuffer color_buffer;
107       bool mem1;
108    }pass[GFX_MAX_SHADERS];
109    GX2Texture luts[GFX_MAX_TEXTURES];
110 
111    wiiu_render_mode_t render_mode;
112    video_viewport_t vp;
113    int frames;
114    OSTime last_vsync;
115    bool vsync;
116    bool rgb32;
117    bool smooth;
118    unsigned rotation;
119    bool keep_aspect;
120    bool should_resize;
121    bool render_msg_enabled;
122 } wiiu_video_t;
123