From b95a58b096f53b2abbb8809d03d77c88fad2a77d Mon Sep 17 00:00:00 2001 From: squidbus <175574877+squidbus@users.noreply.github.com> Date: Fri, 25 Jul 2025 00:45:45 -0700 Subject: [PATCH] Handle stencil test. --- .../gpu/cache/pipeline_state_cache.h | 217 ------------- MarathonRecomp/gpu/rhi/plume_d3d12.cpp | 97 +++++- MarathonRecomp/gpu/rhi/plume_d3d12.h | 5 +- .../gpu/rhi/plume_render_interface.h | 6 +- .../gpu/rhi/plume_render_interface_types.h | 43 +++ MarathonRecomp/gpu/rhi/plume_vulkan.cpp | 65 +++- MarathonRecomp/gpu/rhi/plume_vulkan.h | 2 +- MarathonRecomp/gpu/video.cpp | 296 ++++++++++++++---- MarathonRecomp/gpu/video.h | 26 ++ 9 files changed, 455 insertions(+), 302 deletions(-) diff --git a/MarathonRecomp/gpu/cache/pipeline_state_cache.h b/MarathonRecomp/gpu/cache/pipeline_state_cache.h index 0134a0b5c..e69de29bb 100644 --- a/MarathonRecomp/gpu/cache/pipeline_state_cache.h +++ b/MarathonRecomp/gpu/cache/pipeline_state_cache.h @@ -1,217 +0,0 @@ -{ reinterpret_cast(0x135289E4F64C6EEA),reinterpret_cast(0x6B812461EA74928D),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x8,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x135289E4F64C6EEA),reinterpret_cast(0x7C6A695E4296FA3B),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x135289E4F64C6EEA),reinterpret_cast(0xC20BFEE4B086F5EF),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x8,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x19A2C6D1239C4F70),reinterpret_cast(0xA4B323F28059538D),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x0 }, -{ reinterpret_cast(0x1D29E1386144A506),reinterpret_cast(0x22CDDA5C6346A97),reinterpret_cast(0x5A2395E29F93DA3C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_FAN,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x242C140D93C0AF49),reinterpret_cast(0x9721346C08BDC9B9),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x242C140D93C0AF49),reinterpret_cast(0x9721346C08BDC9B9),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x242C140D93C0AF49),reinterpret_cast(0xC1FB51F87C449443),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x242C140D93C0AF49),reinterpret_cast(0xC1FB51F87C449443),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x2EF4F684B4E581E0),reinterpret_cast(0x28830E987F7B9790),reinterpret_cast(0x75A4FC397A05F4CA),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x32E4902854763D73),reinterpret_cast(0x5D7ACAE543747185),reinterpret_cast(0x84BACD816D86543C),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x10 }, -{ reinterpret_cast(0x32E4902854763D73),reinterpret_cast(0x5D7ACAE543747185),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x36DB3B40FA419EF6),reinterpret_cast(0x3BF885B6A8263F78),reinterpret_cast(0xFFFDDC62D86892F1),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_LIST,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x36DB3B40FA419EF6),reinterpret_cast(0x3BF885B6A8263F78),reinterpret_cast(0xFFFDDC62D86892F1),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x36DB3B40FA419EF6),reinterpret_cast(0x4FDE8FFB7DC1D1CE),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x36DB3B40FA419EF6),reinterpret_cast(0xD56D0D7219E51F1D),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x115813F8DBF6CCFF),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x3073F2C856F3333E),reinterpret_cast(0xF10787EFFEEC0153),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x3382CD5552FAB33C),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x47CDF40D1C605E0D),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x6563290A54293E7A),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x6563290A54293E7A),reinterpret_cast(0xF10787EFFEEC0153),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x6563290A54293E7A),reinterpret_cast(0xF10787EFFEEC0153),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x6563290A54293E7A),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x7A8F23548FF778),reinterpret_cast(0xC64D046063DE2F63),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x85E3EE1021089A76),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x933E17818464BC39),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0x96B8F9FDAAB9B658),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0xA713B2DB5B642DB7),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0xB8F71746F39A1166),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0xF9F82EC882CD3D08),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x3A4537B51DE9818),reinterpret_cast(0xF9F82EC882CD3D08),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x40E4064FE517DFD2),reinterpret_cast(0x11958CFF684E1F4B),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0x28FD2057B9BD5D1B),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0x2A6D72391BFFFA3C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0x2A6D72391BFFFA3C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0x2A6D72391BFFFA3C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0x2A6D72391BFFFA3C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0x82A1B9D74331DB2A),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0xC64D046063DE2F63),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0xEFD61AD3C5332AAE),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x4620B236DC38100C),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x490E175C47BED0E5),reinterpret_cast(0xC27E8F84EDE6DDF2),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::ONE,RenderBlend::ONE,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x0 }, -{ reinterpret_cast(0x490E175C47BED0E5),reinterpret_cast(0xC27E8F84EDE6DDF2),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x490E175C47BED0E5),reinterpret_cast(0xC27E8F84EDE6DDF2),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x4FD3C1FC95199BF7),reinterpret_cast(0xC767707E9597E72A),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x5551A2802E704A77),reinterpret_cast(0xA381B5E5DE1BE827),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x5761F694B19E6C57),reinterpret_cast(0x49462E31215FDFA4),reinterpret_cast(0x2A6D72391BFFFA3C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x5761F694B19E6C57),reinterpret_cast(0x49462E31215FDFA4),reinterpret_cast(0x2A6D72391BFFFA3C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x5761F694B19E6C57),reinterpret_cast(0xB742B920FA6B3160),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x5761F694B19E6C57),reinterpret_cast(0xDF411EDECC011229),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x5761F694B19E6C57),reinterpret_cast(0xEE74361807D90893),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x5F532BA0A8A8578B),reinterpret_cast(0x60F640A97E884F93),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x5F532BA0A8A8578B),reinterpret_cast(0xF0518B73B46FB381),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x624F608ACB374E12),reinterpret_cast(0x3BF448442947F545),reinterpret_cast(0xF10787EFFEEC0153),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x624F608ACB374E12),reinterpret_cast(0xA624AF834723B59),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x624F608ACB374E12),reinterpret_cast(0xA624AF834723B59),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x624F608ACB374E12),reinterpret_cast(0xA624AF834723B59),reinterpret_cast(0xF10787EFFEEC0153),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0x2CA0127E60EB4507),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0x2E5AA3C0A9E32751),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0x326BB3169FF92317),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0x3838E2D27966B21C),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0x5A75A52C3F722625),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0x86CD1B8641C60EE6),reinterpret_cast(0xC64D046063DE2F63),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0x874793F8CC9C7EB0),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xB0F7121362A63137),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xB0F7121362A63137),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xB23ACF01C99C2988),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xB23ACF01C99C2988),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xC03A891201D4E9E7),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xCE7A73C836F03E6),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xD4D1534DD857403),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xD4D1534DD857403),reinterpret_cast(0xF10787EFFEEC0153),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xD4D1534DD857403),reinterpret_cast(0xF10787EFFEEC0153),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xE1748A1E1E38FC5F),reinterpret_cast(0x6538EB0019C3A29A),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xE1748A1E1E38FC5F),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xE1748A1E1E38FC5F),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xE43807AC82D5FBBC),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x666E7FB7FCAE0FB7),reinterpret_cast(0xE43807AC82D5FBBC),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0x681C97662BFE9150),reinterpret_cast(0xDC635C4E7013864E),reinterpret_cast(0x6196BF64CB935CA5),false,true,false,RenderBlend::ONE,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x681E682667303C76),reinterpret_cast(0x38771885AC644B5),reinterpret_cast(0xC64D046063DE2F63),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x681E682667303C76),reinterpret_cast(0x604349CBF72CCF8C),reinterpret_cast(0xC64D046063DE2F63),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x69614E38C60323C2),reinterpret_cast(0xC9978EB328E1066E),reinterpret_cast(0x28FD2057B9BD5D1B),false,true,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x132D2F2079D74CB3),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x198E2B57B47DAF53),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x3016DA5F348C87A7),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x3016DA5F348C87A7),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x3016DA5F348C87A7),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x4294510C775F4EE8),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x48BE63A8F5F1C78A),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x50700665A5F55DFE),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x605C1E349CC4CAAB),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x646A89594CB61902),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x65325B9C7DA3DB04),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x67064E6EA39B439E),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x6A6C966F2DBFAB66),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x7D9F06B0E048B75D),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x891B8684FB17752B),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x94C817504819ACFC),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0x9FA5AACB5B14A226),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0xC47F2F91BA2A5D86),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0xFB79F59782376846),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x6DE86503F8AA38E2),reinterpret_cast(0xFF42BE2DBCE820C9),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x720D6E5EDA78433B),reinterpret_cast(0x96EACBACDE1AAFAA),reinterpret_cast(0xA81F28FA43A9B511),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x720D6E5EDA78433B),reinterpret_cast(0x96EACBACDE1AAFAA),reinterpret_cast(0xA81F28FA43A9B511),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 }, -{ reinterpret_cast(0x734799D14CC5177E),reinterpret_cast(0xC9978EB328E1066E),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x7C34DB46DEEFB0C2),reinterpret_cast(0xDBD8B29544AC9277),reinterpret_cast(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x7CC3A0B01523741B),reinterpret_cast(0x315BB80DAE685834),reinterpret_cast(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x7E66F53B588AA801),reinterpret_cast(0x5990016B666631DA),reinterpret_cast(0x5A2395E29F93DA3C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,1677,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_LIST,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x7FDFEA4327E808B6),reinterpret_cast(0xC70B0B8A2D2F6A44),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x86FE3502D5EC24AA),reinterpret_cast(0x68FCC0B90EBC457B),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x86FE3502D5EC24AA),reinterpret_cast(0x94A71CC9B94E3101),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x88F67387B88F932F),reinterpret_cast(0x49101E452DF2FE98),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x8E4BB23465BD909E),reinterpret_cast(0x0),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::FRONT,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x0 }, -{ reinterpret_cast(0x8E4BB23465BD909E),reinterpret_cast(0x0),reinterpret_cast(0xFFFDDC62D86892F1),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,33554,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_LIST,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x0 }, -{ reinterpret_cast(0x8E4BB23465BD909E),reinterpret_cast(0x0),reinterpret_cast(0xFFFDDC62D86892F1),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,33554,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x0 }, -{ reinterpret_cast(0x8EA8F71BA3BE59E7),reinterpret_cast(0xA557DD8B24CD2B25),reinterpret_cast(0xEC0CD05EE1B1636),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_LIST,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x10 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0x18AAAF7ECFB9845E),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0x3BF448442947F545),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0x468340081BD836A8),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0x4A2B9FA019C73E45),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0x4A2B9FA019C73E45),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0x71593B426FFE8A0B),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0x9C38AD5FA8545935),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0xA624AF834723B59),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0xB0FD006BA443E516),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x9552FAD03BFF3E24),reinterpret_cast(0xC8D51B982B0C10BD),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x11958CFF684E1F4B),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x11958CFF684E1F4B),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x66578F29004F8FD0),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x6B9732B4CD7E7740),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x6C50210CBDA8A23A),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x6C50210CBDA8A23A),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x6C50210CBDA8A23A),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x6C50210CBDA8A23A),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x6C50210CBDA8A23A),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x6C50210CBDA8A23A),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x85ED723035ECF535),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0x92940FDD115733E1),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0xA305C47ED9FB58CF),reinterpret_cast(0xD452411D3FB80A0D),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::ALWAYS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0xD44C189D5067922E),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x965929BAA69F0AE),reinterpret_cast(0xD736237D80908063),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0x99DC3F27E402700D),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0x28FD2057B9BD5D1B),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x99DC3F27E402700D),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0x99DC3F27E402700D),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0xEFD61AD3C5332AAE),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0x99DC3F27E402700D),reinterpret_cast(0xBBDB735BEACC8F41),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xA3CD49F172D99214),reinterpret_cast(0xD5EA32DB758EF0B8),reinterpret_cast(0x7F12180DC3A24B53),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 }, -{ reinterpret_cast(0xA3FD368C62079765),reinterpret_cast(0xE8E3FF65F2356201),reinterpret_cast(0xB22B7B7B968141C6),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0xA3FD368C62079765),reinterpret_cast(0xE8E3FF65F2356201),reinterpret_cast(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0xA3FD368C62079765),reinterpret_cast(0xE8E3FF65F2356201),reinterpret_cast(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0xA3FD368C62079765),reinterpret_cast(0xE8E3FF65F2356201),reinterpret_cast(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0xA3FD368C62079765),reinterpret_cast(0xE8E3FF65F2356201),reinterpret_cast(0xD452411D3FB80A0D),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 }, -{ reinterpret_cast(0xA4CF0215A03D9571),reinterpret_cast(0xA3A659F1590CC180),reinterpret_cast(0x5A2395E29F93DA3C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_FAN,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xA59B07C00039C660),reinterpret_cast(0x2E69CC2B4937A698),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xA59B07C00039C660),reinterpret_cast(0xF6FAD0CDA667264),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xA790E2F622DADAD8),reinterpret_cast(0xD56D0D7219E51F1D),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xA7C9D01F7AD3B9D0),reinterpret_cast(0x481905CF40E1678D),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 }, -{ reinterpret_cast(0xA7C9D01F7AD3B9D0),reinterpret_cast(0x481905CF40E1678D),reinterpret_cast(0xC64D046063DE2F63),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xAC38B793E9C54AC5),reinterpret_cast(0x24CAF5A2F1B2AF40),reinterpret_cast(0x3CB3EF6B1C43B8C),true,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xB1086A4947A797DE),reinterpret_cast(0x996F5A774A646D92),reinterpret_cast(0x6FAE71C7134074A4),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 }, -{ reinterpret_cast(0xB1086A4947A797DE),reinterpret_cast(0x996F5A774A646D92),reinterpret_cast(0x6FAE71C7134074A4),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 }, -{ reinterpret_cast(0xB1086A4947A797DE),reinterpret_cast(0x996F5A774A646D92),reinterpret_cast(0x6FAE71C7134074A4),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 }, -{ reinterpret_cast(0xB1EA909C660122A7),reinterpret_cast(0x210ADAE387B4E637),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xB1EA909C660122A7),reinterpret_cast(0x2E5AA3C0A9E32751),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xB1EA909C660122A7),reinterpret_cast(0xC96708D6F26CC6D9),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xB4CAFC034A37C8A8),reinterpret_cast(0x31173204A896098A),reinterpret_cast(0x5A22D93C543DF925),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 }, -{ reinterpret_cast(0xB4CAFC034A37C8A8),reinterpret_cast(0x31173204A896098A),reinterpret_cast(0x5A22D93C543DF925),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 }, -{ reinterpret_cast(0xB4CAFC034A37C8A8),reinterpret_cast(0x31173204A896098A),reinterpret_cast(0x5A22D93C543DF925),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 }, -{ reinterpret_cast(0xB4CAFC034A37C8A8),reinterpret_cast(0x31173204A896098A),reinterpret_cast(0x5A22D93C543DF925),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 }, -{ reinterpret_cast(0xBBCA26116595B813),reinterpret_cast(0xA49C36AAB25D5C18),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xBBD01C46D72EDC37),reinterpret_cast(0x4E1399E5E0E40511),reinterpret_cast(0xE6B3B3D286909AB9),true,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xBE3AD1D0FE788D2),reinterpret_cast(0x4CB3784D7108745F),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xBE3AD1D0FE788D2),reinterpret_cast(0xD57D71ED84D8F864),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xCF28F33974EC44F6),reinterpret_cast(0xD5EA32DB758EF0B8),reinterpret_cast(0x7F12180DC3A24B53),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 }, -{ reinterpret_cast(0xD738D79626374EBE),reinterpret_cast(0x47CDF40D1C605E0D),reinterpret_cast(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xD738D79626374EBE),reinterpret_cast(0x47CDF40D1C605E0D),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xD738D79626374EBE),reinterpret_cast(0x47CDF40D1C605E0D),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xD738D79626374EBE),reinterpret_cast(0x47CDF40D1C605E0D),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0xD738D79626374EBE),reinterpret_cast(0x96B8F9FDAAB9B658),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 }, -{ reinterpret_cast(0xD738D79626374EBE),reinterpret_cast(0xAAE40F54746EB116),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xD738D79626374EBE),reinterpret_cast(0xAAE40F54746EB116),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xD738D79626374EBE),reinterpret_cast(0xAAE40F54746EB116),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0xD76A2126E37AFDF7),reinterpret_cast(0x28BF84513BD40F48),reinterpret_cast(0x84BACD816D86543C),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x10 }, -{ reinterpret_cast(0xD76A2126E37AFDF7),reinterpret_cast(0x28BF84513BD40F48),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0x6538EB0019C3A29A),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,5033,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,50331,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,0.5,16777,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,5033,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,0.5,16777,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,5033,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xC64D046063DE2F63),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,5033,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xC64D046063DE2F63),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,5033,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::FRONT,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,0.5,16777,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,5033,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,5033,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,0.5,16777,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDD4FA7BB53876300),reinterpret_cast(0xE2ECA594590DDE8B),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,50331,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x4 }, -{ reinterpret_cast(0xDFFC2D1B9A9E3AEE),reinterpret_cast(0x66AF50618E018888),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xDFFC2D1B9A9E3AEE),reinterpret_cast(0xE7D021B2EA48123A),reinterpret_cast(0xFB4544424558E4C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xE13A1CE54300FDDB),reinterpret_cast(0x448DE9339EBF4E2C),reinterpret_cast(0xEC0CD05EE1B1636),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_LIST,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x10 }, -{ reinterpret_cast(0xE3F89D54625A362B),reinterpret_cast(0x671EF904EB106967),reinterpret_cast(0x2A6D72391BFFFA3C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xE853F3CAD5281CA7),reinterpret_cast(0x57917264BE34D139),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xE853F3CAD5281CA7),reinterpret_cast(0xBADD187D63E7FD1D),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xE853F3CAD5281CA7),reinterpret_cast(0xFA3C57CCF8519475),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xECC9C0BD668FE449),reinterpret_cast(0x1DAEB3E3E514A09B),reinterpret_cast(0xB7BBCC93738C9DE4),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xECC9C0BD668FE449),reinterpret_cast(0x4C4032F88196B450),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xECC9C0BD668FE449),reinterpret_cast(0xC7E2C782C058A625),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xECC9C0BD668FE449),reinterpret_cast(0xFB66DF5D27D3891D),reinterpret_cast(0xDEB308DCDDF979C7),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xF060DE53CF3B9BB8),reinterpret_cast(0xEAADA73091BF526C),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0xF066433D33B62D54),reinterpret_cast(0xE5256B7D753C9D5F),reinterpret_cast(0x3CB3EF6B1C43B8C),true,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xF1D7C544D61D055C),reinterpret_cast(0x5A75A52C3F722625),reinterpret_cast(0xF10787EFFEEC0153),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 }, -{ reinterpret_cast(0xF58C10092C9EF1AF),reinterpret_cast(0x1DD6832FA7E79530),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xF58C10092C9EF1AF),reinterpret_cast(0x3281EFEADBFD41C3),reinterpret_cast(0x84BACD816D86543C),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 }, -{ reinterpret_cast(0xFD45CCD270AA6EE7),reinterpret_cast(0x6361BF0912BA4A3),reinterpret_cast(0xDEB308DCDDF979C7),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 }, -{ reinterpret_cast(0xFF5A2C4C81AA6FDF),reinterpret_cast(0xE105CB09EA634E60),reinterpret_cast(0x7F12180DC3A24B53),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 }, diff --git a/MarathonRecomp/gpu/rhi/plume_d3d12.cpp b/MarathonRecomp/gpu/rhi/plume_d3d12.cpp index cd4366103..6dc6f575f 100644 --- a/MarathonRecomp/gpu/rhi/plume_d3d12.cpp +++ b/MarathonRecomp/gpu/rhi/plume_d3d12.cpp @@ -136,6 +136,10 @@ namespace plume { return DXGI_FORMAT_R32_TYPELESS; case RenderFormat::D32_FLOAT: return DXGI_FORMAT_D32_FLOAT; + case RenderFormat::D32_FLOAT_S8_UINT: + // In order to be able to create both depth-stencil and shader resource views, + // we must use R32G8X24_TYPELESS as the base type and specialize later. + return DXGI_FORMAT_R32G8X24_TYPELESS; case RenderFormat::R32_FLOAT: return DXGI_FORMAT_R32_FLOAT; case RenderFormat::R32_UINT: @@ -224,6 +228,29 @@ namespace plume { } } + static DXGI_FORMAT toDXGITextureView(RenderFormat format) { + const DXGI_FORMAT dxgiFormat = toDXGI(format); + if (dxgiFormat == DXGI_FORMAT_D32_FLOAT) { + // D3D12 and Vulkan disagree on whether D32 is usable as a texture view format. + // We just make D3D12 use R32 instead. + return DXGI_FORMAT_R32_FLOAT; + } + if (dxgiFormat == DXGI_FORMAT_R32G8X24_TYPELESS) { + // Specialize into depth view of depth-stencil texture. + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + } + return dxgiFormat; + } + + static DXGI_FORMAT toDXGIDepthStencilView(RenderFormat format) { + const DXGI_FORMAT dxgiFormat = toDXGI(format); + if (dxgiFormat == DXGI_FORMAT_R32G8X24_TYPELESS) { + // Specialize into full depth-stencil view. + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + } + return dxgiFormat; + } + static D3D12_BLEND toD3D12(RenderBlend blend) { switch (blend) { case RenderBlend::ZERO: @@ -472,6 +499,30 @@ namespace plume { } } + static D3D12_STENCIL_OP toD3D12(RenderStencilOp function) { + switch (function) { + case RenderStencilOp::KEEP: + return D3D12_STENCIL_OP_KEEP; + case RenderStencilOp::ZERO: + return D3D12_STENCIL_OP_ZERO; + case RenderStencilOp::REPLACE: + return D3D12_STENCIL_OP_REPLACE; + case RenderStencilOp::INCREMENT_AND_CLAMP: + return D3D12_STENCIL_OP_INCR_SAT; + case RenderStencilOp::DECREMENT_AND_CLAMP: + return D3D12_STENCIL_OP_DECR_SAT; + case RenderStencilOp::INVERT: + return D3D12_STENCIL_OP_INVERT; + case RenderStencilOp::INCREMENT_AND_WRAP: + return D3D12_STENCIL_OP_INCR; + case RenderStencilOp::DECREMENT_AND_WRAP: + return D3D12_STENCIL_OP_DECR; + default: + assert(false && "Unknown stencil operation."); + return D3D12_STENCIL_OP_KEEP; + } + } + static D3D12_PRIMITIVE_TOPOLOGY toD3D12(RenderPrimitiveTopology topology) { switch (topology) { case RenderPrimitiveTopology::POINT_LIST: @@ -1664,12 +1715,14 @@ namespace plume { void D3D12CommandList::drawInstanced(uint32_t vertexCountPerInstance, uint32_t instanceCount, uint32_t startVertexLocation, uint32_t startInstanceLocation) { checkTopology(); + checkStencilRef(); checkFramebufferSamplePositions(); d3d->DrawInstanced(vertexCountPerInstance, instanceCount, startVertexLocation, startInstanceLocation); } void D3D12CommandList::drawIndexedInstanced(uint32_t indexCountPerInstance, uint32_t instanceCount, uint32_t startIndexLocation, int32_t baseVertexLocation, uint32_t startInstanceLocation) { checkTopology(); + checkStencilRef(); checkFramebufferSamplePositions(); d3d->DrawIndexedInstanced(indexCountPerInstance, instanceCount, startIndexLocation, baseVertexLocation, startInstanceLocation); } @@ -1900,7 +1953,7 @@ namespace plume { d3d->ClearRenderTargetView(targetFramebuffer->colorHandles[attachmentIndex], colorValue.rgba, clearRectsCount, (clearRectsCount > 0) ? rectVector.data() : nullptr); } - void D3D12CommandList::clearDepth(bool clearDepth, float depthValue, const RenderRect *clearRects, uint32_t clearRectsCount) { + void D3D12CommandList::clearDepthStencil(bool clearDepth, bool clearStencil, float depthValue, uint32_t stencilValue, const RenderRect *clearRects, uint32_t clearRectsCount) { assert(targetFramebuffer != nullptr); assert(targetFramebuffer->depthHandle.ptr != 0); assert((clearRectsCount == 0) || (clearRects != nullptr)); @@ -1916,8 +1969,13 @@ namespace plume { } D3D12_CLEAR_FLAGS clearFlags = {}; - clearFlags |= clearDepth ? D3D12_CLEAR_FLAG_DEPTH : D3D12_CLEAR_FLAGS(0); - d3d->ClearDepthStencilView(targetFramebuffer->depthHandle, clearFlags, depthValue, 0, clearRectsCount, (clearRectsCount > 0) ? rectVector.data() : nullptr); + if (clearDepth) { + clearFlags |= D3D12_CLEAR_FLAG_DEPTH; + } + if (clearStencil) { + clearFlags |= D3D12_CLEAR_FLAG_STENCIL; + } + d3d->ClearDepthStencilView(targetFramebuffer->depthHandle, clearFlags, depthValue, stencilValue, clearRectsCount, (clearRectsCount > 0) ? rectVector.data() : nullptr); } void D3D12CommandList::copyBufferRegion(RenderBufferReference dstBuffer, RenderBufferReference srcBuffer, uint64_t size) { @@ -2085,6 +2143,17 @@ namespace plume { activeTopology = graphicsPipeline->topology; } } + + void D3D12CommandList::checkStencilRef() { + assert(activeGraphicsPipeline != nullptr); + assert(activeGraphicsPipeline->type == D3D12Pipeline::Type::Graphics); + + const D3D12GraphicsPipeline *graphicsPipeline = static_cast(activeGraphicsPipeline); + if (activeStencilRef != graphicsPipeline->stencilRef) { + d3d->OMSetStencilRef(graphicsPipeline->stencilRef); + activeStencilRef = graphicsPipeline->stencilRef; + } + } void D3D12CommandList::checkFramebufferSamplePositions() { if (!targetFramebufferSamplePositionsSet && (targetFramebuffer != nullptr)) { @@ -2430,16 +2499,11 @@ namespace plume { assert(texture != nullptr); this->texture = texture; - this->format = toDXGI(desc.format); + this->format = toDXGITextureView(desc.format); this->dimension = desc.dimension; this->mipLevels = desc.mipLevels; this->mipSlice = desc.mipSlice; this->shader4ComponentMapping = toD3D12(desc.componentMapping); - - // D3D12 and Vulkan disagree on whether D32 is usable as a texture view format. We just make D3D12 use R32 instead. - if (format == DXGI_FORMAT_D32_FLOAT) { - format = DXGI_FORMAT_R32_FLOAT; - } } D3D12TextureView::~D3D12TextureView() { } @@ -2566,7 +2630,7 @@ namespace plume { targetHeapDepth = true; D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc = {}; - dsvDesc.Format = toDXGI(desc.format); + dsvDesc.Format = toDXGIDepthStencilView(desc.format); const bool isMSAA = (desc.multisampling.sampleCount > RenderSampleCount::COUNT_1); switch (desc.dimension) { @@ -2820,6 +2884,17 @@ namespace plume { psoDesc.DepthStencilState.DepthEnable = desc.depthEnabled; psoDesc.DepthStencilState.DepthWriteMask = desc.depthWriteEnabled ? D3D12_DEPTH_WRITE_MASK_ALL : D3D12_DEPTH_WRITE_MASK_ZERO; psoDesc.DepthStencilState.DepthFunc = toD3D12(desc.depthFunction); + psoDesc.DepthStencilState.StencilEnable = desc.stencilEnabled; + psoDesc.DepthStencilState.StencilReadMask = desc.stencilReadMask; + psoDesc.DepthStencilState.StencilWriteMask = desc.stencilWriteMask; + psoDesc.DepthStencilState.FrontFace.StencilFailOp = toD3D12(desc.stencilFrontFace.failOp); + psoDesc.DepthStencilState.FrontFace.StencilDepthFailOp = toD3D12(desc.stencilFrontFace.depthFailOp); + psoDesc.DepthStencilState.FrontFace.StencilPassOp = toD3D12(desc.stencilFrontFace.passOp); + psoDesc.DepthStencilState.FrontFace.StencilFunc = toD3D12(desc.stencilFrontFace.compareFunction); + psoDesc.DepthStencilState.BackFace.StencilFailOp = toD3D12(desc.stencilBackFace.failOp); + psoDesc.DepthStencilState.BackFace.StencilDepthFailOp = toD3D12(desc.stencilBackFace.depthFailOp); + psoDesc.DepthStencilState.BackFace.StencilPassOp = toD3D12(desc.stencilBackFace.passOp); + psoDesc.DepthStencilState.BackFace.StencilFunc = toD3D12(desc.stencilBackFace.compareFunction); psoDesc.NumRenderTargets = desc.renderTargetCount; psoDesc.BlendState.AlphaToCoverageEnable = desc.alphaToCoverageEnabled; @@ -2840,7 +2915,7 @@ namespace plume { targetDesc.RenderTargetWriteMask = renderDesc.renderTargetWriteMask; } - psoDesc.DSVFormat = toDXGI(desc.depthTargetFormat); + psoDesc.DSVFormat = toDXGIDepthStencilView(desc.depthTargetFormat); std::vector inputElements; for (uint32_t i = 0; i < desc.inputElementsCount; i++) { diff --git a/MarathonRecomp/gpu/rhi/plume_d3d12.h b/MarathonRecomp/gpu/rhi/plume_d3d12.h index d4987fbc9..546067393 100644 --- a/MarathonRecomp/gpu/rhi/plume_d3d12.h +++ b/MarathonRecomp/gpu/rhi/plume_d3d12.h @@ -170,6 +170,7 @@ namespace plume { const D3D12GraphicsPipeline *activeGraphicsPipeline = nullptr; bool descriptorHeapsSet = false; D3D12_PRIMITIVE_TOPOLOGY activeTopology = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED; + uint32_t activeStencilRef = 0; bool activeSamplePositions = false; D3D12CommandList(D3D12Device *device, RenderCommandListType type); @@ -199,7 +200,7 @@ namespace plume { void setFramebuffer(const RenderFramebuffer *framebuffer) override; void setDepthBias(float depthBias, float depthBiasClamp, float slopeScaledDepthBias) override; void clearColor(uint32_t attachmentIndex, RenderColor colorValue, const RenderRect *clearRects, uint32_t clearRectsCount) override; - void clearDepth(bool clearDepth, float depthValue, const RenderRect *clearRects, uint32_t clearRectsCount) override; + void clearDepthStencil(bool clearDepth, bool clearStencil, float depthValue, uint32_t stencilValue, const RenderRect *clearRects, uint32_t clearRectsCount) override; void copyBufferRegion(RenderBufferReference dstBuffer, RenderBufferReference srcBuffer, uint64_t size) override; void copyTextureRegion(const RenderTextureCopyLocation &dstLocation, const RenderTextureCopyLocation &srcLocation, uint32_t dstX, uint32_t dstY, uint32_t dstZ, const RenderBox *srcBox) override; void copyBuffer(const RenderBuffer *dstBuffer, const RenderBuffer *srcBuffer) override; @@ -214,6 +215,7 @@ namespace plume { void checkDescriptorHeaps(); void notifyDescriptorHeapWasChangedExternally(); void checkTopology(); + void checkStencilRef(); void checkFramebufferSamplePositions(); void setSamplePositions(const RenderTexture *texture); void resetSamplePositions(); @@ -384,6 +386,7 @@ namespace plume { ID3D12PipelineState *d3d = nullptr; std::vector inputSlots; D3D12_PRIMITIVE_TOPOLOGY topology = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED; + uint32_t stencilRef = 0; D3D12GraphicsPipeline(D3D12Device *device, const RenderGraphicsPipelineDesc &desc); ~D3D12GraphicsPipeline() override; diff --git a/MarathonRecomp/gpu/rhi/plume_render_interface.h b/MarathonRecomp/gpu/rhi/plume_render_interface.h index a608c9ece..812522c74 100644 --- a/MarathonRecomp/gpu/rhi/plume_render_interface.h +++ b/MarathonRecomp/gpu/rhi/plume_render_interface.h @@ -138,7 +138,7 @@ namespace plume { virtual void setFramebuffer(const RenderFramebuffer *framebuffer) = 0; virtual void setDepthBias(float depthBias, float depthBiasClamp, float slopeScaledDepthBias) = 0; virtual void clearColor(uint32_t attachmentIndex = 0, RenderColor colorValue = RenderColor(), const RenderRect *clearRects = nullptr, uint32_t clearRectsCount = 0) = 0; - virtual void clearDepth(bool clearDepth = true, float depthValue = 1.0f, const RenderRect *clearRects = nullptr, uint32_t clearRectsCount = 0) = 0; + virtual void clearDepthStencil(bool clearDepth = true, bool clearStencil = true, float depthValue = 1.0f, uint32_t stencilValue = 0, const RenderRect *clearRects = nullptr, uint32_t clearRectsCount = 0) = 0; virtual void copyBufferRegion(RenderBufferReference dstBuffer, RenderBufferReference srcBuffer, uint64_t size) = 0; virtual void copyTextureRegion(const RenderTextureCopyLocation &dstLocation, const RenderTextureCopyLocation &srcLocation, uint32_t dstX = 0, uint32_t dstY = 0, uint32_t dstZ = 0, const RenderBox *srcBox = nullptr) = 0; virtual void copyBuffer(const RenderBuffer *dstBuffer, const RenderBuffer *srcBuffer) = 0; @@ -191,6 +191,10 @@ namespace plume { inline void setScissors(const RenderRect &scissorRect) { setScissors(&scissorRect, 1); } + + inline void clearDepth(bool clearDepth = true, float depthValue = 1.0f, const RenderRect *clearRects = nullptr, uint32_t clearRectsCount = 0) { + clearDepthStencil(clearDepth, false, depthValue, 0, clearRects, clearRectsCount); + } }; struct RenderCommandQueue { diff --git a/MarathonRecomp/gpu/rhi/plume_render_interface_types.h b/MarathonRecomp/gpu/rhi/plume_render_interface_types.h index 84914c889..2a2f1b442 100644 --- a/MarathonRecomp/gpu/rhi/plume_render_interface_types.h +++ b/MarathonRecomp/gpu/rhi/plume_render_interface_types.h @@ -116,6 +116,7 @@ namespace plume { R16G16_SINT, R32_TYPELESS, D32_FLOAT, + D32_FLOAT_S8_UINT, R32_FLOAT, R32_UINT, R32_SINT, @@ -226,6 +227,18 @@ namespace plume { ALWAYS }; + enum class RenderStencilOp { + UNKNOWN, + KEEP, + ZERO, + REPLACE, + INCREMENT_AND_CLAMP, + DECREMENT_AND_CLAMP, + INVERT, + INCREMENT_AND_WRAP, + DECREMENT_AND_WRAP + }; + enum class RenderInputSlotClassification { UNKNOWN, PER_VERTEX_DATA, @@ -523,6 +536,7 @@ namespace plume { case RenderFormat::R32G32_FLOAT: case RenderFormat::R32G32_UINT: case RenderFormat::R32G32_SINT: + case RenderFormat::D32_FLOAT_S8_UINT: // Has 24 unused bits return 8; case RenderFormat::R8G8B8A8_TYPELESS: case RenderFormat::R8G8B8A8_UNORM: @@ -621,6 +635,7 @@ namespace plume { case RenderFormat::R16G16_SINT: case RenderFormat::R32_TYPELESS: case RenderFormat::D32_FLOAT: + case RenderFormat::D32_FLOAT_S8_UINT: case RenderFormat::R32_FLOAT: case RenderFormat::R32_UINT: case RenderFormat::R32_SINT: @@ -670,6 +685,21 @@ namespace plume { } }; + constexpr bool RenderFormatIsDepth(RenderFormat format) { + switch (format) { + case RenderFormat::D16_UNORM: + case RenderFormat::D32_FLOAT: + case RenderFormat::D32_FLOAT_S8_UINT: + return true; + default: + return false; + } + } + + constexpr bool RenderFormatIsStencil(RenderFormat format) { + return format == RenderFormat::D32_FLOAT_S8_UINT; + } + // Concrete structs. struct RenderColor { @@ -1158,6 +1188,13 @@ namespace plume { } }; + struct RenderStencilFaceDesc { + RenderStencilOp passOp = RenderStencilOp::KEEP; + RenderStencilOp failOp = RenderStencilOp::KEEP; + RenderStencilOp depthFailOp = RenderStencilOp::KEEP; + RenderComparisonFunction compareFunction = RenderComparisonFunction::ALWAYS; + }; + struct RenderSpecConstant { uint32_t index = 0; uint32_t value = 0; @@ -1198,6 +1235,12 @@ namespace plume { bool dynamicDepthBiasEnabled = false; bool depthEnabled = false; bool depthWriteEnabled = false; + bool stencilEnabled = false; + uint32_t stencilReadMask = 0xFFFFFFFF; + uint32_t stencilWriteMask = 0xFFFFFFFF; + uint32_t stencilReference = 0; + RenderStencilFaceDesc stencilFrontFace; + RenderStencilFaceDesc stencilBackFace; RenderMultisampling multisampling; bool alphaToCoverageEnabled = false; RenderPrimitiveTopology primitiveTopology = RenderPrimitiveTopology::TRIANGLE_LIST; diff --git a/MarathonRecomp/gpu/rhi/plume_vulkan.cpp b/MarathonRecomp/gpu/rhi/plume_vulkan.cpp index 3f4c4a1e6..bd999090c 100644 --- a/MarathonRecomp/gpu/rhi/plume_vulkan.cpp +++ b/MarathonRecomp/gpu/rhi/plume_vulkan.cpp @@ -163,6 +163,8 @@ namespace plume { return VK_FORMAT_R32_SFLOAT; case RenderFormat::D32_FLOAT: return VK_FORMAT_D32_SFLOAT; + case RenderFormat::D32_FLOAT_S8_UINT: + return VK_FORMAT_D32_SFLOAT_S8_UINT; case RenderFormat::R32_FLOAT: return VK_FORMAT_R32_SFLOAT; case RenderFormat::R32_UINT: @@ -477,6 +479,30 @@ namespace plume { } } + static VkStencilOp toVk(RenderStencilOp operation) { + switch (operation) { + case RenderStencilOp::KEEP: + return VK_STENCIL_OP_KEEP; + case RenderStencilOp::ZERO: + return VK_STENCIL_OP_ZERO; + case RenderStencilOp::REPLACE: + return VK_STENCIL_OP_REPLACE; + case RenderStencilOp::INCREMENT_AND_CLAMP: + return VK_STENCIL_OP_INCREMENT_AND_CLAMP; + case RenderStencilOp::DECREMENT_AND_CLAMP: + return VK_STENCIL_OP_DECREMENT_AND_CLAMP; + case RenderStencilOp::INVERT: + return VK_STENCIL_OP_INVERT; + case RenderStencilOp::INCREMENT_AND_WRAP: + return VK_STENCIL_OP_INCREMENT_AND_WRAP; + case RenderStencilOp::DECREMENT_AND_WRAP: + return VK_STENCIL_OP_DECREMENT_AND_WRAP; + default: + assert(false && "Unknown stencil operation."); + return VK_STENCIL_OP_MAX_ENUM; + } + } + static VkDescriptorType toVk(RenderDescriptorRangeType type) { switch (type) { case RenderDescriptorRangeType::CONSTANT_BUFFER: @@ -1536,6 +1562,21 @@ namespace plume { depthStencil.depthBoundsTestEnable = VK_FALSE; depthStencil.minDepthBounds = 0.0f; depthStencil.maxDepthBounds = 1.0f; + depthStencil.stencilTestEnable = desc.stencilEnabled; + depthStencil.front.passOp = toVk(desc.stencilFrontFace.passOp); + depthStencil.front.failOp = toVk(desc.stencilFrontFace.failOp); + depthStencil.front.depthFailOp = toVk(desc.stencilFrontFace.depthFailOp); + depthStencil.front.compareOp = toVk(desc.stencilFrontFace.compareFunction); + depthStencil.front.compareMask = desc.stencilReadMask; + depthStencil.front.writeMask = desc.stencilWriteMask; + depthStencil.front.reference = desc.stencilReference; + depthStencil.back.passOp = toVk(desc.stencilBackFace.passOp); + depthStencil.back.failOp = toVk(desc.stencilBackFace.failOp); + depthStencil.back.depthFailOp = toVk(desc.stencilBackFace.depthFailOp); + depthStencil.back.compareOp = toVk(desc.stencilBackFace.compareFunction); + depthStencil.back.compareMask = desc.stencilReadMask; + depthStencil.back.writeMask = desc.stencilWriteMask; + depthStencil.back.reference = desc.stencilReference; thread_local std::vector dynamicStates; dynamicStates.clear(); @@ -1584,7 +1625,7 @@ namespace plume { return; } } - + VulkanGraphicsPipeline::~VulkanGraphicsPipeline() { if (vk != VK_NULL_HANDLE) { vkDestroyPipeline(device->vk, vk, nullptr); @@ -2753,7 +2794,14 @@ namespace plume { imageMemoryBarrier.newLayout = toImageLayout(textureBarrier.layout); imageMemoryBarrier.subresourceRange.levelCount = interfaceTexture->desc.mipLevels; imageMemoryBarrier.subresourceRange.layerCount = interfaceTexture->desc.arraySize; - imageMemoryBarrier.subresourceRange.aspectMask = (interfaceTexture->desc.flags & RenderTextureFlag::DEPTH_TARGET) ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; + if (interfaceTexture->desc.flags & RenderTextureFlag::DEPTH_TARGET) { + imageMemoryBarrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT; + if (RenderFormatIsStencil(interfaceTexture->desc.format)) { + imageMemoryBarrier.subresourceRange.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT; + } + } else { + imageMemoryBarrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + } imageMemoryBarriers.emplace_back(imageMemoryBarrier); srcStageMask |= toStageFlags(interfaceTexture->barrierStages, geometryEnabled, rtEnabled); interfaceTexture->textureLayout = textureBarrier.layout; @@ -3036,7 +3084,7 @@ namespace plume { vkCmdClearAttachments(vk, 1, &attachment, uint32_t(rectVector.size()), rectVector.data()); } - void VulkanCommandList::clearDepth(bool clearDepth, float depthValue, const RenderRect *clearRects, uint32_t clearRectsCount) { + void VulkanCommandList::clearDepthStencil(bool clearDepth, bool clearStencil, float depthValue, uint32_t stencilValue, const RenderRect *clearRects, uint32_t clearRectsCount) { assert(targetFramebuffer != nullptr); assert((clearRectsCount == 0) || (clearRects != nullptr)); @@ -3047,9 +3095,13 @@ namespace plume { VkClearAttachment attachment = {}; attachment.clearValue.depthStencil.depth = depthValue; + attachment.clearValue.depthStencil.stencil = stencilValue; if (clearDepth) { - attachment.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT; + attachment.aspectMask |= VK_IMAGE_ASPECT_DEPTH_BIT; + } + if (clearStencil) { + attachment.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT; } vkCmdClearAttachments(vk, 1, &attachment, uint32_t(rectVector.size()), rectVector.data()); @@ -4247,10 +4299,9 @@ namespace plume { const RenderDeviceDescription &VulkanDevice::getDescription() const { return description; } - + RenderSampleCounts VulkanDevice::getSampleCountsSupported(RenderFormat format) const { - const bool isDepthFormat = (format == RenderFormat::D16_UNORM) || (format == RenderFormat::D32_FLOAT); - if (isDepthFormat) { + if (RenderFormatIsDepth(format)) { return RenderSampleCounts(physicalDeviceProperties.limits.framebufferDepthSampleCounts); } else { diff --git a/MarathonRecomp/gpu/rhi/plume_vulkan.h b/MarathonRecomp/gpu/rhi/plume_vulkan.h index a01a5bd2c..ef22ef83e 100644 --- a/MarathonRecomp/gpu/rhi/plume_vulkan.h +++ b/MarathonRecomp/gpu/rhi/plume_vulkan.h @@ -327,7 +327,7 @@ namespace plume { void setFramebuffer(const RenderFramebuffer *framebuffer) override; void setDepthBias(float depthBias, float depthBiasClamp, float slopeScaledDepthBias) override; void clearColor(uint32_t attachmentIndex, RenderColor colorValue, const RenderRect *clearRects, uint32_t clearRectsCount) override; - void clearDepth(bool clearDepth, float depthValue, const RenderRect *clearRects, uint32_t clearRectsCount) override; + void clearDepthStencil(bool clearDepth, bool clearStencil, float depthValue, uint32_t stencilValue, const RenderRect *clearRects, uint32_t clearRectsCount) override; void copyBufferRegion(RenderBufferReference dstBuffer, RenderBufferReference srcBuffer, uint64_t size) override; void copyTextureRegion(const RenderTextureCopyLocation &dstLocation, const RenderTextureCopyLocation &srcLocation, uint32_t dstX, uint32_t dstY, uint32_t dstZ, const RenderBox *srcBox) override; void copyBuffer(const RenderBuffer *dstBuffer, const RenderBuffer *srcBuffer) override; diff --git a/MarathonRecomp/gpu/video.cpp b/MarathonRecomp/gpu/video.cpp index eb2fea97f..cbf86036d 100644 --- a/MarathonRecomp/gpu/video.cpp +++ b/MarathonRecomp/gpu/video.cpp @@ -128,10 +128,23 @@ struct PipelineState bool instancing = false; bool zEnable = true; bool zWriteEnable = true; + bool stencilEnable = false; + bool stencilTwoSided = false; RenderBlend srcBlend = RenderBlend::ONE; RenderBlend destBlend = RenderBlend::ZERO; RenderCullMode cullMode = RenderCullMode::NONE; RenderComparisonFunction zFunc = RenderComparisonFunction::LESS; + RenderComparisonFunction stencilFunc = RenderComparisonFunction::ALWAYS; + RenderStencilOp stencilFail = RenderStencilOp::KEEP; + RenderStencilOp stencilZFail = RenderStencilOp::KEEP; + RenderStencilOp stencilPass = RenderStencilOp::KEEP; + RenderComparisonFunction stencilFuncCCW = RenderComparisonFunction::ALWAYS; + RenderStencilOp stencilFailCCW = RenderStencilOp::KEEP; + RenderStencilOp stencilZFailCCW = RenderStencilOp::KEEP; + RenderStencilOp stencilPassCCW = RenderStencilOp::KEEP; + uint32_t stencilMask = 0xFFFFFFFF; + uint32_t stencilWriteMask = 0xFFFFFFFF; + uint32_t stencilRef = 0; bool alphaBlendEnable = false; RenderBlendOperation blendOp = RenderBlendOperation::ADD; float slopeScaledDepthBias = 0.0f; @@ -889,6 +902,7 @@ struct RenderCommand uint32_t flags; float color[4]; float z; + uint32_t stencil; } clear; struct @@ -1091,6 +1105,58 @@ static RenderBlendOperation ConvertBlendOp(uint32_t blendOp) } } +static RenderComparisonFunction ConvertCompareFunc(uint32_t compareFunc) +{ + switch (compareFunc) + { + case D3DCMP_NEVER: + return RenderComparisonFunction::NEVER; + case D3DCMP_LESS: + return RenderComparisonFunction::LESS; + case D3DCMP_EQUAL: + return RenderComparisonFunction::EQUAL; + case D3DCMP_LESSEQUAL: + return RenderComparisonFunction::LESS_EQUAL; + case D3DCMP_GREATER: + return RenderComparisonFunction::GREATER; + case D3DCMP_NOTEQUAL: + return RenderComparisonFunction::NOT_EQUAL; + case D3DCMP_GREATEREQUAL: + return RenderComparisonFunction::GREATER_EQUAL; + case D3DCMP_ALWAYS: + return RenderComparisonFunction::ALWAYS; + default: + assert(false && "Unknown comparison function"); + return RenderComparisonFunction::NEVER; + } +} + +static RenderStencilOp ConvertStencilOp(uint32_t stencilOp) +{ + switch (stencilOp) + { + case D3DSTENCILOP_KEEP: + return RenderStencilOp::KEEP; + case D3DSTENCILOP_ZERO: + return RenderStencilOp::ZERO; + case D3DSTENCILOP_REPLACE: + return RenderStencilOp::REPLACE; + case D3DSTENCILOP_INCRSAT: + return RenderStencilOp::INCREMENT_AND_CLAMP; + case D3DSTENCILOP_DECRSAT: + return RenderStencilOp::DECREMENT_AND_CLAMP; + case D3DSTENCILOP_INVERT: + return RenderStencilOp::INVERT; + case D3DSTENCILOP_INCR: + return RenderStencilOp::INCREMENT_AND_WRAP; + case D3DSTENCILOP_DECR: + return RenderStencilOp::DECREMENT_AND_WRAP; + default: + assert(false && "Unknown stencil op"); + return RenderStencilOp::KEEP; + } +} + static void ProcSetRenderState(const RenderCommand& cmd) { uint32_t value = cmd.setRenderState.value; @@ -1108,6 +1174,17 @@ static void ProcSetRenderState(const RenderCommand& cmd) SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.zWriteEnable, value != 0); break; } + case D3DRS_STENCILENABLE: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilEnable, value != 0); + g_dirtyStates.renderTargetAndDepthStencil |= g_dirtyStates.pipelineState; + break; + } + case D3DRS_TWOSIDEDSTENCILMODE: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilTwoSided, value != 0); + break; + } case D3DRS_ALPHATESTENABLE: { SetAlphaTestMode(value != 0); @@ -1149,41 +1226,62 @@ static void ProcSetRenderState(const RenderCommand& cmd) } case D3DRS_ZFUNC: { - RenderComparisonFunction comparisonFunc; - - switch (value) - { - case D3DCMP_NEVER: - comparisonFunc = RenderComparisonFunction::NEVER; - break; - case D3DCMP_LESS: - comparisonFunc = RenderComparisonFunction::LESS; - break; - case D3DCMP_EQUAL: - comparisonFunc = RenderComparisonFunction::EQUAL; - break; - case D3DCMP_LESSEQUAL: - comparisonFunc = RenderComparisonFunction::LESS_EQUAL; - break; - case D3DCMP_GREATER: - comparisonFunc = RenderComparisonFunction::GREATER; - break; - case D3DCMP_NOTEQUAL: - comparisonFunc = RenderComparisonFunction::NOT_EQUAL; - break; - case D3DCMP_GREATEREQUAL: - comparisonFunc = RenderComparisonFunction::GREATER_EQUAL; - break; - case D3DCMP_ALWAYS: - comparisonFunc = RenderComparisonFunction::ALWAYS; - break; - default: - assert(false && "Unknown comparison function"); - comparisonFunc = RenderComparisonFunction::NEVER; - break; - } - - SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.zFunc, comparisonFunc); + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.zFunc, ConvertCompareFunc(value)); + break; + } + case D3DRS_STENCILFUNC: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilFunc, ConvertCompareFunc(value)); + break; + } + case D3DRS_STENCILFAIL: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilFail, ConvertStencilOp(value)); + break; + } + case D3DRS_STENCILZFAIL: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilZFail, ConvertStencilOp(value)); + break; + } + case D3DRS_STENCILPASS: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilPass, ConvertStencilOp(value)); + break; + } + case D3DRS_CCW_STENCILFUNC: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilFuncCCW, ConvertCompareFunc(value)); + break; + } + case D3DRS_CCW_STENCILFAIL: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilFailCCW, ConvertStencilOp(value)); + break; + } + case D3DRS_CCW_STENCILZFAIL: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilZFailCCW, ConvertStencilOp(value)); + break; + } + case D3DRS_CCW_STENCILPASS: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilPassCCW, ConvertStencilOp(value)); + break; + } + case D3DRS_STENCILREF: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilRef, value); + break; + } + case D3DRS_STENCILMASK: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilMask, value); + break; + } + case D3DRS_STENCILWRITEMASK: + { + SetDirtyValue(g_dirtyStates.pipelineState, g_pipelineState.stencilWriteMask, value); break; } case D3DRS_ALPHAREF: @@ -1266,7 +1364,20 @@ static const std::pair g_setRenderStateFunctions[] = { D3DRS_SRCBLENDALPHA, HostToGuestFunction> }, { D3DRS_DESTBLENDALPHA, HostToGuestFunction> }, { D3DRS_BLENDOPALPHA, HostToGuestFunction> }, - { D3DRS_COLORWRITEENABLE, HostToGuestFunction> } + { D3DRS_COLORWRITEENABLE, HostToGuestFunction> }, + { D3DRS_STENCILENABLE, HostToGuestFunction> }, + { D3DRS_TWOSIDEDSTENCILMODE, HostToGuestFunction> }, + { D3DRS_STENCILFAIL, HostToGuestFunction> }, + { D3DRS_STENCILZFAIL, HostToGuestFunction> }, + { D3DRS_STENCILPASS, HostToGuestFunction> }, + { D3DRS_STENCILFUNC, HostToGuestFunction> }, + { D3DRS_STENCILREF, HostToGuestFunction> }, + { D3DRS_STENCILMASK, HostToGuestFunction> }, + { D3DRS_STENCILWRITEMASK, HostToGuestFunction> }, + { D3DRS_CCW_STENCILFAIL, HostToGuestFunction> }, + { D3DRS_CCW_STENCILZFAIL, HostToGuestFunction> }, + { D3DRS_CCW_STENCILPASS, HostToGuestFunction> }, + { D3DRS_CCW_STENCILFUNC, HostToGuestFunction> } }; static std::unique_ptr g_copyShader; @@ -1899,7 +2010,7 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver) desc.depthFunction = RenderComparisonFunction::ALWAYS; desc.depthEnabled = true; desc.depthWriteEnabled = true; - desc.depthTargetFormat = RenderFormat::D32_FLOAT; + desc.depthTargetFormat = RenderFormat::D32_FLOAT_S8_UINT; g_copyDepthPipeline = g_device->createGraphicsPipeline(desc); g_resolveMsaaColorShaders[0] = CREATE_SHADER(resolve_msaa_color_2x); @@ -1929,7 +2040,7 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver) desc.depthFunction = RenderComparisonFunction::ALWAYS; desc.depthEnabled = true; desc.depthWriteEnabled = true; - desc.depthTargetFormat = RenderFormat::D32_FLOAT; + desc.depthTargetFormat = RenderFormat::D32_FLOAT_S8_UINT; g_resolveMsaaDepthPipelines[i] = g_device->createGraphicsPipeline(desc); } @@ -2993,7 +3104,7 @@ static RenderFormat ConvertFormat(uint32_t format) return RenderFormat::R32_FLOAT; case D3DFMT_D24FS8: case D3DFMT_D24S8: - return RenderFormat::D32_FLOAT; + return RenderFormat::D32_FLOAT_S8_UINT; case D3DFMT_G16R16F: case D3DFMT_G16R16F_2: return RenderFormat::R16G16_FLOAT; @@ -3050,7 +3161,7 @@ static GuestTexture* CreateTexture(uint32_t width, uint32_t height, uint32_t dep desc.arraySize = 1; } - if (desc.format == RenderFormat::D32_FLOAT) + if (RenderFormatIsDepth(desc.format)) desc.flags = RenderTextureFlag::DEPTH_TARGET; else if (usage != 0) desc.flags = RenderTextureFlag::RENDER_TARGET; @@ -3158,9 +3269,9 @@ static GuestSurface* CreateSurface(uint32_t width, uint32_t height, uint32_t for desc.multisampling.sampleCount = multiSample == 1 ? RenderSampleCount::COUNT_2 : RenderSampleCount::COUNT_4; } desc.format = ConvertFormat(format); - desc.flags = desc.format == RenderFormat::D32_FLOAT ? RenderTextureFlag::DEPTH_TARGET : RenderTextureFlag::RENDER_TARGET; + desc.flags = RenderFormatIsDepth(desc.format) ? RenderTextureFlag::DEPTH_TARGET : RenderTextureFlag::RENDER_TARGET; - surface = g_userHeap.AllocPhysical(desc.format == RenderFormat::D32_FLOAT ? + surface = g_userHeap.AllocPhysical(RenderFormatIsDepth(desc.format) ? ResourceType::DepthStencil : ResourceType::RenderTarget); surface->textureHolder = g_device->createTexture(desc); @@ -3357,18 +3468,18 @@ static bool PopulateBarriersForStretchRect(GuestSurface* renderTarget, GuestSurf // Hardware depth resolve is only supported on D3D12 when programmable sample positions are available. bool hardwareDepthResolveAvailable = g_hardwareDepthResolve && !g_vulkan && g_capabilities.sampleLocations; - if (surface->format != RenderFormat::D32_FLOAT || hardwareDepthResolveAvailable) + if (!RenderFormatIsDepth(surface->format) || hardwareDepthResolveAvailable) { srcLayout = RenderTextureLayout::RESOLVE_SOURCE; dstLayout = RenderTextureLayout::RESOLVE_DEST; shaderResolve = false; } } - + if (shaderResolve) { srcLayout = RenderTextureLayout::SHADER_READ; - dstLayout = (surface->format == RenderFormat::D32_FLOAT ? RenderTextureLayout::DEPTH_WRITE : RenderTextureLayout::COLOR_WRITE); + dstLayout = (RenderFormatIsDepth(surface->format) ? RenderTextureLayout::DEPTH_WRITE : RenderTextureLayout::COLOR_WRITE); } AddBarrier(surface, srcLayout); @@ -3392,6 +3503,7 @@ static void ExecutePendingStretchRectCommands(GuestSurface* renderTarget, GuestS if (surface != nullptr && !surface->destinationTextures.empty()) { const bool multiSampling = surface->sampleCount != RenderSampleCount::COUNT_1; + const bool isDepthStencil = RenderFormatIsDepth(surface->format); for (const auto texture : surface->destinationTextures) { @@ -3401,9 +3513,9 @@ static void ExecutePendingStretchRectCommands(GuestSurface* renderTarget, GuestS { bool hardwareDepthResolveAvailable = g_hardwareDepthResolve && !g_vulkan && g_capabilities.sampleLocations; - if (surface->format != RenderFormat::D32_FLOAT || hardwareDepthResolveAvailable) + if (!isDepthStencil || hardwareDepthResolveAvailable) { - if (surface->format == RenderFormat::D32_FLOAT) + if (isDepthStencil) commandList->resolveTextureRegion(texture->texture, 0, 0, surface->texture, nullptr, RenderResolveMode::MIN); else commandList->resolveTexture(texture->texture, surface->texture); @@ -3436,7 +3548,7 @@ static void ExecutePendingStretchRectCommands(GuestSurface* renderTarget, GuestS break; } - if (texture->format == RenderFormat::D32_FLOAT) + if (isDepthStencil) { pipeline = g_resolveMsaaDepthPipelines[pipelineIndex].get(); } @@ -3460,7 +3572,7 @@ static void ExecutePendingStretchRectCommands(GuestSurface* renderTarget, GuestS } else { - if (texture->format == RenderFormat::D32_FLOAT) + if (isDepthStencil) { pipeline = g_copyDepthPipeline.get(); } @@ -3485,7 +3597,7 @@ static void ExecutePendingStretchRectCommands(GuestSurface* renderTarget, GuestS if (texture->framebuffer == nullptr) { - if (texture->format == RenderFormat::D32_FLOAT) + if (isDepthStencil) { RenderFramebufferDesc desc; desc.depthAttachment = texture->texture; @@ -3546,7 +3658,7 @@ static void ProcExecutePendingStretchRectCommands(const RenderCommand& cmd) for (const auto surface : g_pendingSurfaceCopies) { // Depth stencil textures in this game are guaranteed to be transient. - if (surface->format != RenderFormat::D32_FLOAT) + if (!RenderFormatIsDepth(surface->format)) foundAny |= PopulateBarriersForStretchRect(surface, nullptr); } @@ -3556,7 +3668,7 @@ static void ProcExecutePendingStretchRectCommands(const RenderCommand& cmd) for (const auto surface : g_pendingSurfaceCopies) { - if (surface->format != RenderFormat::D32_FLOAT) + if (!RenderFormatIsDepth(surface->format)) ExecutePendingStretchRectCommands(surface, nullptr); for (const auto texture : surface->destinationTextures) @@ -3638,7 +3750,7 @@ static void SetFramebuffer(GuestSurface* renderTarget, GuestSurface* depthStenci } } -static void Clear(GuestDevice* device, uint32_t flags, uint32_t, be* color, double z) +static void Clear(GuestDevice* device, uint32_t flags, uint32_t, be* color, double z, uint32_t stencil) { RenderCommand cmd; cmd.type = RenderCommandType::Clear; @@ -3648,6 +3760,7 @@ static void Clear(GuestDevice* device, uint32_t flags, uint32_t, be* colo cmd.clear.color[2] = color[2]; cmd.clear.color[3] = color[3]; cmd.clear.z = float(z); + cmd.clear.stencil = stencil; g_renderQueue.enqueue(cmd); } @@ -3684,13 +3797,15 @@ static void ProcClear(const RenderCommand& cmd) commandList->clearColor(0, RenderColor(args.color[0], args.color[1], args.color[2], args.color[3])); } - if (g_depthStencil != nullptr && (args.flags & D3DCLEAR_ZBUFFER) != 0) + const bool clearDepth = (args.flags & D3DCLEAR_ZBUFFER) != 0; + const bool clearStencil = (args.flags & D3DCLEAR_STENCIL) != 0; + if (g_depthStencil != nullptr && (clearDepth || clearStencil)) { if (!canClearInOnePass) { SetFramebuffer(nullptr, g_depthStencil, true); } - commandList->clearDepth(true, args.z); + commandList->clearDepthStencil(clearDepth, clearStencil, args.z, args.stencil); } } @@ -3988,13 +4103,37 @@ static RenderShader* GetOrLinkShader(GuestShader* guestShader, uint32_t specCons static void SanitizePipelineState(PipelineState& pipelineState) { + if (!pipelineState.zEnable && !pipelineState.stencilEnable) + { + pipelineState.depthStencilFormat = RenderFormat::UNKNOWN; + } + if (!pipelineState.zEnable) { pipelineState.zWriteEnable = false; pipelineState.zFunc = RenderComparisonFunction::LESS; pipelineState.slopeScaledDepthBias = 0.0f; pipelineState.depthBias = 0; - pipelineState.depthStencilFormat = RenderFormat::UNKNOWN; + } + + if (!pipelineState.stencilEnable) + { + pipelineState.stencilTwoSided = false; + pipelineState.stencilFunc = RenderComparisonFunction::ALWAYS; + pipelineState.stencilFail = RenderStencilOp::KEEP; + pipelineState.stencilZFail = RenderStencilOp::KEEP; + pipelineState.stencilPass = RenderStencilOp::KEEP; + pipelineState.stencilMask = 0xFFFFFFFF; + pipelineState.stencilWriteMask = 0xFFFFFFFF; + pipelineState.stencilRef = 0; + } + + if (!pipelineState.stencilTwoSided) + { + pipelineState.stencilFuncCCW = pipelineState.stencilFunc; + pipelineState.stencilFailCCW = pipelineState.stencilFail; + pipelineState.stencilZFailCCW = pipelineState.stencilZFail; + pipelineState.stencilPassCCW = pipelineState.stencilPass; } if (pipelineState.slopeScaledDepthBias == 0.0f) @@ -4046,6 +4185,22 @@ static std::unique_ptr CreateGraphicsPipeline(const PipelineStat desc.depthEnabled = pipelineState.zEnable; desc.depthWriteEnabled = pipelineState.zWriteEnable; desc.depthBias = pipelineState.depthBias; + desc.stencilEnabled = pipelineState.stencilEnable; + desc.stencilReadMask = pipelineState.stencilMask; + desc.stencilWriteMask = pipelineState.stencilWriteMask; + desc.stencilReference = pipelineState.stencilRef; + desc.stencilFrontFace.compareFunction = pipelineState.stencilFunc; + desc.stencilFrontFace.failOp = pipelineState.stencilFail; + desc.stencilFrontFace.depthFailOp = pipelineState.stencilZFail; + desc.stencilFrontFace.passOp = pipelineState.stencilPass; + if (pipelineState.stencilTwoSided) { + desc.stencilBackFace.compareFunction = pipelineState.stencilFuncCCW; + desc.stencilBackFace.failOp = pipelineState.stencilFailCCW; + desc.stencilBackFace.depthFailOp = pipelineState.stencilZFailCCW; + desc.stencilBackFace.passOp = pipelineState.stencilPassCCW; + } else { + desc.stencilBackFace = desc.stencilFrontFace; + } desc.slopeScaledDepthBias = pipelineState.slopeScaledDepthBias; desc.dynamicDepthBiasEnabled = g_capabilities.dynamicDepthBias; desc.depthClipEnabled = true; @@ -4435,13 +4590,13 @@ static constexpr float COMMON_SLOPE_SCALED_DEPTH_BIAS_VALUE = 1.0f; static void FlushRenderStateForRenderThread() { auto renderTarget = g_pipelineState.colorWriteEnable ? g_renderTarget : nullptr; - auto depthStencil = g_pipelineState.zEnable ? g_depthStencil : nullptr; + auto depthStencil = g_pipelineState.zEnable || g_pipelineState.stencilEnable ? g_depthStencil : nullptr; bool foundAny = PopulateBarriersForStretchRect(renderTarget, depthStencil); for (const auto surface : g_pendingMsaaResolves) { - bool isDepthStencil = (surface->format == RenderFormat::D32_FLOAT); + bool isDepthStencil = RenderFormatIsDepth(surface->format); foundAny |= PopulateBarriersForStretchRect(isDepthStencil ? nullptr : surface, isDepthStencil ? surface : nullptr); } @@ -4452,7 +4607,7 @@ static void FlushRenderStateForRenderThread() for (const auto surface : g_pendingMsaaResolves) { - bool isDepthStencil = (surface->format == RenderFormat::D32_FLOAT); + bool isDepthStencil = RenderFormatIsDepth(surface->format); ExecutePendingStretchRectCommands(isDepthStencil ? nullptr : surface, isDepthStencil ? surface : nullptr); } } @@ -6724,7 +6879,7 @@ static void CompileMeshPipeline(const Mesh& mesh, CompilationArgs& args) } pipelineState.renderTargetFormat = RenderFormat::R16G16B16A16_FLOAT; - pipelineState.depthStencilFormat = RenderFormat::D32_FLOAT; + pipelineState.depthStencilFormat = RenderFormat::D32_FLOAT_S8_UINT; pipelineState.sampleCount = Config::AntiAliasing != EAntiAliasing::None ? int32_t(Config::AntiAliasing.Value) : 1; if (pipelineState.vertexDeclaration->hasR11G11B10Normal) @@ -6948,7 +7103,7 @@ static void CompileParticleMaterialPipeline(const Hedgehog::Sparkle::CParticleMa pipelineState.destBlendAlpha = RenderBlend::INV_SRC_ALPHA; pipelineState.primitiveTopology = RenderPrimitiveTopology::TRIANGLE_STRIP; pipelineState.vertexStrides[0] = isMeshShader ? 104 : 28; - pipelineState.depthStencilFormat = RenderFormat::D32_FLOAT; + pipelineState.depthStencilFormat = RenderFormat::D32_FLOAT_S8_UINT; pipelineState.specConstants = SPEC_CONSTANT_REVERSE_Z; if (pipelineState.vertexDeclaration->hasR11G11B10Normal) @@ -7349,7 +7504,7 @@ static void PipelineTaskConsumerThread() // Compile both MSAA and non MSAA variants to work with reflection maps. The render formats are an assumption but it should hold true. if (Config::AntiAliasing != EAntiAliasing::None && pipelineState.renderTargetFormat == RenderFormat::R16G16B16A16_FLOAT && - pipelineState.depthStencilFormat == RenderFormat::D32_FLOAT) + pipelineState.depthStencilFormat == RenderFormat::D32_FLOAT_S8_UINT) { auto msaaPipelineState = pipelineState; msaaPipelineState.sampleCount = int32_t(Config::AntiAliasing.Value); @@ -7414,7 +7569,7 @@ static void PipelineTaskConsumerThread() for (auto& [hash, pipelineState] : asyncPipelines) { bool alphaTest = (pipelineState.specConstants & (SPEC_CONSTANT_ALPHA_TEST | SPEC_CONSTANT_ALPHA_TO_COVERAGE)) != 0; - bool msaa = pipelineState.sampleCount != 1 || (pipelineState.renderTargetFormat == RenderFormat::R16G16B16A16_FLOAT && pipelineState.depthStencilFormat == RenderFormat::D32_FLOAT); + bool msaa = pipelineState.sampleCount != 1 || (pipelineState.renderTargetFormat == RenderFormat::R16G16B16A16_FLOAT && pipelineState.depthStencilFormat == RenderFormat::D32_FLOAT_S8_UINT); pipelineState.sampleCount = 1; pipelineState.enableAlphaToCoverage = false; @@ -7963,6 +8118,19 @@ GUEST_FUNCTION_HOOK(sub_82541750, SetRenderState); GUEST_FUNCTION_HOOK(sub_825417C0, SetRenderState); GUEST_FUNCTION_HOOK(sub_825416E0, SetRenderState); GUEST_FUNCTION_HOOK(sub_82542050, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541B30, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541B78, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541BE8, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541C28, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541C68, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541BB8, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541D78, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541D98, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541DB8, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541CC8, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541D08, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541D48, SetRenderState); +GUEST_FUNCTION_HOOK(sub_82541C98, SetRenderState); int GetType(GuestResource* resource) { if (resource->type == ResourceType::Texture) return 3; @@ -8052,7 +8220,7 @@ int D3DDevice_BeginTiling(GuestDevice* device, uint32_t flags, uint32_t count, R // for (uint32_t i = 0; i < count; i++) { // printf("pTileRects: %d %d %d %d\n", pTileRects[i].x1.get(), pTileRects[i].y1.get(), pTileRects[i].x2.get(), pTileRects[i].y2.get()); // } - Clear(device, 0x3F, 0, pClearColor, clearZ); + Clear(device, 0x3F, 0, pClearColor, clearZ, clearStencil); return 0; } diff --git a/MarathonRecomp/gpu/video.h b/MarathonRecomp/gpu/video.h index db15c8cd2..b193069ad 100644 --- a/MarathonRecomp/gpu/video.h +++ b/MarathonRecomp/gpu/video.h @@ -10,6 +10,7 @@ #define D3DCLEAR_TARGET 0x1 #define D3DCLEAR_ZBUFFER 0x10 +#define D3DCLEAR_STENCIL 0x20 // TODO: remove #define SPEC_CONSTANT_BICUBIC_GI_FILTER (1 << 2) @@ -356,6 +357,19 @@ enum GuestRenderState D3DRS_BLENDOPALPHA = 92, D3DRS_ALPHATESTENABLE = 96, D3DRS_ALPHAREF = 100, + D3DRS_STENCILENABLE = 108, + D3DRS_TWOSIDEDSTENCILMODE = 112, + D3DRS_STENCILFAIL = 116, + D3DRS_STENCILZFAIL = 120, + D3DRS_STENCILPASS = 124, + D3DRS_STENCILFUNC = 128, + D3DRS_STENCILREF = 132, + D3DRS_STENCILMASK = 136, + D3DRS_STENCILWRITEMASK = 140, + D3DRS_CCW_STENCILFAIL = 144, + D3DRS_CCW_STENCILZFAIL = 148, + D3DRS_CCW_STENCILPASS = 152, + D3DRS_CCW_STENCILFUNC = 156, D3DRS_SCISSORTESTENABLE = 200, D3DRS_SLOPESCALEDEPTHBIAS = 204, D3DRS_DEPTHBIAS = 208, @@ -405,6 +419,18 @@ enum GuestCmpFunc D3DCMP_ALWAYS = 7 }; +enum GuestStencilOp +{ + D3DSTENCILOP_KEEP = 0, + D3DSTENCILOP_ZERO = 1, + D3DSTENCILOP_REPLACE = 2, + D3DSTENCILOP_INCRSAT = 3, + D3DSTENCILOP_DECRSAT = 4, + D3DSTENCILOP_INVERT = 5, + D3DSTENCILOP_INCR = 6, + D3DSTENCILOP_DECR = 7 +}; + enum GuestPrimitiveType { D3DPT_POINTLIST = 1,