summaryrefslogtreecommitdiffstats
path: root/src/video_core/engines/maxwell_3d.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/engines/maxwell_3d.h')
-rw-r--r--src/video_core/engines/maxwell_3d.h281
1 files changed, 160 insertions, 121 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h
index 869ddde90..c242786da 100644
--- a/src/video_core/engines/maxwell_3d.h
+++ b/src/video_core/engines/maxwell_3d.h
@@ -60,88 +60,169 @@ public:
Fragment = 4,
};
- enum class VertexSize : u32 {
- Size_32_32_32_32 = 0x01,
- Size_32_32_32 = 0x02,
- Size_16_16_16_16 = 0x03,
- Size_32_32 = 0x04,
- Size_16_16_16 = 0x05,
- Size_8_8_8_8 = 0x0a,
- Size_16_16 = 0x0f,
- Size_32 = 0x12,
- Size_8_8_8 = 0x13,
- Size_8_8 = 0x18,
- Size_16 = 0x1b,
- Size_8 = 0x1d,
- Size_10_10_10_2 = 0x30,
- Size_11_11_10 = 0x31,
- };
+ struct VertexAttribute {
+ enum class Size : u32 {
+ Size_32_32_32_32 = 0x01,
+ Size_32_32_32 = 0x02,
+ Size_16_16_16_16 = 0x03,
+ Size_32_32 = 0x04,
+ Size_16_16_16 = 0x05,
+ Size_8_8_8_8 = 0x0a,
+ Size_16_16 = 0x0f,
+ Size_32 = 0x12,
+ Size_8_8_8 = 0x13,
+ Size_8_8 = 0x18,
+ Size_16 = 0x1b,
+ Size_8 = 0x1d,
+ Size_10_10_10_2 = 0x30,
+ Size_11_11_10 = 0x31,
+ };
+
+ enum class Type : u32 {
+ SignedNorm = 1,
+ UnsignedNorm = 2,
+ SignedInt = 3,
+ UnsignedInt = 4,
+ UnsignedScaled = 5,
+ SignedScaled = 6,
+ Float = 7,
+ };
- static std::string VertexSizeToString(VertexSize vertex_size) {
- switch (vertex_size) {
- case VertexSize::Size_32_32_32_32:
- return "32_32_32_32";
- case VertexSize::Size_32_32_32:
- return "32_32_32";
- case VertexSize::Size_16_16_16_16:
- return "16_16_16_16";
- case VertexSize::Size_32_32:
- return "32_32";
- case VertexSize::Size_16_16_16:
- return "16_16_16";
- case VertexSize::Size_8_8_8_8:
- return "8_8_8_8";
- case VertexSize::Size_16_16:
- return "16_16";
- case VertexSize::Size_32:
- return "32";
- case VertexSize::Size_8_8_8:
- return "8_8_8";
- case VertexSize::Size_8_8:
- return "8_8";
- case VertexSize::Size_16:
- return "16";
- case VertexSize::Size_8:
- return "8";
- case VertexSize::Size_10_10_10_2:
- return "10_10_10_2";
- case VertexSize::Size_11_11_10:
- return "11_11_10";
+ union {
+ BitField<0, 5, u32> buffer;
+ BitField<6, 1, u32> constant;
+ BitField<7, 14, u32> offset;
+ BitField<21, 6, Size> size;
+ BitField<27, 3, Type> type;
+ BitField<31, 1, u32> bgra;
+ };
+
+ u32 ComponentCount() const {
+ switch (size) {
+ case Size::Size_32_32_32_32:
+ return 4;
+ case Size::Size_32_32_32:
+ return 3;
+ case Size::Size_16_16_16_16:
+ return 4;
+ case Size::Size_32_32:
+ return 2;
+ case Size::Size_16_16_16:
+ return 3;
+ case Size::Size_8_8_8_8:
+ return 4;
+ case Size::Size_16_16:
+ return 2;
+ case Size::Size_32:
+ return 1;
+ case Size::Size_8_8_8:
+ return 3;
+ case Size::Size_8_8:
+ return 2;
+ case Size::Size_16:
+ return 1;
+ case Size::Size_8:
+ return 1;
+ case Size::Size_10_10_10_2:
+ return 4;
+ case Size::Size_11_11_10:
+ return 3;
+ default:
+ UNREACHABLE();
+ }
}
- UNIMPLEMENTED();
- return {};
- }
-
- enum class VertexType : u32 {
- SignedNorm = 1,
- UnsignedNorm = 2,
- SignedInt = 3,
- UnsignedInt = 4,
- UnsignedScaled = 5,
- SignedScaled = 6,
- Float = 7,
- };
- static std::string VertexTypeToString(VertexType vertex_type) {
- switch (vertex_type) {
- case VertexType::SignedNorm:
- return "SignedNorm";
- case VertexType::UnsignedNorm:
- return "UnsignedNorm";
- case VertexType::SignedInt:
- return "SignedInt";
- case VertexType::UnsignedInt:
- return "UnsignedInt";
- case VertexType::UnsignedScaled:
- return "UnsignedScaled";
- case VertexType::SignedScaled:
- return "SignedScaled";
- case VertexType::Float:
- return "Float";
+ u32 SizeInBytes() const {
+ switch (size) {
+ case Size::Size_32_32_32_32:
+ return 16;
+ case Size::Size_32_32_32:
+ return 12;
+ case Size::Size_16_16_16_16:
+ return 8;
+ case Size::Size_32_32:
+ return 8;
+ case Size::Size_16_16_16:
+ return 6;
+ case Size::Size_8_8_8_8:
+ return 4;
+ case Size::Size_16_16:
+ return 4;
+ case Size::Size_32:
+ return 4;
+ case Size::Size_8_8_8:
+ return 3;
+ case Size::Size_8_8:
+ return 2;
+ case Size::Size_16:
+ return 2;
+ case Size::Size_8:
+ return 1;
+ case Size::Size_10_10_10_2:
+ return 4;
+ case Size::Size_11_11_10:
+ return 4;
+ default:
+ UNREACHABLE();
+ }
}
- UNIMPLEMENTED();
- return {};
- }
+
+ std::string SizeString() const {
+ switch (size) {
+ case Size::Size_32_32_32_32:
+ return "32_32_32_32";
+ case Size::Size_32_32_32:
+ return "32_32_32";
+ case Size::Size_16_16_16_16:
+ return "16_16_16_16";
+ case Size::Size_32_32:
+ return "32_32";
+ case Size::Size_16_16_16:
+ return "16_16_16";
+ case Size::Size_8_8_8_8:
+ return "8_8_8_8";
+ case Size::Size_16_16:
+ return "16_16";
+ case Size::Size_32:
+ return "32";
+ case Size::Size_8_8_8:
+ return "8_8_8";
+ case Size::Size_8_8:
+ return "8_8";
+ case Size::Size_16:
+ return "16";
+ case Size::Size_8:
+ return "8";
+ case Size::Size_10_10_10_2:
+ return "10_10_10_2";
+ case Size::Size_11_11_10:
+ return "11_11_10";
+ }
+ UNREACHABLE();
+ return {};
+ }
+
+ std::string TypeToString() const {
+ switch (type) {
+ case Type::SignedNorm:
+ return "SignedNorm";
+ case Type::UnsignedNorm:
+ return "UnsignedNorm";
+ case Type::SignedInt:
+ return "SignedInt";
+ case Type::UnsignedInt:
+ return "UnsignedInt";
+ case Type::UnsignedScaled:
+ return "UnsignedScaled";
+ case Type::SignedScaled:
+ return "SignedScaled";
+ case Type::Float:
+ return "Float";
+ }
+ UNREACHABLE();
+ return {};
+ }
+ };
enum class PrimitiveTopology : u32 {
Points = 0x0,
@@ -222,49 +303,7 @@ public:
INSERT_PADDING_WORDS(0x5B);
- union {
- BitField<0, 5, u32> buffer;
- BitField<6, 1, u32> constant;
- BitField<7, 14, u32> offset;
- BitField<21, 6, VertexSize> size;
- BitField<27, 3, VertexType> type;
- BitField<31, 1, u32> bgra;
-
- u32 SizeInBytes() const {
- switch (size) {
- case VertexSize::Size_32_32_32_32:
- return 16;
- case VertexSize::Size_32_32_32:
- return 12;
- case VertexSize::Size_16_16_16_16:
- return 8;
- case VertexSize::Size_32_32:
- return 8;
- case VertexSize::Size_16_16_16:
- return 6;
- case VertexSize::Size_8_8_8_8:
- return 4;
- case VertexSize::Size_16_16:
- return 4;
- case VertexSize::Size_32:
- return 4;
- case VertexSize::Size_8_8_8:
- return 3;
- case VertexSize::Size_8_8:
- return 2;
- case VertexSize::Size_16:
- return 2;
- case VertexSize::Size_8:
- return 1;
- case VertexSize::Size_10_10_10_2:
- return 4;
- case VertexSize::Size_11_11_10:
- return 4;
- default:
- UNREACHABLE();
- }
- }
- } vertex_attrib_format[NumVertexAttributes];
+ VertexAttribute vertex_attrib_format[NumVertexAttributes];
INSERT_PADDING_WORDS(0xF);