14 changed files with 219 additions and 188 deletions
-
2src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp
-
1src/video_core/CMakeLists.txt
-
8src/video_core/clipper.cpp
-
5src/video_core/command_processor.cpp
-
4src/video_core/debug_utils/debug_utils.cpp
-
2src/video_core/debug_utils/debug_utils.h
-
137src/video_core/pica.h
-
24src/video_core/rasterizer.cpp
-
129src/video_core/regs_rasterizer.h
-
54src/video_core/renderer_opengl/gl_rasterizer.cpp
-
8src/video_core/renderer_opengl/gl_rasterizer.h
-
7src/video_core/renderer_opengl/gl_shader_gen.cpp
-
8src/video_core/shader/shader.cpp
-
18src/video_core/shader/shader.h
@ -0,0 +1,129 @@ |
|||||
|
// Copyright 2017 Citra Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <array> |
||||
|
|
||||
|
#include "common/bit_field.h" |
||||
|
#include "common/common_funcs.h" |
||||
|
#include "common/common_types.h" |
||||
|
|
||||
|
namespace Pica { |
||||
|
|
||||
|
struct RasterizerRegs { |
||||
|
enum class CullMode : u32 { |
||||
|
// Select which polygons are considered to be "frontfacing". |
||||
|
KeepAll = 0, |
||||
|
KeepClockWise = 1, |
||||
|
KeepCounterClockWise = 2, |
||||
|
// TODO: What does the third value imply? |
||||
|
}; |
||||
|
|
||||
|
union { |
||||
|
BitField<0, 2, CullMode> cull_mode; |
||||
|
}; |
||||
|
|
||||
|
BitField<0, 24, u32> viewport_size_x; |
||||
|
|
||||
|
INSERT_PADDING_WORDS(0x1); |
||||
|
|
||||
|
BitField<0, 24, u32> viewport_size_y; |
||||
|
|
||||
|
INSERT_PADDING_WORDS(0x9); |
||||
|
|
||||
|
BitField<0, 24, u32> viewport_depth_range; // float24 |
||||
|
BitField<0, 24, u32> viewport_depth_near_plane; // float24 |
||||
|
|
||||
|
BitField<0, 3, u32> vs_output_total; |
||||
|
|
||||
|
union VSOutputAttributes { |
||||
|
// Maps components of output vertex attributes to semantics |
||||
|
enum Semantic : u32 { |
||||
|
POSITION_X = 0, |
||||
|
POSITION_Y = 1, |
||||
|
POSITION_Z = 2, |
||||
|
POSITION_W = 3, |
||||
|
|
||||
|
QUATERNION_X = 4, |
||||
|
QUATERNION_Y = 5, |
||||
|
QUATERNION_Z = 6, |
||||
|
QUATERNION_W = 7, |
||||
|
|
||||
|
COLOR_R = 8, |
||||
|
COLOR_G = 9, |
||||
|
COLOR_B = 10, |
||||
|
COLOR_A = 11, |
||||
|
|
||||
|
TEXCOORD0_U = 12, |
||||
|
TEXCOORD0_V = 13, |
||||
|
TEXCOORD1_U = 14, |
||||
|
TEXCOORD1_V = 15, |
||||
|
|
||||
|
TEXCOORD0_W = 16, |
||||
|
|
||||
|
VIEW_X = 18, |
||||
|
VIEW_Y = 19, |
||||
|
VIEW_Z = 20, |
||||
|
|
||||
|
TEXCOORD2_U = 22, |
||||
|
TEXCOORD2_V = 23, |
||||
|
|
||||
|
INVALID = 31, |
||||
|
}; |
||||
|
|
||||
|
BitField<0, 5, Semantic> map_x; |
||||
|
BitField<8, 5, Semantic> map_y; |
||||
|
BitField<16, 5, Semantic> map_z; |
||||
|
BitField<24, 5, Semantic> map_w; |
||||
|
} vs_output_attributes[7]; |
||||
|
|
||||
|
INSERT_PADDING_WORDS(0xe); |
||||
|
|
||||
|
enum class ScissorMode : u32 { |
||||
|
Disabled = 0, |
||||
|
Exclude = 1, // Exclude pixels inside the scissor box |
||||
|
|
||||
|
Include = 3 // Exclude pixels outside the scissor box |
||||
|
}; |
||||
|
|
||||
|
struct { |
||||
|
BitField<0, 2, ScissorMode> mode; |
||||
|
|
||||
|
union { |
||||
|
BitField<0, 16, u32> x1; |
||||
|
BitField<16, 16, u32> y1; |
||||
|
}; |
||||
|
|
||||
|
union { |
||||
|
BitField<0, 16, u32> x2; |
||||
|
BitField<16, 16, u32> y2; |
||||
|
}; |
||||
|
} scissor_test; |
||||
|
|
||||
|
union { |
||||
|
BitField<0, 10, s32> x; |
||||
|
BitField<16, 10, s32> y; |
||||
|
} viewport_corner; |
||||
|
|
||||
|
INSERT_PADDING_WORDS(0x1); |
||||
|
|
||||
|
// TODO: early depth |
||||
|
INSERT_PADDING_WORDS(0x1); |
||||
|
|
||||
|
INSERT_PADDING_WORDS(0x2); |
||||
|
|
||||
|
enum DepthBuffering : u32 { |
||||
|
WBuffering = 0, |
||||
|
ZBuffering = 1, |
||||
|
}; |
||||
|
BitField<0, 1, DepthBuffering> depthmap_enable; |
||||
|
|
||||
|
INSERT_PADDING_WORDS(0x12); |
||||
|
}; |
||||
|
|
||||
|
static_assert(sizeof(RasterizerRegs) == 0x40 * sizeof(u32), |
||||
|
"RasterizerRegs struct has incorrect size"); |
||||
|
|
||||
|
} // namespace Pica |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue