diff options
| author | 2022-12-06 00:40:01 +0100 | |
|---|---|---|
| committer | 2023-01-01 16:43:58 -0500 | |
| commit | d33251db9300e29ae830ec74e0b39ec0aa202b30 (patch) | |
| tree | 3f17cbd40dcd970d152001d61aa1d275dbe11280 /src/video_core/vulkan_common | |
| parent | Vulkan Implement Dynamic State 2 LogicOp and PatchVertices (diff) | |
| download | yuzu-d33251db9300e29ae830ec74e0b39ec0aa202b30.tar.gz yuzu-d33251db9300e29ae830ec74e0b39ec0aa202b30.tar.xz yuzu-d33251db9300e29ae830ec74e0b39ec0aa202b30.zip | |
Vulkan: Implement Dynamic State 3
Diffstat (limited to 'src/video_core/vulkan_common')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 73 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.h | 24 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_wrapper.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_wrapper.h | 25 |
4 files changed, 89 insertions, 38 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 7294fcfe3..780f5dede 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp | |||
| @@ -569,28 +569,31 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 569 | LOG_INFO(Render_Vulkan, "Device doesn't support extended dynamic state"); | 569 | LOG_INFO(Render_Vulkan, "Device doesn't support extended dynamic state"); |
| 570 | } | 570 | } |
| 571 | 571 | ||
| 572 | VkPhysicalDeviceExtendedDynamicState2FeaturesEXT dynamic_state2; | 572 | VkPhysicalDeviceExtendedDynamicState2FeaturesEXT dynamic_state_2; |
| 573 | if (ext_extended_dynamic_state2) { | 573 | if (ext_extended_dynamic_state_2) { |
| 574 | dynamic_state2 = { | 574 | dynamic_state_2 = { |
| 575 | .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, | 575 | .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, |
| 576 | .pNext = nullptr, | 576 | .pNext = nullptr, |
| 577 | .extendedDynamicState2 = VK_TRUE, | 577 | .extendedDynamicState2 = VK_TRUE, |
| 578 | .extendedDynamicState2LogicOp = ext_extended_dynamic_state2_extra ? VK_TRUE : VK_FALSE, | 578 | .extendedDynamicState2LogicOp = ext_extended_dynamic_state_2_extra ? VK_TRUE : VK_FALSE, |
| 579 | }; | 579 | }; |
| 580 | SetNext(next, dynamic_state2); | 580 | SetNext(next, dynamic_state_2); |
| 581 | } else { | 581 | } else { |
| 582 | LOG_INFO(Render_Vulkan, "Device doesn't support extended dynamic state 2"); | 582 | LOG_INFO(Render_Vulkan, "Device doesn't support extended dynamic state 2"); |
| 583 | } | 583 | } |
| 584 | 584 | ||
| 585 | VkPhysicalDeviceExtendedDynamicState3FeaturesEXT dynamic_state3; | 585 | VkPhysicalDeviceExtendedDynamicState3FeaturesEXT dynamic_state_3; |
| 586 | if (ext_extended_dynamic_state3) { | 586 | if (ext_extended_dynamic_state_3) { |
| 587 | dynamic_state3 = { | 587 | dynamic_state_3 = { |
| 588 | .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT, | 588 | .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT, |
| 589 | .pNext = nullptr, | 589 | .pNext = nullptr, |
| 590 | .extendedDynamicState3ColorBlendEnable = VK_TRUE, | 590 | .extendedDynamicState3DepthClampEnable = ext_extended_dynamic_state_3_enables ? VK_TRUE : VK_FALSE, |
| 591 | .extendedDynamicState3ColorBlendEquation = VK_TRUE, | 591 | .extendedDynamicState3LogicOpEnable = ext_extended_dynamic_state_3_enables ? VK_TRUE : VK_FALSE, |
| 592 | .extendedDynamicState3ColorBlendEnable = ext_extended_dynamic_state_3_blend ? VK_TRUE : VK_FALSE, | ||
| 593 | .extendedDynamicState3ColorBlendEquation = ext_extended_dynamic_state_3_blend ? VK_TRUE : VK_FALSE, | ||
| 594 | .extendedDynamicState3ColorWriteMask = ext_extended_dynamic_state_3_blend ? VK_TRUE : VK_FALSE, | ||
| 592 | }; | 595 | }; |
| 593 | SetNext(next, dynamic_state3); | 596 | SetNext(next, dynamic_state_3); |
| 594 | } else { | 597 | } else { |
| 595 | LOG_INFO(Render_Vulkan, "Device doesn't support extended dynamic state 3"); | 598 | LOG_INFO(Render_Vulkan, "Device doesn't support extended dynamic state 3"); |
| 596 | } | 599 | } |
| @@ -1117,8 +1120,8 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 1117 | bool has_ext_transform_feedback{}; | 1120 | bool has_ext_transform_feedback{}; |
| 1118 | bool has_ext_custom_border_color{}; | 1121 | bool has_ext_custom_border_color{}; |
| 1119 | bool has_ext_extended_dynamic_state{}; | 1122 | bool has_ext_extended_dynamic_state{}; |
| 1120 | bool has_ext_extended_dynamic_state2{}; | 1123 | bool has_ext_extended_dynamic_state_2{}; |
| 1121 | bool has_ext_extended_dynamic_state3{}; | 1124 | bool has_ext_extended_dynamic_state_3{}; |
| 1122 | bool has_ext_shader_atomic_int64{}; | 1125 | bool has_ext_shader_atomic_int64{}; |
| 1123 | bool has_ext_provoking_vertex{}; | 1126 | bool has_ext_provoking_vertex{}; |
| 1124 | bool has_ext_vertex_input_dynamic_state{}; | 1127 | bool has_ext_vertex_input_dynamic_state{}; |
| @@ -1163,9 +1166,9 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 1163 | test(has_ext_transform_feedback, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, false); | 1166 | test(has_ext_transform_feedback, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, false); |
| 1164 | test(has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, false); | 1167 | test(has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, false); |
| 1165 | test(has_ext_extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, false); | 1168 | test(has_ext_extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, false); |
| 1166 | test(has_ext_extended_dynamic_state2, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME, | 1169 | test(has_ext_extended_dynamic_state_2, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME, |
| 1167 | false); | 1170 | false); |
| 1168 | test(has_ext_extended_dynamic_state3, VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME, | 1171 | test(has_ext_extended_dynamic_state_3, VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME, |
| 1169 | false); | 1172 | false); |
| 1170 | test(has_ext_subgroup_size_control, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, true); | 1173 | test(has_ext_subgroup_size_control, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, true); |
| 1171 | test(has_ext_provoking_vertex, VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, false); | 1174 | test(has_ext_provoking_vertex, VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, false); |
| @@ -1316,33 +1319,39 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 1316 | ext_extended_dynamic_state = true; | 1319 | ext_extended_dynamic_state = true; |
| 1317 | } | 1320 | } |
| 1318 | } | 1321 | } |
| 1319 | if (has_ext_extended_dynamic_state2) { | 1322 | if (has_ext_extended_dynamic_state_2) { |
| 1320 | VkPhysicalDeviceExtendedDynamicState2FeaturesEXT extended_dynamic_state2; | 1323 | VkPhysicalDeviceExtendedDynamicState2FeaturesEXT extended_dynamic_state_2; |
| 1321 | extended_dynamic_state2.sType = | 1324 | extended_dynamic_state_2.sType = |
| 1322 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT; | 1325 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT; |
| 1323 | extended_dynamic_state2.pNext = nullptr; | 1326 | extended_dynamic_state_2.pNext = nullptr; |
| 1324 | features.pNext = &extended_dynamic_state2; | 1327 | features.pNext = &extended_dynamic_state_2; |
| 1325 | physical.GetFeatures2(features); | 1328 | physical.GetFeatures2(features); |
| 1326 | 1329 | ||
| 1327 | if (extended_dynamic_state2.extendedDynamicState2) { | 1330 | if (extended_dynamic_state_2.extendedDynamicState2) { |
| 1328 | extensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); | 1331 | extensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); |
| 1329 | ext_extended_dynamic_state2 = true; | 1332 | ext_extended_dynamic_state_2 = true; |
| 1330 | ext_extended_dynamic_state2_extra = | 1333 | ext_extended_dynamic_state_2_extra = |
| 1331 | extended_dynamic_state2.extendedDynamicState2LogicOp; | 1334 | extended_dynamic_state_2.extendedDynamicState2LogicOp; |
| 1332 | } | 1335 | } |
| 1333 | } | 1336 | } |
| 1334 | if (has_ext_extended_dynamic_state3) { | 1337 | if (has_ext_extended_dynamic_state_3) { |
| 1335 | VkPhysicalDeviceExtendedDynamicState3FeaturesEXT extended_dynamic_state3; | 1338 | VkPhysicalDeviceExtendedDynamicState3FeaturesEXT extended_dynamic_state_3; |
| 1336 | extended_dynamic_state3.sType = | 1339 | extended_dynamic_state_3.sType = |
| 1337 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT; | 1340 | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT; |
| 1338 | extended_dynamic_state3.pNext = nullptr; | 1341 | extended_dynamic_state_3.pNext = nullptr; |
| 1339 | features.pNext = &extended_dynamic_state3; | 1342 | features.pNext = &extended_dynamic_state_3; |
| 1340 | physical.GetFeatures2(features); | 1343 | physical.GetFeatures2(features); |
| 1341 | 1344 | ||
| 1342 | if (extended_dynamic_state3.extendedDynamicState3ColorBlendEnable && | 1345 | ext_extended_dynamic_state_3_blend = extended_dynamic_state_3.extendedDynamicState3ColorBlendEnable && |
| 1343 | extended_dynamic_state3.extendedDynamicState3ColorBlendEquation) { | 1346 | extended_dynamic_state_3.extendedDynamicState3ColorBlendEquation && |
| 1347 | extended_dynamic_state_3.extendedDynamicState3ColorWriteMask; | ||
| 1348 | |||
| 1349 | ext_extended_dynamic_state_3_enables = extended_dynamic_state_3.extendedDynamicState3DepthClampEnable && | ||
| 1350 | extended_dynamic_state_3.extendedDynamicState3LogicOpEnable; | ||
| 1351 | |||
| 1352 | ext_extended_dynamic_state_3 = ext_extended_dynamic_state_3_blend || ext_extended_dynamic_state_3_enables; | ||
| 1353 | if (ext_extended_dynamic_state_3) { | ||
| 1344 | extensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME); | 1354 | extensions.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME); |
| 1345 | ext_extended_dynamic_state3 = true; | ||
| 1346 | } | 1355 | } |
| 1347 | } | 1356 | } |
| 1348 | if (has_ext_line_rasterization) { | 1357 | if (has_ext_line_rasterization) { |
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index 51b049c0d..b58ec736f 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h | |||
| @@ -288,16 +288,26 @@ public: | |||
| 288 | 288 | ||
| 289 | /// Returns true if the device supports VK_EXT_extended_dynamic_state2. | 289 | /// Returns true if the device supports VK_EXT_extended_dynamic_state2. |
| 290 | bool IsExtExtendedDynamicState2Supported() const { | 290 | bool IsExtExtendedDynamicState2Supported() const { |
| 291 | return ext_extended_dynamic_state2; | 291 | return ext_extended_dynamic_state_2; |
| 292 | } | 292 | } |
| 293 | 293 | ||
| 294 | bool IsExtExtendedDynamicState2ExtrasSupported() const { | 294 | bool IsExtExtendedDynamicState2ExtrasSupported() const { |
| 295 | return ext_extended_dynamic_state2_extra; | 295 | return ext_extended_dynamic_state_2_extra; |
| 296 | } | 296 | } |
| 297 | 297 | ||
| 298 | /// Returns true if the device supports VK_EXT_extended_dynamic_state3. | 298 | /// Returns true if the device supports VK_EXT_extended_dynamic_state3. |
| 299 | bool IsExtExtendedDynamicState3Supported() const { | 299 | bool IsExtExtendedDynamicState3Supported() const { |
| 300 | return ext_extended_dynamic_state3; | 300 | return ext_extended_dynamic_state_3; |
| 301 | } | ||
| 302 | |||
| 303 | /// Returns true if the device supports VK_EXT_extended_dynamic_state3. | ||
| 304 | bool IsExtExtendedDynamicState3BlendingSupported() const { | ||
| 305 | return ext_extended_dynamic_state_3_blend; | ||
| 306 | } | ||
| 307 | |||
| 308 | /// Returns true if the device supports VK_EXT_extended_dynamic_state3. | ||
| 309 | bool IsExtExtendedDynamicState3EnablesSupported() const { | ||
| 310 | return ext_extended_dynamic_state_3_enables; | ||
| 301 | } | 311 | } |
| 302 | 312 | ||
| 303 | /// Returns true if the device supports VK_EXT_line_rasterization. | 313 | /// Returns true if the device supports VK_EXT_line_rasterization. |
| @@ -482,9 +492,11 @@ private: | |||
| 482 | bool ext_transform_feedback{}; ///< Support for VK_EXT_transform_feedback. | 492 | bool ext_transform_feedback{}; ///< Support for VK_EXT_transform_feedback. |
| 483 | bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color. | 493 | bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color. |
| 484 | bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state. | 494 | bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state. |
| 485 | bool ext_extended_dynamic_state2{}; ///< Support for VK_EXT_extended_dynamic_state2. | 495 | bool ext_extended_dynamic_state_2{}; ///< Support for VK_EXT_extended_dynamic_state2. |
| 486 | bool ext_extended_dynamic_state2_extra{}; ///< Support for VK_EXT_extended_dynamic_state2. | 496 | bool ext_extended_dynamic_state_2_extra{}; ///< Support for VK_EXT_extended_dynamic_state2. |
| 487 | bool ext_extended_dynamic_state3{}; ///< Support for VK_EXT_extended_dynamic_state3. | 497 | bool ext_extended_dynamic_state_3{}; ///< Support for VK_EXT_extended_dynamic_state3. |
| 498 | bool ext_extended_dynamic_state_3_blend{}; ///< Support for VK_EXT_extended_dynamic_state3. | ||
| 499 | bool ext_extended_dynamic_state_3_enables{}; ///< Support for VK_EXT_extended_dynamic_state3. | ||
| 488 | bool ext_line_rasterization{}; ///< Support for VK_EXT_line_rasterization. | 500 | bool ext_line_rasterization{}; ///< Support for VK_EXT_line_rasterization. |
| 489 | bool ext_vertex_input_dynamic_state{}; ///< Support for VK_EXT_vertex_input_dynamic_state. | 501 | bool ext_vertex_input_dynamic_state{}; ///< Support for VK_EXT_vertex_input_dynamic_state. |
| 490 | bool ext_shader_stencil_export{}; ///< Support for VK_EXT_shader_stencil_export. | 502 | bool ext_shader_stencil_export{}; ///< Support for VK_EXT_shader_stencil_export. |
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.cpp b/src/video_core/vulkan_common/vulkan_wrapper.cpp index 8745cf80f..861767c13 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.cpp +++ b/src/video_core/vulkan_common/vulkan_wrapper.cpp | |||
| @@ -125,6 +125,8 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept { | |||
| 125 | X(vkCmdSetPrimitiveRestartEnableEXT); | 125 | X(vkCmdSetPrimitiveRestartEnableEXT); |
| 126 | X(vkCmdSetRasterizerDiscardEnableEXT); | 126 | X(vkCmdSetRasterizerDiscardEnableEXT); |
| 127 | X(vkCmdSetDepthBiasEnableEXT); | 127 | X(vkCmdSetDepthBiasEnableEXT); |
| 128 | X(vkCmdSetLogicOpEnableEXT); | ||
| 129 | X(vkCmdSetDepthClampEnableEXT); | ||
| 128 | X(vkCmdSetFrontFaceEXT); | 130 | X(vkCmdSetFrontFaceEXT); |
| 129 | X(vkCmdSetLogicOpEXT); | 131 | X(vkCmdSetLogicOpEXT); |
| 130 | X(vkCmdSetPatchControlPointsEXT); | 132 | X(vkCmdSetPatchControlPointsEXT); |
| @@ -133,6 +135,9 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept { | |||
| 133 | X(vkCmdSetStencilOpEXT); | 135 | X(vkCmdSetStencilOpEXT); |
| 134 | X(vkCmdSetStencilTestEnableEXT); | 136 | X(vkCmdSetStencilTestEnableEXT); |
| 135 | X(vkCmdSetVertexInputEXT); | 137 | X(vkCmdSetVertexInputEXT); |
| 138 | X(vkCmdSetColorWriteMaskEXT); | ||
| 139 | X(vkCmdSetColorBlendEnableEXT); | ||
| 140 | X(vkCmdSetColorBlendEquationEXT); | ||
| 136 | X(vkCmdResolveImage); | 141 | X(vkCmdResolveImage); |
| 137 | X(vkCreateBuffer); | 142 | X(vkCreateBuffer); |
| 138 | X(vkCreateBufferView); | 143 | X(vkCreateBufferView); |
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.h b/src/video_core/vulkan_common/vulkan_wrapper.h index c4b7051fc..d7ae14478 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.h +++ b/src/video_core/vulkan_common/vulkan_wrapper.h | |||
| @@ -237,6 +237,8 @@ struct DeviceDispatch : InstanceDispatch { | |||
| 237 | PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT{}; | 237 | PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT{}; |
| 238 | PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT{}; | 238 | PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT{}; |
| 239 | PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT{}; | 239 | PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT{}; |
| 240 | PFN_vkCmdSetLogicOpEnableEXT vkCmdSetLogicOpEnableEXT{}; | ||
| 241 | PFN_vkCmdSetDepthClampEnableEXT vkCmdSetDepthClampEnableEXT{}; | ||
| 240 | PFN_vkCmdSetEvent vkCmdSetEvent{}; | 242 | PFN_vkCmdSetEvent vkCmdSetEvent{}; |
| 241 | PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT{}; | 243 | PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT{}; |
| 242 | PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT{}; | 244 | PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT{}; |
| @@ -251,6 +253,9 @@ struct DeviceDispatch : InstanceDispatch { | |||
| 251 | PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask{}; | 253 | PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask{}; |
| 252 | PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT{}; | 254 | PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT{}; |
| 253 | PFN_vkCmdSetViewport vkCmdSetViewport{}; | 255 | PFN_vkCmdSetViewport vkCmdSetViewport{}; |
| 256 | PFN_vkCmdSetColorWriteMaskEXT vkCmdSetColorWriteMaskEXT{}; | ||
| 257 | PFN_vkCmdSetColorBlendEnableEXT vkCmdSetColorBlendEnableEXT{}; | ||
| 258 | PFN_vkCmdSetColorBlendEquationEXT vkCmdSetColorBlendEquationEXT{}; | ||
| 254 | PFN_vkCmdWaitEvents vkCmdWaitEvents{}; | 259 | PFN_vkCmdWaitEvents vkCmdWaitEvents{}; |
| 255 | PFN_vkCreateBuffer vkCreateBuffer{}; | 260 | PFN_vkCreateBuffer vkCreateBuffer{}; |
| 256 | PFN_vkCreateBufferView vkCreateBufferView{}; | 261 | PFN_vkCreateBufferView vkCreateBufferView{}; |
| @@ -1236,6 +1241,14 @@ public: | |||
| 1236 | dld->vkCmdSetDepthBiasEnableEXT(handle, enable ? VK_TRUE : VK_FALSE); | 1241 | dld->vkCmdSetDepthBiasEnableEXT(handle, enable ? VK_TRUE : VK_FALSE); |
| 1237 | } | 1242 | } |
| 1238 | 1243 | ||
| 1244 | void SetLogicOpEnableEXT(bool enable) const noexcept { | ||
| 1245 | dld->vkCmdSetLogicOpEnableEXT(handle, enable ? VK_TRUE : VK_FALSE); | ||
| 1246 | } | ||
| 1247 | |||
| 1248 | void SetDepthClampEnableEXT(bool enable) const noexcept { | ||
| 1249 | dld->vkCmdSetDepthClampEnableEXT(handle, enable ? VK_TRUE : VK_FALSE); | ||
| 1250 | } | ||
| 1251 | |||
| 1239 | void SetFrontFaceEXT(VkFrontFace front_face) const noexcept { | 1252 | void SetFrontFaceEXT(VkFrontFace front_face) const noexcept { |
| 1240 | dld->vkCmdSetFrontFaceEXT(handle, front_face); | 1253 | dld->vkCmdSetFrontFaceEXT(handle, front_face); |
| 1241 | } | 1254 | } |
| @@ -1248,6 +1261,18 @@ public: | |||
| 1248 | dld->vkCmdSetPatchControlPointsEXT(handle, patch_control_points); | 1261 | dld->vkCmdSetPatchControlPointsEXT(handle, patch_control_points); |
| 1249 | } | 1262 | } |
| 1250 | 1263 | ||
| 1264 | void SetColorWriteMaskEXT(u32 first, Span<VkColorComponentFlags> masks) const noexcept { | ||
| 1265 | dld->vkCmdSetColorWriteMaskEXT(handle, first, masks.size(), masks.data()); | ||
| 1266 | } | ||
| 1267 | |||
| 1268 | void SetColorBlendEnableEXT(u32 first, Span<VkBool32> enables) const noexcept { | ||
| 1269 | dld->vkCmdSetColorBlendEnableEXT(handle, first, enables.size(), enables.data()); | ||
| 1270 | } | ||
| 1271 | |||
| 1272 | void SetColorBlendEquationEXT(u32 first, Span<VkColorBlendEquationEXT> equations) const noexcept { | ||
| 1273 | dld->vkCmdSetColorBlendEquationEXT(handle, first, equations.size(), equations.data()); | ||
| 1274 | } | ||
| 1275 | |||
| 1251 | void SetLineWidth(float line_width) const noexcept { | 1276 | void SetLineWidth(float line_width) const noexcept { |
| 1252 | dld->vkCmdSetLineWidth(handle, line_width); | 1277 | dld->vkCmdSetLineWidth(handle, line_width); |
| 1253 | } | 1278 | } |