summaryrefslogtreecommitdiff
path: root/src/gallium
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>2023-05-12 16:46:52 -0400
committerMarge Bot <emma+marge@anholt.net>2023-05-16 17:08:16 +0000
commit4aea3fb3dd22425c264e5f6899fe8c8ce8996c7d (patch)
tree00e57f0e1a4694002dcba4355834a40f092e318c /src/gallium
parent1ec097690142f4871ff0d7bc12d82b15ef3d3763 (diff)
downloadmesa-4aea3fb3dd22425c264e5f6899fe8c8ce8996c7d.tar.gz
lvp: Use common GetPhysicalDeviceFeatures2
This is a big delete-the-code win. Tested by diff'ing vulkaninfo output before/after the patch and confirming no changes (other than the driverInfo git sha and the pipelineCacheUUID). Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Acked-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23000>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/frontends/lavapipe/lvp_device.c853
1 files changed, 313 insertions, 540 deletions
diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c
index 39a4df06208..215ac5ed5c6 100644
--- a/src/gallium/frontends/lavapipe/lvp_device.c
+++ b/src/gallium/frontends/lavapipe/lvp_device.c
@@ -223,6 +223,318 @@ min_shader_param(struct pipe_screen *pscreen, enum pipe_shader_cap param)
pscreen->get_shader_param(pscreen, MESA_SHADER_COMPUTE, param));
}
+static void
+lvp_get_features(const struct lvp_physical_device *pdevice,
+ struct vk_features *features)
+{
+ bool instance_divisor = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR) != 0;
+ bool indirect = false;//pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_GLSL_FEATURE_LEVEL) >= 400;
+
+ *features = (struct vk_features){
+ /* Vulkan 1.0 */
+ .robustBufferAccess = true,
+ .fullDrawIndexUint32 = true,
+ .imageCubeArray = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CUBE_MAP_ARRAY) != 0),
+ .independentBlend = true,
+ .geometryShader = (pdevice->pscreen->get_shader_param(pdevice->pscreen, MESA_SHADER_GEOMETRY, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) != 0),
+ .tessellationShader = (pdevice->pscreen->get_shader_param(pdevice->pscreen, MESA_SHADER_TESS_EVAL, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) != 0),
+ .sampleRateShading = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_SAMPLE_SHADING) != 0),
+ .dualSrcBlend = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS) != 0),
+ .logicOp = true,
+ .multiDrawIndirect = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MULTI_DRAW_INDIRECT) != 0),
+ .drawIndirectFirstInstance = true,
+ .depthClamp = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DEPTH_CLIP_DISABLE) != 0),
+ .depthBiasClamp = true,
+ .fillModeNonSolid = true,
+ .depthBounds = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DEPTH_BOUNDS_TEST) != 0),
+ .wideLines = true,
+ .largePoints = true,
+ .alphaToOne = true,
+ .multiViewport = true,
+ .samplerAnisotropy = true,
+ .textureCompressionETC2 = false,
+ .textureCompressionASTC_LDR = false,
+ .textureCompressionBC = true,
+ .occlusionQueryPrecise = true,
+ .pipelineStatisticsQuery = true,
+ .vertexPipelineStoresAndAtomics = (min_vertex_pipeline_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS) != 0),
+ .fragmentStoresAndAtomics = (pdevice->pscreen->get_shader_param(pdevice->pscreen, MESA_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS) != 0),
+ .shaderTessellationAndGeometryPointSize = true,
+ .shaderImageGatherExtended = true,
+ .shaderStorageImageExtendedFormats = (min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_SHADER_IMAGES) != 0),
+ .shaderStorageImageMultisample = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_TEXTURE_MULTISAMPLE) != 0),
+ .shaderUniformBufferArrayDynamicIndexing = true,
+ .shaderSampledImageArrayDynamicIndexing = indirect,
+ .shaderStorageBufferArrayDynamicIndexing = true,
+ .shaderStorageImageArrayDynamicIndexing = indirect,
+ .shaderStorageImageReadWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_LOAD_FORMATTED) != 0),
+ .shaderStorageImageWriteWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_STORE_FORMATTED) != 0),
+ .shaderClipDistance = true,
+ .shaderCullDistance = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CULL_DISTANCE) == 1),
+ .shaderFloat64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DOUBLES) == 1),
+ .shaderInt64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_INT64) == 1),
+ .shaderInt16 = (min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_INT16) == 1),
+ .variableMultisampleRate = false,
+ .inheritedQueries = false,
+
+ /* Vulkan 1.1 */
+ .storageBuffer16BitAccess = true,
+ .uniformAndStorageBuffer16BitAccess = true,
+ .storagePushConstant16 = true,
+ .storageInputOutput16 = false,
+ .multiview = true,
+ .multiviewGeometryShader = true,
+ .multiviewTessellationShader = true,
+ .variablePointersStorageBuffer = true,
+ .variablePointers = true,
+ .protectedMemory = false,
+ .samplerYcbcrConversion = false,
+ .shaderDrawParameters = true,
+
+ /* Vulkan 1.2 */
+ .samplerMirrorClampToEdge = true,
+ .drawIndirectCount = true,
+ .storageBuffer8BitAccess = true,
+ .uniformAndStorageBuffer8BitAccess = true,
+ .storagePushConstant8 = true,
+ .shaderBufferInt64Atomics = true,
+ .shaderSharedInt64Atomics = true,
+ .shaderFloat16 = pdevice->pscreen->get_shader_param(pdevice->pscreen, MESA_SHADER_FRAGMENT, PIPE_SHADER_CAP_FP16) != 0,
+ .shaderInt8 = true,
+
+ .descriptorIndexing = false,
+ .shaderInputAttachmentArrayDynamicIndexing = false,
+ .shaderUniformTexelBufferArrayDynamicIndexing = false,
+ .shaderStorageTexelBufferArrayDynamicIndexing = false,
+ .shaderUniformBufferArrayNonUniformIndexing = false,
+ .shaderSampledImageArrayNonUniformIndexing = false,
+ .shaderStorageBufferArrayNonUniformIndexing = false,
+ .shaderStorageImageArrayNonUniformIndexing = false,
+ .shaderInputAttachmentArrayNonUniformIndexing = false,
+ .shaderUniformTexelBufferArrayNonUniformIndexing = false,
+ .shaderStorageTexelBufferArrayNonUniformIndexing = false,
+ .descriptorBindingUniformBufferUpdateAfterBind = false,
+ .descriptorBindingSampledImageUpdateAfterBind = false,
+ .descriptorBindingStorageImageUpdateAfterBind = false,
+ .descriptorBindingStorageBufferUpdateAfterBind = false,
+ .descriptorBindingUniformTexelBufferUpdateAfterBind = false,
+ .descriptorBindingStorageTexelBufferUpdateAfterBind = false,
+ .descriptorBindingUpdateUnusedWhilePending = false,
+ .descriptorBindingPartiallyBound = false,
+ .descriptorBindingVariableDescriptorCount = false,
+ .runtimeDescriptorArray = false,
+
+ .samplerFilterMinmax = true,
+ .scalarBlockLayout = true,
+ .imagelessFramebuffer = true,
+ .uniformBufferStandardLayout = true,
+ .shaderSubgroupExtendedTypes = true,
+ .separateDepthStencilLayouts = true,
+ .hostQueryReset = true,
+ .timelineSemaphore = true,
+ .bufferDeviceAddress = true,
+ .bufferDeviceAddressCaptureReplay = false,
+ .bufferDeviceAddressMultiDevice = false,
+ .vulkanMemoryModel = true,
+ .vulkanMemoryModelDeviceScope = true,
+ .vulkanMemoryModelAvailabilityVisibilityChains = true,
+ .shaderOutputViewportIndex = true,
+ .shaderOutputLayer = true,
+ .subgroupBroadcastDynamicId = true,
+
+ /* Vulkan 1.3 */
+ .robustImageAccess = true,
+ .inlineUniformBlock = true,
+ .descriptorBindingInlineUniformBlockUpdateAfterBind = true,
+ .pipelineCreationCacheControl = true,
+ .privateData = true,
+ .shaderDemoteToHelperInvocation = true,
+ .shaderTerminateInvocation = true,
+ .subgroupSizeControl = true,
+ .computeFullSubgroups = true,
+ .synchronization2 = true,
+ .textureCompressionASTC_HDR = VK_FALSE,
+ .shaderZeroInitializeWorkgroupMemory = true,
+ .dynamicRendering = true,
+ .shaderIntegerDotProduct = true,
+ .maintenance4 = true,
+
+ /* VK_EXT_primitives_generated_query */
+ .primitivesGeneratedQuery = true,
+ .primitivesGeneratedQueryWithRasterizerDiscard = true,
+ .primitivesGeneratedQueryWithNonZeroStreams = true,
+
+ /* VK_EXT_border_color_swizzle */
+ .borderColorSwizzle = true,
+ .borderColorSwizzleFromImage = true,
+
+ /* VK_EXT_non_seamless_cube_map */
+ .nonSeamlessCubeMap = true,
+
+ /* VK_EXT_attachment_feedback_loop_layout */
+ .attachmentFeedbackLoopLayout = true,
+
+ /* VK_EXT_rasterization_order_attachment_access */
+ .rasterizationOrderColorAttachmentAccess = true,
+ .rasterizationOrderDepthAttachmentAccess = true,
+ .rasterizationOrderStencilAttachmentAccess = true,
+
+ /* VK_EXT_line_rasterization */
+ .rectangularLines = true,
+ .bresenhamLines = true,
+ .smoothLines = true,
+ .stippledRectangularLines = true,
+ .stippledBresenhamLines = true,
+ .stippledSmoothLines = true,
+
+ /* VK_EXT_vertex_attribute_divisor */
+ .vertexAttributeInstanceRateZeroDivisor = instance_divisor,
+ .vertexAttributeInstanceRateDivisor = instance_divisor,
+
+ /* VK_EXT_multisampled_render_to_single_sampled */
+ .multisampledRenderToSingleSampled = true,
+
+ /* VK_EXT_index_type_uint8 */
+ .indexTypeUint8 = true,
+
+ /* VK_EXT_vertex_input_dynamic_state */
+ .vertexInputDynamicState = true,
+
+ /* VK_EXT_image_sliced_view_of_3d */
+ .imageSlicedViewOf3D = true,
+
+ /* VK_EXT_depth_clip_control */
+ .depthClipControl = true,
+
+ /* VK_EXT_attachment_feedback_loop_layout_dynamic_state */
+ .attachmentFeedbackLoopDynamicState = true,
+
+ /* VK_EXT_shader_object */
+ .shaderObject = true,
+
+ /* VK_KHR_shader_clock */
+ .shaderSubgroupClock = true,
+ .shaderDeviceClock = true,
+
+ /* VK_EXT_texel_buffer_alignment */
+ .texelBufferAlignment = true,
+
+ /* VK_EXT_transform_feedback */
+ .transformFeedback = true,
+ .geometryStreams = true,
+
+ /* VK_EXT_conditional_rendering */
+ .conditionalRendering = true,
+ .inheritedConditionalRendering = false,
+
+ /* VK_EXT_extended_dynamic_state */
+ .extendedDynamicState = true,
+
+ /* VK_EXT_4444_formats */
+ .formatA4R4G4B4 = true,
+ .formatA4B4G4R4 = true,
+
+ /* VK_EXT_custom_border_color */
+ .customBorderColors = true,
+ .customBorderColorWithoutFormat = true,
+
+ /* VK_EXT_color_write_enable */
+ .colorWriteEnable = true,
+
+ /* VK_EXT_image_2d_view_of_3d */
+ .image2DViewOf3D = true,
+ .sampler2DViewOf3D = true,
+
+ /* VK_EXT_provoking_vertex */
+ .provokingVertexLast = true,
+ .transformFeedbackPreservesProvokingVertex = true,
+
+ /* VK_EXT_multi_draw */
+ .multiDraw = true,
+
+ /* VK_EXT_depth_clip_enable */
+ .depthClipEnable = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DEPTH_CLAMP_ENABLE) != 0),
+
+ /* VK_EXT_extended_dynamic_state2 */
+ .extendedDynamicState2 = true,
+ .extendedDynamicState2LogicOp = true,
+ .extendedDynamicState2PatchControlPoints = true,
+
+ /* VK_EXT_extended_dynamic_state3 */
+ .extendedDynamicState3PolygonMode = true,
+ .extendedDynamicState3TessellationDomainOrigin = true,
+ .extendedDynamicState3DepthClampEnable = true,
+ .extendedDynamicState3DepthClipEnable = true,
+ .extendedDynamicState3LogicOpEnable = true,
+ .extendedDynamicState3SampleMask = true,
+ .extendedDynamicState3RasterizationSamples = true,
+ .extendedDynamicState3AlphaToCoverageEnable = true,
+ .extendedDynamicState3AlphaToOneEnable = true,
+ .extendedDynamicState3DepthClipNegativeOneToOne = true,
+ .extendedDynamicState3RasterizationStream = false,
+ .extendedDynamicState3ConservativeRasterizationMode = false,
+ .extendedDynamicState3ExtraPrimitiveOverestimationSize = false,
+ .extendedDynamicState3LineRasterizationMode = true,
+ .extendedDynamicState3LineStippleEnable = true,
+ .extendedDynamicState3ProvokingVertexMode = true,
+ .extendedDynamicState3SampleLocationsEnable = false,
+ .extendedDynamicState3ColorBlendEnable = true,
+ .extendedDynamicState3ColorBlendEquation = true,
+ .extendedDynamicState3ColorWriteMask = true,
+ .extendedDynamicState3ViewportWScalingEnable = false,
+ .extendedDynamicState3ViewportSwizzle = false,
+ .extendedDynamicState3ShadingRateImageEnable = false,
+ .extendedDynamicState3CoverageToColorEnable = false,
+ .extendedDynamicState3CoverageToColorLocation = false,
+ .extendedDynamicState3CoverageModulationMode = false,
+ .extendedDynamicState3CoverageModulationTableEnable = false,
+ .extendedDynamicState3CoverageModulationTable = false,
+ .extendedDynamicState3CoverageReductionMode = false,
+ .extendedDynamicState3RepresentativeFragmentTestEnable = false,
+ .extendedDynamicState3ColorBlendAdvanced = false,
+
+ /* VK_EXT_robustness2 */
+ .robustBufferAccess2 = true,
+ .robustImageAccess2 = true,
+ .nullDescriptor = true,
+
+ /* VK_EXT_primitive_topology_list_restart */
+ .primitiveTopologyListRestart = true,
+ .primitiveTopologyPatchListRestart = true,
+
+ /* VK_EXT_graphics_pipeline_library */
+ .graphicsPipelineLibrary = true,
+
+ /* VK_EXT_shader_atomic_float */
+ .shaderBufferFloat32Atomics = true,
+ .shaderBufferFloat32AtomicAdd = true,
+ .shaderBufferFloat64Atomics = false,
+ .shaderBufferFloat64AtomicAdd = false,
+ .shaderSharedFloat32Atomics = true,
+ .shaderSharedFloat32AtomicAdd = true,
+ .shaderSharedFloat64Atomics = false,
+ .shaderSharedFloat64AtomicAdd = false,
+ .shaderImageFloat32Atomics = true,
+ .shaderImageFloat32AtomicAdd = true,
+ .sparseImageFloat32Atomics = false,
+ .sparseImageFloat32AtomicAdd = false,
+
+ /* VK_EXT_shader_atomic_float2 */
+ .shaderBufferFloat16Atomics = false,
+ .shaderBufferFloat16AtomicAdd = false,
+ .shaderBufferFloat16AtomicMinMax = false,
+ .shaderBufferFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15,
+ .shaderBufferFloat64AtomicMinMax = false,
+ .shaderSharedFloat16Atomics = false,
+ .shaderSharedFloat16AtomicAdd = false,
+ .shaderSharedFloat16AtomicMinMax = false,
+ .shaderSharedFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15,
+ .shaderSharedFloat64AtomicMinMax = false,
+ .shaderImageFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15,
+ .sparseImageFloat32AtomicMinMax = false,
+ };
+}
+
static VkResult VKAPI_CALL
lvp_physical_device_init(struct lvp_physical_device *device,
struct lvp_instance *instance,
@@ -257,6 +569,7 @@ lvp_physical_device_init(struct lvp_physical_device *device,
device->max_images = device->pscreen->get_shader_param(device->pscreen, MESA_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_SHADER_IMAGES);
device->vk.supported_extensions = lvp_device_extensions_supported;
+ lvp_get_features(device, &device->vk.supported_features);
VkSampleCountFlags sample_counts = VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT;
@@ -540,546 +853,6 @@ lvp_enumerate_physical_devices(struct vk_instance *vk_instance)
return result;
}
-VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceFeatures(
- VkPhysicalDevice physicalDevice,
- VkPhysicalDeviceFeatures* pFeatures)
-{
- LVP_FROM_HANDLE(lvp_physical_device, pdevice, physicalDevice);
- bool indirect = false;//pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_GLSL_FEATURE_LEVEL) >= 400;
- memset(pFeatures, 0, sizeof(*pFeatures));
- *pFeatures = (VkPhysicalDeviceFeatures) {
- .robustBufferAccess = true,
- .fullDrawIndexUint32 = true,
- .imageCubeArray = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CUBE_MAP_ARRAY) != 0),
- .independentBlend = true,
- .geometryShader = (pdevice->pscreen->get_shader_param(pdevice->pscreen, MESA_SHADER_GEOMETRY, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) != 0),
- .tessellationShader = (pdevice->pscreen->get_shader_param(pdevice->pscreen, MESA_SHADER_TESS_EVAL, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) != 0),
- .sampleRateShading = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_SAMPLE_SHADING) != 0),
- .dualSrcBlend = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS) != 0),
- .logicOp = true,
- .multiDrawIndirect = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MULTI_DRAW_INDIRECT) != 0),
- .drawIndirectFirstInstance = true,
- .depthClamp = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DEPTH_CLIP_DISABLE) != 0),
- .depthBiasClamp = true,
- .fillModeNonSolid = true,
- .depthBounds = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DEPTH_BOUNDS_TEST) != 0),
- .wideLines = true,
- .largePoints = true,
- .alphaToOne = true,
- .multiViewport = true,
- .samplerAnisotropy = true,
- .textureCompressionETC2 = false,
- .textureCompressionASTC_LDR = false,
- .textureCompressionBC = true,
- .occlusionQueryPrecise = true,
- .pipelineStatisticsQuery = true,
- .vertexPipelineStoresAndAtomics = (min_vertex_pipeline_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS) != 0),
- .fragmentStoresAndAtomics = (pdevice->pscreen->get_shader_param(pdevice->pscreen, MESA_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS) != 0),
- .shaderTessellationAndGeometryPointSize = true,
- .shaderImageGatherExtended = true,
- .shaderStorageImageExtendedFormats = (min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_SHADER_IMAGES) != 0),
- .shaderStorageImageMultisample = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_TEXTURE_MULTISAMPLE) != 0),
- .shaderUniformBufferArrayDynamicIndexing = true,
- .shaderSampledImageArrayDynamicIndexing = indirect,
- .shaderStorageBufferArrayDynamicIndexing = true,
- .shaderStorageImageArrayDynamicIndexing = indirect,
- .shaderStorageImageReadWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_LOAD_FORMATTED) != 0),
- .shaderStorageImageWriteWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_STORE_FORMATTED) != 0),
- .shaderClipDistance = true,
- .shaderCullDistance = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CULL_DISTANCE) == 1),
- .shaderFloat64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DOUBLES) == 1),
- .shaderInt64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_INT64) == 1),
- .shaderInt16 = (min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_INT16) == 1),
- .variableMultisampleRate = false,
- .inheritedQueries = false,
- };
-}
-
-static void
-lvp_get_physical_device_features_1_1(struct lvp_physical_device *pdevice,
- VkPhysicalDeviceVulkan11Features *f)
-{
- assert(f->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES);
-
- f->storageBuffer16BitAccess = true;
- f->uniformAndStorageBuffer16BitAccess = true;
- f->storagePushConstant16 = true;
- f->storageInputOutput16 = false;
- f->multiview = true;
- f->multiviewGeometryShader = true;
- f->multiviewTessellationShader = true;
- f->variablePointersStorageBuffer = true;
- f->variablePointers = true;
- f->protectedMemory = false;
- f->samplerYcbcrConversion = false;
- f->shaderDrawParameters = true;
-}
-
-static void
-lvp_get_physical_device_features_1_2(struct lvp_physical_device *pdevice,
- VkPhysicalDeviceVulkan12Features *f)
-{
- assert(f->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES);
-
- f->samplerMirrorClampToEdge = true;
- f->drawIndirectCount = true;
- f->storageBuffer8BitAccess = true;
- f->uniformAndStorageBuffer8BitAccess = true;
- f->storagePushConstant8 = true;
- f->shaderBufferInt64Atomics = true;
- f->shaderSharedInt64Atomics = true;
- f->shaderFloat16 = pdevice->pscreen->get_shader_param(pdevice->pscreen, MESA_SHADER_FRAGMENT, PIPE_SHADER_CAP_FP16) != 0;
- f->shaderInt8 = true;
-
- f->descriptorIndexing = false;
- f->shaderInputAttachmentArrayDynamicIndexing = false;
- f->shaderUniformTexelBufferArrayDynamicIndexing = false;
- f->shaderStorageTexelBufferArrayDynamicIndexing = false;
- f->shaderUniformBufferArrayNonUniformIndexing = false;
- f->shaderSampledImageArrayNonUniformIndexing = false;
- f->shaderStorageBufferArrayNonUniformIndexing = false;
- f->shaderStorageImageArrayNonUniformIndexing = false;
- f->shaderInputAttachmentArrayNonUniformIndexing = false;
- f->shaderUniformTexelBufferArrayNonUniformIndexing = false;
- f->shaderStorageTexelBufferArrayNonUniformIndexing = false;
- f->descriptorBindingUniformBufferUpdateAfterBind = false;
- f->descriptorBindingSampledImageUpdateAfterBind = false;
- f->descriptorBindingStorageImageUpdateAfterBind = false;
- f->descriptorBindingStorageBufferUpdateAfterBind = false;
- f->descriptorBindingUniformTexelBufferUpdateAfterBind = false;
- f->descriptorBindingStorageTexelBufferUpdateAfterBind = false;
- f->descriptorBindingUpdateUnusedWhilePending = false;
- f->descriptorBindingPartiallyBound = false;
- f->descriptorBindingVariableDescriptorCount = false;
- f->runtimeDescriptorArray = false;
-
- f->samplerFilterMinmax = true;
- f->scalarBlockLayout = true;
- f->imagelessFramebuffer = true;
- f->uniformBufferStandardLayout = true;
- f->shaderSubgroupExtendedTypes = true;
- f->separateDepthStencilLayouts = true;
- f->hostQueryReset = true;
- f->timelineSemaphore = true;
- f->bufferDeviceAddress = true;
- f->bufferDeviceAddressCaptureReplay = false;
- f->bufferDeviceAddressMultiDevice = false;
- f->vulkanMemoryModel = true;
- f->vulkanMemoryModelDeviceScope = true;
- f->vulkanMemoryModelAvailabilityVisibilityChains = true;
- f->shaderOutputViewportIndex = true;
- f->shaderOutputLayer = true;
- f->subgroupBroadcastDynamicId = true;
-}
-
-static void
-lvp_get_physical_device_features_1_3(struct lvp_physical_device *pdevice,
- VkPhysicalDeviceVulkan13Features *f)
-{
- assert(f->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES);
-
- f->robustImageAccess = VK_TRUE;
- f->inlineUniformBlock = VK_TRUE;
- f->descriptorBindingInlineUniformBlockUpdateAfterBind = VK_TRUE;
- f->pipelineCreationCacheControl = VK_TRUE;
- f->privateData = VK_TRUE;
- f->shaderDemoteToHelperInvocation = VK_TRUE;
- f->shaderTerminateInvocation = VK_TRUE;
- f->subgroupSizeControl = VK_TRUE;
- f->computeFullSubgroups = VK_TRUE;
- f->synchronization2 = VK_TRUE;
- f->textureCompressionASTC_HDR = VK_FALSE;
- f->shaderZeroInitializeWorkgroupMemory = VK_TRUE;
- f->dynamicRendering = VK_TRUE;
- f->shaderIntegerDotProduct = VK_TRUE;
- f->maintenance4 = VK_TRUE;
-}
-
-VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceFeatures2(
- VkPhysicalDevice physicalDevice,
- VkPhysicalDeviceFeatures2 *pFeatures)
-{
- LVP_FROM_HANDLE(lvp_physical_device, pdevice, physicalDevice);
- lvp_GetPhysicalDeviceFeatures(physicalDevice, &pFeatures->features);
-
- VkPhysicalDeviceVulkan11Features core_1_1 = {
- .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES,
- };
- lvp_get_physical_device_features_1_1(pdevice, &core_1_1);
-
- VkPhysicalDeviceVulkan12Features core_1_2 = {
- .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
- };
- lvp_get_physical_device_features_1_2(pdevice, &core_1_2);
-
- VkPhysicalDeviceVulkan13Features core_1_3 = {
- .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
- };
- lvp_get_physical_device_features_1_3(pdevice, &core_1_3);
-
- vk_foreach_struct(ext, pFeatures->pNext) {
-
- if (vk_get_physical_device_core_1_1_feature_ext(ext, &core_1_1))
- continue;
- if (vk_get_physical_device_core_1_2_feature_ext(ext, &core_1_2))
- continue;
- if (vk_get_physical_device_core_1_3_feature_ext(ext, &core_1_3))
- continue;
-
- switch (ext->sType) {
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: {
- VkPhysicalDevicePrivateDataFeatures *features =
- (VkPhysicalDevicePrivateDataFeatures *)ext;
- features->privateData = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: {
- VkPhysicalDeviceSynchronization2Features *features =
- (VkPhysicalDeviceSynchronization2Features *)ext;
- features->synchronization2 = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: {
- VkPhysicalDevicePipelineCreationCacheControlFeatures *features =
- (VkPhysicalDevicePipelineCreationCacheControlFeatures *)ext;
- features->pipelineCreationCacheControl = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: {
- VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *features =
- (VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *)ext;
- features->primitivesGeneratedQuery = true;
- features->primitivesGeneratedQueryWithRasterizerDiscard = true;
- features->primitivesGeneratedQueryWithNonZeroStreams = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: {
- VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *features =
- (VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *)ext;
- features->borderColorSwizzle = true;
- features->borderColorSwizzleFromImage = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT: {
- VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *features =
- (VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *)ext;
- features->nonSeamlessCubeMap = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: {
- VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *features =
- (VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *)ext;
- features->attachmentFeedbackLoopLayout = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT: {
- VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *features =
- (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *)ext;
- features->rasterizationOrderColorAttachmentAccess = true;
- features->rasterizationOrderDepthAttachmentAccess = true;
- features->rasterizationOrderStencilAttachmentAccess = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: {
- VkPhysicalDeviceLineRasterizationFeaturesEXT *features =
- (VkPhysicalDeviceLineRasterizationFeaturesEXT *)ext;
- features->rectangularLines = true;
- features->bresenhamLines = true;
- features->smoothLines = true;
- features->stippledRectangularLines = true;
- features->stippledBresenhamLines = true;
- features->stippledSmoothLines = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: {
- VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *features =
- (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *)ext;
- if (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR) != 0) {
- features->vertexAttributeInstanceRateZeroDivisor = true;
- features->vertexAttributeInstanceRateDivisor = true;
- } else {
- features->vertexAttributeInstanceRateDivisor = false;
- features->vertexAttributeInstanceRateZeroDivisor = false;
- }
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT: {
- VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *features =
- (VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *)ext;
- features->multisampledRenderToSingleSampled = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT: {
- VkPhysicalDeviceIndexTypeUint8FeaturesEXT *features =
- (VkPhysicalDeviceIndexTypeUint8FeaturesEXT *)ext;
- features->indexTypeUint8 = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: {
- VkPhysicalDeviceShaderIntegerDotProductFeatures *features =
- (VkPhysicalDeviceShaderIntegerDotProductFeatures *)ext;
- features->shaderIntegerDotProduct = true;
- break;
- }
-
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: {
- VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *features =
- (VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *)ext;
- features->vertexInputDynamicState = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: {
- VkPhysicalDeviceMaintenance4Features *features =
- (VkPhysicalDeviceMaintenance4Features *)ext;
- features->maintenance4 = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT: {
- VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *features =
- (VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *)ext;
- features->imageSlicedViewOf3D = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: {
- VkPhysicalDeviceSubgroupSizeControlFeatures *features =
- (VkPhysicalDeviceSubgroupSizeControlFeatures *)ext;
- features->subgroupSizeControl = true;
- features->computeFullSubgroups = true;
- break;
- }
-
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: {
- VkPhysicalDeviceDepthClipControlFeaturesEXT *features =
- (VkPhysicalDeviceDepthClipControlFeaturesEXT *)ext;
- features->depthClipControl = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT: {
- VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *features =
- (VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *)ext;
- features->attachmentFeedbackLoopDynamicState = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT: {
- VkPhysicalDeviceShaderObjectFeaturesEXT *features =
- (VkPhysicalDeviceShaderObjectFeaturesEXT *)ext;
- features->shaderObject = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: {
- VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *features =
- (VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *)ext;
- features->shaderZeroInitializeWorkgroupMemory = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: {
- VkPhysicalDeviceShaderClockFeaturesKHR *features =
- (VkPhysicalDeviceShaderClockFeaturesKHR *)ext;
- features->shaderSubgroupClock = true;
- features->shaderDeviceClock = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: {
- VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *features =
- (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *)ext;
- features->texelBufferAlignment = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: {
- VkPhysicalDeviceTransformFeedbackFeaturesEXT *features =
- (VkPhysicalDeviceTransformFeedbackFeaturesEXT*)ext;
-
- features->transformFeedback = true;
- features->geometryStreams = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: {
- VkPhysicalDeviceConditionalRenderingFeaturesEXT *features =
- (VkPhysicalDeviceConditionalRenderingFeaturesEXT*)ext;
- features->conditionalRendering = true;
- features->inheritedConditionalRendering = false;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: {
- VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *features =
- (VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*)ext;
- features->extendedDynamicState = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: {
- VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *features =
- (VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *)ext;
- features->shaderDemoteToHelperInvocation = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: {
- VkPhysicalDevice4444FormatsFeaturesEXT *features =
- (VkPhysicalDevice4444FormatsFeaturesEXT*)ext;
- features->formatA4R4G4B4 = true;
- features->formatA4B4G4R4 = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: {
- VkPhysicalDeviceInlineUniformBlockFeatures *features =
- (VkPhysicalDeviceInlineUniformBlockFeatures*)ext;
- features->inlineUniformBlock = true;
- features->descriptorBindingInlineUniformBlockUpdateAfterBind = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: {
- VkPhysicalDeviceCustomBorderColorFeaturesEXT *features =
- (VkPhysicalDeviceCustomBorderColorFeaturesEXT *)ext;
- features->customBorderColors = true;
- features->customBorderColorWithoutFormat = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
- VkPhysicalDeviceColorWriteEnableFeaturesEXT *features =
- (VkPhysicalDeviceColorWriteEnableFeaturesEXT *)ext;
- features->colorWriteEnable = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: {
- VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *features =
- (VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *)ext;
- features->image2DViewOf3D = true;
- features->sampler2DViewOf3D = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: {
- VkPhysicalDeviceProvokingVertexFeaturesEXT *features =
- (VkPhysicalDeviceProvokingVertexFeaturesEXT*)ext;
- features->provokingVertexLast = true;
- features->transformFeedbackPreservesProvokingVertex = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: {
- VkPhysicalDeviceMultiDrawFeaturesEXT *features = (VkPhysicalDeviceMultiDrawFeaturesEXT *)ext;
- features->multiDraw = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: {
- VkPhysicalDeviceDepthClipEnableFeaturesEXT *features =
- (VkPhysicalDeviceDepthClipEnableFeaturesEXT *)ext;
- if (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DEPTH_CLAMP_ENABLE) != 0)
- features->depthClipEnable = true;
- else
- features->depthClipEnable = false;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT: {
- VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *features = (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *)ext;
- features->extendedDynamicState2 = true;
- features->extendedDynamicState2LogicOp = true;
- features->extendedDynamicState2PatchControlPoints = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: {
- VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *features = (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *)ext;
- features->extendedDynamicState3PolygonMode = VK_TRUE;
- features->extendedDynamicState3TessellationDomainOrigin = VK_TRUE;
- features->extendedDynamicState3DepthClampEnable = VK_TRUE;
- features->extendedDynamicState3DepthClipEnable = VK_TRUE;
- features->extendedDynamicState3LogicOpEnable = VK_TRUE;
- features->extendedDynamicState3SampleMask = VK_TRUE;
- features->extendedDynamicState3RasterizationSamples = VK_TRUE;
- features->extendedDynamicState3AlphaToCoverageEnable = VK_TRUE;
- features->extendedDynamicState3AlphaToOneEnable = VK_TRUE;
- features->extendedDynamicState3DepthClipNegativeOneToOne = VK_TRUE;
- features->extendedDynamicState3RasterizationStream = VK_FALSE;
- features->extendedDynamicState3ConservativeRasterizationMode = VK_FALSE;
- features->extendedDynamicState3ExtraPrimitiveOverestimationSize = VK_FALSE;
- features->extendedDynamicState3LineRasterizationMode = VK_TRUE;
- features->extendedDynamicState3LineStippleEnable = VK_TRUE;
- features->extendedDynamicState3ProvokingVertexMode = VK_TRUE;
- features->extendedDynamicState3SampleLocationsEnable = VK_FALSE;
- features->extendedDynamicState3ColorBlendEnable = VK_TRUE;
- features->extendedDynamicState3ColorBlendEquation = VK_TRUE;
- features->extendedDynamicState3ColorWriteMask = VK_TRUE;
- features->extendedDynamicState3ViewportWScalingEnable = VK_FALSE;
- features->extendedDynamicState3ViewportSwizzle = VK_FALSE;
- features->extendedDynamicState3ShadingRateImageEnable = VK_FALSE;
- features->extendedDynamicState3CoverageToColorEnable = VK_FALSE;
- features->extendedDynamicState3CoverageToColorLocation = VK_FALSE;
- features->extendedDynamicState3CoverageModulationMode = VK_FALSE;
- features->extendedDynamicState3CoverageModulationTableEnable = VK_FALSE;
- features->extendedDynamicState3CoverageModulationTable = VK_FALSE;
- features->extendedDynamicState3CoverageReductionMode = VK_FALSE;
- features->extendedDynamicState3RepresentativeFragmentTestEnable = VK_FALSE;
- features->extendedDynamicState3ColorBlendAdvanced = VK_FALSE;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: {
- VkPhysicalDeviceImageRobustnessFeatures *features = (VkPhysicalDeviceImageRobustnessFeatures *)ext;
- features->robustImageAccess = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: {
- VkPhysicalDeviceRobustness2FeaturesEXT *features = (VkPhysicalDeviceRobustness2FeaturesEXT *)ext;
- features->robustBufferAccess2 = true;
- features->robustImageAccess2 = true;
- features->nullDescriptor = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: {
- VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *features = (VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *)ext;
- features->primitiveTopologyListRestart = true;
- features->primitiveTopologyPatchListRestart = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: {
- VkPhysicalDeviceShaderTerminateInvocationFeatures *features = (VkPhysicalDeviceShaderTerminateInvocationFeatures *)ext;
- features->shaderTerminateInvocation = true;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: {
- VkPhysicalDeviceDynamicRenderingFeatures *features = (VkPhysicalDeviceDynamicRenderingFeatures *)ext;
- features->dynamicRendering = VK_TRUE;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: {
- VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *features = (VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *)ext;
- features->graphicsPipelineLibrary = VK_TRUE;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: {
- VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *features = (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *)ext;
- features->shaderBufferFloat32Atomics = true;
- features->shaderBufferFloat32AtomicAdd = true;
- features->shaderBufferFloat64Atomics = false;
- features->shaderBufferFloat64AtomicAdd = false;
- features->shaderSharedFloat32Atomics = true;
- features->shaderSharedFloat32AtomicAdd = true;
- features->shaderSharedFloat64Atomics = false;
- features->shaderSharedFloat64AtomicAdd = false;
- features->shaderImageFloat32Atomics = true;
- features->shaderImageFloat32AtomicAdd = true;
- features->sparseImageFloat32Atomics = false;
- features->sparseImageFloat32AtomicAdd = false;
- break;
- }
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: {
- VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *features = (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *)ext;
- features->shaderBufferFloat16Atomics = false;
- features->shaderBufferFloat16AtomicAdd = false;
- features->shaderBufferFloat16AtomicMinMax = false;
- features->shaderBufferFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15;
- features->shaderBufferFloat64AtomicMinMax = false;
- features->shaderSharedFloat16Atomics = false;
- features->shaderSharedFloat16AtomicAdd = false;
- features->shaderSharedFloat16AtomicMinMax = false;
- features->shaderSharedFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15;
- features->shaderSharedFloat64AtomicMinMax = false;
- features->shaderImageFloat32AtomicMinMax = LLVM_VERSION_MAJOR >= 15;
- features->sparseImageFloat32AtomicMinMax = false;
- break;
- }
- default:
- break;
- }
- }
-}
-
void
lvp_device_get_cache_uuid(void *uuid)
{