Browse Source

fix bitfields

pull/3062/head
lizzie 1 month ago
parent
commit
9e9d9716bf
  1. 66
      src/video_core/renderer_vulkan/fixed_pipeline_state.h
  2. 46
      src/video_core/renderer_vulkan/vk_pipeline_cache.cpp

66
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<DynamicFeatures>);

46
src/video_core/renderer_vulkan/vk_pipeline_cache.cpp

@ -541,29 +541,29 @@ void PipelineCache::LoadDiskResources(u64 title_id, std::stop_token stop_loading
file.read(reinterpret_cast<char*>(&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 {

Loading…
Cancel
Save