From eb7d25718c3f7eb2a45507b4e7b80b277f692521 Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 18 Nov 2025 21:27:13 +0000 Subject: [PATCH 1/3] fixup --- .../vulkan_common/vulkan_device.cpp | 22 ++++++++----------- src/video_core/vulkan_common/vulkan_device.h | 3 --- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 6e325c4960..5e19d6ec1b 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -502,10 +502,9 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR is_warp_potentially_bigger = !extensions.subgroup_size_control || properties.subgroup_size_control.maxSubgroupSize > GuestWarpSize; - is_integrated = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; - is_virtual = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU; - is_non_gpu = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_OTHER || - properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU; + //const bool is_virtual = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU; + //const bool is_non_gpu = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_OTHER || + // properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU; supports_d24_depth = IsFormatSupported(VK_FORMAT_D24_UNORM_S8_UINT, @@ -566,13 +565,11 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR // Turnip Mesa: Works correctly, keep enabled if (!is_turnip) { LOG_WARNING(Render_Vulkan, "Disabling Shader Float Controls for Stock Qualcomm (broken implementation)"); - RemoveExtensionFeature(extensions.shader_float_controls, features.shader_float_controls, - VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME); + extensions.shader_float_controls = false; // Just a feature not an extension } // Int64 atomics - genuinely broken, always disable - RemoveExtensionFeature(extensions.shader_atomic_int64, features.shader_atomic_int64, - VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME); + RemoveExtensionFeature(extensions.shader_atomic_int64, features.shader_atomic_int64, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME); features.shader_atomic_int64.shaderBufferInt64Atomics = false; features.shader_atomic_int64.shaderSharedInt64Atomics = false; features.features.shaderInt64 = false; @@ -766,13 +763,12 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR if (extensions.memory_budget) { flags |= VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT; } + const bool is_integrated = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; const VmaAllocatorCreateInfo allocator_info{ .flags = flags, .physicalDevice = physical, .device = *logical, - .preferredLargeHeapBlockSize = is_integrated - ? (64u * 1024u * 1024u) - : (256u * 1024u * 1024u), + .preferredLargeHeapBlockSize = (is_integrated ? 64u : 256u) * 1024u * 1024u, .pAllocationCallbacks = nullptr, .pDeviceMemoryCallbacks = nullptr, .pHeapSizeLimit = nullptr, @@ -1601,8 +1597,8 @@ void Device::CollectPhysicalMemoryInfo() { // Calculate limits using memory budget VkPhysicalDeviceMemoryBudgetPropertiesEXT budget{}; budget.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT; - const auto mem_info = - physical.GetMemoryProperties(extensions.memory_budget ? &budget : nullptr); + const bool is_integrated = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; + const auto mem_info = physical.GetMemoryProperties(extensions.memory_budget ? &budget : nullptr); const auto& mem_properties = mem_info.memoryProperties; const size_t num_properties = mem_properties.memoryHeapCount; device_access_memory = 0; diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index 4009ce2672..03b063befc 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -1028,9 +1028,6 @@ private: bool is_blit_depth24_stencil8_supported{}; ///< Support for blitting from and to D24S8. bool is_blit_depth32_stencil8_supported{}; ///< Support for blitting from and to D32S8. bool is_warp_potentially_bigger{}; ///< Host warp size can be bigger than guest. - bool is_integrated{}; ///< Is GPU an iGPU. - bool is_virtual{}; ///< Is GPU a virtual GPU. - bool is_non_gpu{}; ///< Is SoftwareRasterizer, FPGA, non-GPU device. bool has_broken_compute{}; ///< Compute shaders can cause crashes bool has_broken_cube_compatibility{}; ///< Has broken cube compatibility bit bool has_broken_parallel_compiling{}; ///< Has broken parallel shader compiling. From 76975ed5442206708244321a943433ddcff5e017 Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 18 Nov 2025 22:09:40 +0000 Subject: [PATCH 2/3] fix bitfields --- .../renderer_vulkan/fixed_pipeline_state.h | 66 ++++++++----------- .../renderer_vulkan/vk_pipeline_cache.cpp | 46 ++++++------- 2 files changed, 52 insertions(+), 60 deletions(-) diff --git a/src/video_core/renderer_vulkan/fixed_pipeline_state.h b/src/video_core/renderer_vulkan/fixed_pipeline_state.h index 7398084219..ffdfd5e861 100644 --- a/src/video_core/renderer_vulkan/fixed_pipeline_state.h +++ b/src/video_core/renderer_vulkan/fixed_pipeline_state.h @@ -21,43 +21,35 @@ namespace Vulkan { using Maxwell = Tegra::Engines::Maxwell3D::Regs; struct DynamicFeatures { - union { - u32 raw0; - // VK_EXT_extended_dynamic_state (EDS1) - Bit 0 - BitField<0, 1, u32> has_extended_dynamic_state; - - // VK_EXT_extended_dynamic_state2 (EDS2) - Bits 1-3 - BitField<1, 1, u32> has_extended_dynamic_state_2; // Core EDS2 - BitField<2, 1, u32> has_extended_dynamic_state_2_logic_op; // LogicOp - BitField<3, 1, u32> has_extended_dynamic_state_2_patch_control_points; // Tessellation - - // VK_EXT_extended_dynamic_state3 (EDS3) - Bits 4-5 - BitField<4, 1, u32> has_extended_dynamic_state_3_blend; // Blending composite - BitField<5, 1, u32> has_extended_dynamic_state_3_enables; // Enables composite - - // VK_EXT_vertex_input_dynamic_state - Bit 6 - BitField<6, 1, u32> has_dynamic_vertex_input; - - // EDS3 Granular Features - Bits 7-15 - BitField<7, 1, u32> has_extended_dynamic_state_3_depth_clamp; - BitField<8, 1, u32> has_extended_dynamic_state_3_logic_op_enable; - BitField<9, 1, u32> has_extended_dynamic_state_3_tessellation_domain_origin; - BitField<10, 1, u32> has_extended_dynamic_state_3_polygon_mode; - BitField<11, 1, u32> has_extended_dynamic_state_3_rasterization_samples; - BitField<12, 1, u32> has_extended_dynamic_state_3_sample_mask; - BitField<13, 1, u32> has_extended_dynamic_state_3_alpha_to_coverage_enable; - BitField<14, 1, u32> has_extended_dynamic_state_3_alpha_to_one_enable; - BitField<15, 1, u32> has_extended_dynamic_state_3_depth_clip_enable; - - // EDS3 Additional Features - Bits 16-22 - BitField<16, 1, u32> has_extended_dynamic_state_3_depth_clip_negative_one_to_one; - BitField<17, 1, u32> has_extended_dynamic_state_3_line_rasterization_mode; - BitField<18, 1, u32> has_extended_dynamic_state_3_line_stipple_enable; - BitField<19, 1, u32> has_extended_dynamic_state_3_provoking_vertex_mode; - BitField<20, 1, u32> has_extended_dynamic_state_3_conservative_rasterization_mode; - BitField<21, 1, u32> has_extended_dynamic_state_3_sample_locations_enable; - BitField<22, 1, u32> has_extended_dynamic_state_3_rasterization_stream; - }; + // VK_EXT_extended_dynamic_state (EDS1) - Bit 0 + bool has_extended_dynamic_state : 1; + // VK_EXT_extended_dynamic_state2 (EDS2) - Bits 1-3 + bool has_extended_dynamic_state_2 : 1; // Core EDS2 + bool has_extended_dynamic_state_2_logic_op : 1; // LogicOp + bool has_extended_dynamic_state_2_patch_control_points : 1; // Tessellation + // VK_EXT_extended_dynamic_state3 (EDS3) - Bits 4-5 + bool has_extended_dynamic_state_3_blend : 1; // Blending composite + bool has_extended_dynamic_state_3_enables : 1; // Enables composite + // VK_EXT_vertex_input_dynamic_state - Bit 6 + bool has_dynamic_vertex_input : 1; + // EDS3 Granular Features - Bits 7-15 + bool has_extended_dynamic_state_3_depth_clamp; + bool has_extended_dynamic_state_3_logic_op_enable; + bool has_extended_dynamic_state_3_tessellation_domain_origin; + bool has_extended_dynamic_state_3_polygon_mode; + bool has_extended_dynamic_state_3_rasterization_samples; + bool has_extended_dynamic_state_3_sample_mask; + bool has_extended_dynamic_state_3_alpha_to_coverage_enable : 1; + bool has_extended_dynamic_state_3_alpha_to_one_enable : 1; + bool has_extended_dynamic_state_3_depth_clip_enable : 1; + // EDS3 Additional Features - Bits 16-22 + bool has_extended_dynamic_state_3_depth_clip_negative_one_to_one : 1; + bool has_extended_dynamic_state_3_line_rasterization_mode : 1; + bool has_extended_dynamic_state_3_line_stipple_enable : 1; + bool has_extended_dynamic_state_3_provoking_vertex_mode : 1; + bool has_extended_dynamic_state_3_conservative_rasterization_mode : 1; + bool has_extended_dynamic_state_3_sample_locations_enable : 1; + bool has_extended_dynamic_state_3_rasterization_stream : 1; }; static_assert(std::has_unique_object_representations_v); diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index b042d1cba3..cb12a555bf 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -560,29 +560,29 @@ void PipelineCache::LoadDiskResources(u64 title_id, std::stop_token stop_loading file.read(reinterpret_cast(&key), sizeof(key)); // Validate dynamic features compatibility - granular per-feature check - if ((key.state.extended_dynamic_state != 0) != dynamic_features.has_extended_dynamic_state || - (key.state.extended_dynamic_state_2 != 0) != dynamic_features.has_extended_dynamic_state_2 || - (key.state.extended_dynamic_state_2_logic_op != 0) != dynamic_features.has_extended_dynamic_state_2_logic_op || - (key.state.extended_dynamic_state_2_patch_control_points != 0) != dynamic_features.has_extended_dynamic_state_2_patch_control_points || - (key.state.extended_dynamic_state_3_blend != 0) != dynamic_features.has_extended_dynamic_state_3_blend || - (key.state.extended_dynamic_state_3_enables != 0) != dynamic_features.has_extended_dynamic_state_3_enables || - (key.state.extended_dynamic_state_3_depth_clamp != 0) != dynamic_features.has_extended_dynamic_state_3_depth_clamp || - (key.state.extended_dynamic_state_3_logic_op_enable != 0) != dynamic_features.has_extended_dynamic_state_3_logic_op_enable || - (key.state.extended_dynamic_state_3_tessellation_domain_origin != 0) != dynamic_features.has_extended_dynamic_state_3_tessellation_domain_origin || - (key.state.extended_dynamic_state_3_polygon_mode != 0) != dynamic_features.has_extended_dynamic_state_3_polygon_mode || - (key.state.extended_dynamic_state_3_rasterization_samples != 0) != dynamic_features.has_extended_dynamic_state_3_rasterization_samples || - (key.state.extended_dynamic_state_3_sample_mask != 0) != dynamic_features.has_extended_dynamic_state_3_sample_mask || - (key.state.extended_dynamic_state_3_alpha_to_coverage_enable != 0) != dynamic_features.has_extended_dynamic_state_3_alpha_to_coverage_enable || - (key.state.extended_dynamic_state_3_alpha_to_one_enable != 0) != dynamic_features.has_extended_dynamic_state_3_alpha_to_one_enable || - (key.state.extended_dynamic_state_3_depth_clip_enable != 0) != dynamic_features.has_extended_dynamic_state_3_depth_clip_enable || - (key.state.extended_dynamic_state_3_depth_clip_negative_one_to_one != 0) != dynamic_features.has_extended_dynamic_state_3_depth_clip_negative_one_to_one || - (key.state.extended_dynamic_state_3_line_rasterization_mode != 0) != dynamic_features.has_extended_dynamic_state_3_line_rasterization_mode || - (key.state.extended_dynamic_state_3_line_stipple_enable != 0) != dynamic_features.has_extended_dynamic_state_3_line_stipple_enable || - (key.state.extended_dynamic_state_3_provoking_vertex_mode != 0) != dynamic_features.has_extended_dynamic_state_3_provoking_vertex_mode || - (key.state.extended_dynamic_state_3_conservative_rasterization_mode != 0) != dynamic_features.has_extended_dynamic_state_3_conservative_rasterization_mode || - (key.state.extended_dynamic_state_3_sample_locations_enable != 0) != dynamic_features.has_extended_dynamic_state_3_sample_locations_enable || - (key.state.extended_dynamic_state_3_rasterization_stream != 0) != dynamic_features.has_extended_dynamic_state_3_rasterization_stream || - (key.state.dynamic_vertex_input != 0) != dynamic_features.has_dynamic_vertex_input) { + if ((key.state.extended_dynamic_state != 0) != dynamic_features.has_extended_dynamic_state + || (key.state.extended_dynamic_state_2 != 0) != dynamic_features.has_extended_dynamic_state_2 + || (key.state.extended_dynamic_state_2_logic_op != 0) != dynamic_features.has_extended_dynamic_state_2_logic_op + || (key.state.extended_dynamic_state_2_patch_control_points != 0) != dynamic_features.has_extended_dynamic_state_2_patch_control_points + || (key.state.extended_dynamic_state_3_blend != 0) != dynamic_features.has_extended_dynamic_state_3_blend + || (key.state.extended_dynamic_state_3_enables != 0) != dynamic_features.has_extended_dynamic_state_3_enables + || (key.state.extended_dynamic_state_3_depth_clamp != 0) != dynamic_features.has_extended_dynamic_state_3_depth_clamp + || (key.state.extended_dynamic_state_3_logic_op_enable != 0) != dynamic_features.has_extended_dynamic_state_3_logic_op_enable + || (key.state.extended_dynamic_state_3_tessellation_domain_origin != 0) != dynamic_features.has_extended_dynamic_state_3_tessellation_domain_origin + || (key.state.extended_dynamic_state_3_polygon_mode != 0) != dynamic_features.has_extended_dynamic_state_3_polygon_mode + || (key.state.extended_dynamic_state_3_rasterization_samples != 0) != dynamic_features.has_extended_dynamic_state_3_rasterization_samples + || (key.state.extended_dynamic_state_3_sample_mask != 0) != dynamic_features.has_extended_dynamic_state_3_sample_mask + || (key.state.extended_dynamic_state_3_alpha_to_coverage_enable != 0) != dynamic_features.has_extended_dynamic_state_3_alpha_to_coverage_enable + || (key.state.extended_dynamic_state_3_alpha_to_one_enable != 0) != dynamic_features.has_extended_dynamic_state_3_alpha_to_one_enable + || (key.state.extended_dynamic_state_3_depth_clip_enable != 0) != dynamic_features.has_extended_dynamic_state_3_depth_clip_enable + || (key.state.extended_dynamic_state_3_depth_clip_negative_one_to_one != 0) != dynamic_features.has_extended_dynamic_state_3_depth_clip_negative_one_to_one + || (key.state.extended_dynamic_state_3_line_rasterization_mode != 0) != dynamic_features.has_extended_dynamic_state_3_line_rasterization_mode + || (key.state.extended_dynamic_state_3_line_stipple_enable != 0) != dynamic_features.has_extended_dynamic_state_3_line_stipple_enable + || (key.state.extended_dynamic_state_3_provoking_vertex_mode != 0) != dynamic_features.has_extended_dynamic_state_3_provoking_vertex_mode + || (key.state.extended_dynamic_state_3_conservative_rasterization_mode != 0) != dynamic_features.has_extended_dynamic_state_3_conservative_rasterization_mode + || (key.state.extended_dynamic_state_3_sample_locations_enable != 0) != dynamic_features.has_extended_dynamic_state_3_sample_locations_enable + || (key.state.extended_dynamic_state_3_rasterization_stream != 0) != dynamic_features.has_extended_dynamic_state_3_rasterization_stream + || (key.state.dynamic_vertex_input != 0) != dynamic_features.has_dynamic_vertex_input) { return; } workers.QueueWork([this, key, envs_ = std::move(envs), &state, &callback]() mutable { From c9739c7d572a259a1772cddb9f15f70f4c97adb9 Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 18 Nov 2025 22:15:09 +0000 Subject: [PATCH 3/3] fixes bitfields 2 --- .../renderer_vulkan/fixed_pipeline_state.h | 1 - .../renderer_vulkan/vk_pipeline_cache.cpp | 53 +++++++++---------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/src/video_core/renderer_vulkan/fixed_pipeline_state.h b/src/video_core/renderer_vulkan/fixed_pipeline_state.h index ffdfd5e861..0dc844c80d 100644 --- a/src/video_core/renderer_vulkan/fixed_pipeline_state.h +++ b/src/video_core/renderer_vulkan/fixed_pipeline_state.h @@ -51,7 +51,6 @@ struct DynamicFeatures { bool has_extended_dynamic_state_3_sample_locations_enable : 1; bool has_extended_dynamic_state_3_rasterization_stream : 1; }; -static_assert(std::has_unique_object_representations_v); struct FixedPipelineState { static u32 PackComparisonOp(Maxwell::ComparisonOp op) noexcept; diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index cb12a555bf..b4e7efaa5d 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -426,39 +426,34 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_, LOG_INFO(Render_Vulkan, "DynamicState value is set to {}", (u32) dynamic_state); - dynamic_features.raw0 = 0; - + dynamic_features = {}; // EDS1 - All-or-nothing (enabled if driver supports AND setting > 0) - dynamic_features.has_extended_dynamic_state.Assign(device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0); - + dynamic_features.has_extended_dynamic_state = device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0; // EDS2 - Core features (enabled if driver supports AND setting > 1) - dynamic_features.has_extended_dynamic_state_2.Assign(device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1); - dynamic_features.has_extended_dynamic_state_2_logic_op.Assign(device.IsExtExtendedDynamicState2LogicOpSupported() && dynamic_state > 1); - dynamic_features.has_extended_dynamic_state_2_patch_control_points.Assign(device.IsExtExtendedDynamicState2PatchControlPointsSupported() && dynamic_state > 1); - + dynamic_features.has_extended_dynamic_state_2 = device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1; + dynamic_features.has_extended_dynamic_state_2_logic_op = device.IsExtExtendedDynamicState2LogicOpSupported() && dynamic_state > 1; + dynamic_features.has_extended_dynamic_state_2_patch_control_points = device.IsExtExtendedDynamicState2PatchControlPointsSupported() && dynamic_state > 1; // EDS3 - Granular features (enabled if driver supports AND setting > 2) - dynamic_features.has_extended_dynamic_state_3_blend.Assign(device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_enables.Assign(device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_depth_clamp.Assign(device.IsExtExtendedDynamicState3DepthClampEnableSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_logic_op_enable.Assign(device.IsExtExtendedDynamicState3LogicOpEnableSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_tessellation_domain_origin.Assign(device.IsExtExtendedDynamicState3TessellationDomainOriginSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_polygon_mode.Assign(device.IsExtExtendedDynamicState3PolygonModeSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_rasterization_samples.Assign(device.IsExtExtendedDynamicState3RasterizationSamplesSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_sample_mask.Assign(device.IsExtExtendedDynamicState3SampleMaskSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_alpha_to_coverage_enable.Assign(device.IsExtExtendedDynamicState3AlphaToCoverageEnableSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_alpha_to_one_enable.Assign(device.IsExtExtendedDynamicState3AlphaToOneEnableSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_depth_clip_enable.Assign(device.IsExtExtendedDynamicState3DepthClipEnableSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_depth_clip_negative_one_to_one.Assign(device.IsExtExtendedDynamicState3DepthClipNegativeOneToOneSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_line_rasterization_mode.Assign(device.IsExtExtendedDynamicState3LineRasterizationModeSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_line_stipple_enable.Assign(device.IsExtExtendedDynamicState3LineStippleEnableSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_provoking_vertex_mode.Assign(device.IsExtExtendedDynamicState3ProvokingVertexModeSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_conservative_rasterization_mode.Assign(device.IsExtExtendedDynamicState3ConservativeRasterizationModeSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_sample_locations_enable.Assign(device.IsExtExtendedDynamicState3SampleLocationsEnableSupported() && dynamic_state > 2); - dynamic_features.has_extended_dynamic_state_3_rasterization_stream.Assign(device.IsExtExtendedDynamicState3RasterizationStreamSupported() && dynamic_state > 2); - + dynamic_features.has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_depth_clamp = device.IsExtExtendedDynamicState3DepthClampEnableSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_logic_op_enable = device.IsExtExtendedDynamicState3LogicOpEnableSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_tessellation_domain_origin = device.IsExtExtendedDynamicState3TessellationDomainOriginSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_polygon_mode = device.IsExtExtendedDynamicState3PolygonModeSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_rasterization_samples = device.IsExtExtendedDynamicState3RasterizationSamplesSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_sample_mask = device.IsExtExtendedDynamicState3SampleMaskSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_alpha_to_coverage_enable = device.IsExtExtendedDynamicState3AlphaToCoverageEnableSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_alpha_to_one_enable = device.IsExtExtendedDynamicState3AlphaToOneEnableSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_depth_clip_enable = device.IsExtExtendedDynamicState3DepthClipEnableSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_depth_clip_negative_one_to_one = device.IsExtExtendedDynamicState3DepthClipNegativeOneToOneSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_line_rasterization_mode = device.IsExtExtendedDynamicState3LineRasterizationModeSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_line_stipple_enable = device.IsExtExtendedDynamicState3LineStippleEnableSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_provoking_vertex_mode = device.IsExtExtendedDynamicState3ProvokingVertexModeSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_conservative_rasterization_mode = device.IsExtExtendedDynamicState3ConservativeRasterizationModeSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_sample_locations_enable = device.IsExtExtendedDynamicState3SampleLocationsEnableSupported() && dynamic_state > 2; + dynamic_features.has_extended_dynamic_state_3_rasterization_stream = device.IsExtExtendedDynamicState3RasterizationStreamSupported() && dynamic_state > 2; // Vertex input dynamic state (independent toggle) - dynamic_features.has_dynamic_vertex_input.Assign(device.IsExtVertexInputDynamicStateSupported() && - Settings::values.vertex_input_dynamic_state.GetValue()); + dynamic_features.has_dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported() && Settings::values.vertex_input_dynamic_state.GetValue(); } PipelineCache::~PipelineCache() {