mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
pvr: Use common vkGetPhysicalDeviceFeatures2() implementation
Signed-off-by: Matt Coster <matt.coster@imgtec.com> Reviewed-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23311>
This commit is contained in:
parent
6dab9ea50d
commit
4ba553ab9a
1 changed files with 86 additions and 98 deletions
|
|
@ -160,6 +160,76 @@ static void pvr_physical_device_get_supported_extensions(
|
||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void pvr_physical_device_get_supported_features(
|
||||||
|
const struct pvr_device_info *const dev_info,
|
||||||
|
struct vk_features *const features)
|
||||||
|
{
|
||||||
|
*features = (struct vk_features){
|
||||||
|
/* Vulkan 1.0 */
|
||||||
|
.robustBufferAccess = true,
|
||||||
|
.fullDrawIndexUint32 = true,
|
||||||
|
.imageCubeArray = true,
|
||||||
|
.independentBlend = false,
|
||||||
|
.geometryShader = false,
|
||||||
|
.tessellationShader = false,
|
||||||
|
.sampleRateShading = true,
|
||||||
|
.dualSrcBlend = false,
|
||||||
|
.logicOp = false,
|
||||||
|
.multiDrawIndirect = true,
|
||||||
|
.drawIndirectFirstInstance = true,
|
||||||
|
.depthClamp = true,
|
||||||
|
.depthBiasClamp = true,
|
||||||
|
.fillModeNonSolid = false,
|
||||||
|
.depthBounds = false,
|
||||||
|
.wideLines = true,
|
||||||
|
.largePoints = true,
|
||||||
|
.alphaToOne = false,
|
||||||
|
.multiViewport = false,
|
||||||
|
.samplerAnisotropy = false,
|
||||||
|
.textureCompressionETC2 = true,
|
||||||
|
.textureCompressionASTC_LDR = PVR_HAS_FEATURE(dev_info, astc),
|
||||||
|
.textureCompressionBC = false,
|
||||||
|
.occlusionQueryPrecise = false,
|
||||||
|
.pipelineStatisticsQuery = false,
|
||||||
|
.vertexPipelineStoresAndAtomics = true,
|
||||||
|
.fragmentStoresAndAtomics = true,
|
||||||
|
.shaderTessellationAndGeometryPointSize = false,
|
||||||
|
.shaderImageGatherExtended = false,
|
||||||
|
.shaderStorageImageExtendedFormats = true,
|
||||||
|
.shaderStorageImageMultisample = false,
|
||||||
|
.shaderStorageImageReadWithoutFormat = true,
|
||||||
|
.shaderStorageImageWriteWithoutFormat = false,
|
||||||
|
.shaderUniformBufferArrayDynamicIndexing = true,
|
||||||
|
.shaderSampledImageArrayDynamicIndexing = true,
|
||||||
|
.shaderStorageBufferArrayDynamicIndexing = true,
|
||||||
|
.shaderStorageImageArrayDynamicIndexing = true,
|
||||||
|
.shaderClipDistance = false,
|
||||||
|
.shaderCullDistance = false,
|
||||||
|
.shaderFloat64 = false,
|
||||||
|
.shaderInt64 = true,
|
||||||
|
.shaderInt16 = true,
|
||||||
|
.shaderResourceResidency = false,
|
||||||
|
.shaderResourceMinLod = false,
|
||||||
|
.sparseBinding = false,
|
||||||
|
.sparseResidencyBuffer = false,
|
||||||
|
.sparseResidencyImage2D = false,
|
||||||
|
.sparseResidencyImage3D = false,
|
||||||
|
.sparseResidency2Samples = false,
|
||||||
|
.sparseResidency4Samples = false,
|
||||||
|
.sparseResidency8Samples = false,
|
||||||
|
.sparseResidency16Samples = false,
|
||||||
|
.sparseResidencyAliased = false,
|
||||||
|
.variableMultisampleRate = false,
|
||||||
|
.inheritedQueries = false,
|
||||||
|
|
||||||
|
/* VK_KHR_timeline_semaphore (promoted to Vulkan 1.2) */
|
||||||
|
.timelineSemaphore = true,
|
||||||
|
|
||||||
|
/* VK_EXT_private_data (promoted to Vulkan 1.3) */
|
||||||
|
.privateData = true,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
VkResult pvr_EnumerateInstanceVersion(uint32_t *pApiVersion)
|
VkResult pvr_EnumerateInstanceVersion(uint32_t *pApiVersion)
|
||||||
{
|
{
|
||||||
*pApiVersion = PVR_API_VERSION;
|
*pApiVersion = PVR_API_VERSION;
|
||||||
|
|
@ -282,6 +352,7 @@ static VkResult pvr_physical_device_init(struct pvr_physical_device *pdevice,
|
||||||
{
|
{
|
||||||
struct vk_physical_device_dispatch_table dispatch_table;
|
struct vk_physical_device_dispatch_table dispatch_table;
|
||||||
struct vk_device_extension_table supported_extensions;
|
struct vk_device_extension_table supported_extensions;
|
||||||
|
struct vk_features supported_features;
|
||||||
struct pvr_winsys *ws;
|
struct pvr_winsys *ws;
|
||||||
char *display_path;
|
char *display_path;
|
||||||
char *render_path;
|
char *render_path;
|
||||||
|
|
@ -321,7 +392,21 @@ static VkResult pvr_physical_device_init(struct pvr_physical_device *pdevice,
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
goto err_vk_free_display_path;
|
goto err_vk_free_display_path;
|
||||||
|
|
||||||
|
pdevice->instance = instance;
|
||||||
|
pdevice->render_path = render_path;
|
||||||
|
pdevice->display_path = display_path;
|
||||||
|
pdevice->ws = ws;
|
||||||
|
pdevice->vk.supported_sync_types = ws->sync_types;
|
||||||
|
|
||||||
|
result = ws->ops->device_info_init(ws,
|
||||||
|
&pdevice->dev_info,
|
||||||
|
&pdevice->dev_runtime_info);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
goto err_pvr_winsys_destroy;
|
||||||
|
|
||||||
pvr_physical_device_get_supported_extensions(&supported_extensions);
|
pvr_physical_device_get_supported_extensions(&supported_extensions);
|
||||||
|
pvr_physical_device_get_supported_features(&pdevice->dev_info,
|
||||||
|
&supported_features);
|
||||||
|
|
||||||
vk_physical_device_dispatch_table_from_entrypoints(
|
vk_physical_device_dispatch_table_from_entrypoints(
|
||||||
&dispatch_table,
|
&dispatch_table,
|
||||||
|
|
@ -336,23 +421,11 @@ static VkResult pvr_physical_device_init(struct pvr_physical_device *pdevice,
|
||||||
result = vk_physical_device_init(&pdevice->vk,
|
result = vk_physical_device_init(&pdevice->vk,
|
||||||
&instance->vk,
|
&instance->vk,
|
||||||
&supported_extensions,
|
&supported_extensions,
|
||||||
NULL,
|
&supported_features,
|
||||||
&dispatch_table);
|
&dispatch_table);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
goto err_pvr_winsys_destroy;
|
goto err_pvr_winsys_destroy;
|
||||||
|
|
||||||
pdevice->instance = instance;
|
|
||||||
pdevice->render_path = render_path;
|
|
||||||
pdevice->display_path = display_path;
|
|
||||||
pdevice->ws = ws;
|
|
||||||
pdevice->vk.supported_sync_types = ws->sync_types;
|
|
||||||
|
|
||||||
result = ws->ops->device_info_init(ws,
|
|
||||||
&pdevice->dev_info,
|
|
||||||
&pdevice->dev_runtime_info);
|
|
||||||
if (result != VK_SUCCESS)
|
|
||||||
goto err_vk_physical_device_finish;
|
|
||||||
|
|
||||||
result = pvr_physical_device_init_uuids(pdevice);
|
result = pvr_physical_device_init_uuids(pdevice);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
goto err_vk_physical_device_finish;
|
goto err_vk_physical_device_finish;
|
||||||
|
|
@ -637,91 +710,6 @@ VkResult pvr_CreateInstance(const VkInstanceCreateInfo *pCreateInfo,
|
||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pvr_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
|
||||||
VkPhysicalDeviceFeatures2 *pFeatures)
|
|
||||||
{
|
|
||||||
PVR_FROM_HANDLE(pvr_physical_device, pdevice, physicalDevice);
|
|
||||||
|
|
||||||
pFeatures->features = (VkPhysicalDeviceFeatures){
|
|
||||||
.robustBufferAccess = true,
|
|
||||||
.fullDrawIndexUint32 = true,
|
|
||||||
.imageCubeArray = true,
|
|
||||||
.independentBlend = false,
|
|
||||||
.geometryShader = false,
|
|
||||||
.tessellationShader = false,
|
|
||||||
.sampleRateShading = true,
|
|
||||||
.dualSrcBlend = false,
|
|
||||||
.logicOp = false,
|
|
||||||
.multiDrawIndirect = true,
|
|
||||||
.drawIndirectFirstInstance = true,
|
|
||||||
.depthClamp = true,
|
|
||||||
.depthBiasClamp = true,
|
|
||||||
.fillModeNonSolid = false,
|
|
||||||
.depthBounds = false,
|
|
||||||
.wideLines = true,
|
|
||||||
.largePoints = true,
|
|
||||||
.alphaToOne = false,
|
|
||||||
.multiViewport = false,
|
|
||||||
.samplerAnisotropy = false,
|
|
||||||
.textureCompressionETC2 = true,
|
|
||||||
.textureCompressionASTC_LDR = PVR_HAS_FEATURE(&pdevice->dev_info, astc),
|
|
||||||
.textureCompressionBC = false,
|
|
||||||
.occlusionQueryPrecise = false,
|
|
||||||
.pipelineStatisticsQuery = false,
|
|
||||||
.vertexPipelineStoresAndAtomics = true,
|
|
||||||
.fragmentStoresAndAtomics = true,
|
|
||||||
.shaderTessellationAndGeometryPointSize = false,
|
|
||||||
.shaderImageGatherExtended = false,
|
|
||||||
.shaderStorageImageExtendedFormats = true,
|
|
||||||
.shaderStorageImageMultisample = false,
|
|
||||||
.shaderStorageImageReadWithoutFormat = true,
|
|
||||||
.shaderStorageImageWriteWithoutFormat = false,
|
|
||||||
.shaderUniformBufferArrayDynamicIndexing = true,
|
|
||||||
.shaderSampledImageArrayDynamicIndexing = true,
|
|
||||||
.shaderStorageBufferArrayDynamicIndexing = true,
|
|
||||||
.shaderStorageImageArrayDynamicIndexing = true,
|
|
||||||
.shaderClipDistance = false,
|
|
||||||
.shaderCullDistance = false,
|
|
||||||
.shaderFloat64 = false,
|
|
||||||
.shaderInt64 = true,
|
|
||||||
.shaderInt16 = true,
|
|
||||||
.shaderResourceResidency = false,
|
|
||||||
.shaderResourceMinLod = false,
|
|
||||||
.sparseBinding = false,
|
|
||||||
.sparseResidencyBuffer = false,
|
|
||||||
.sparseResidencyImage2D = false,
|
|
||||||
.sparseResidencyImage3D = false,
|
|
||||||
.sparseResidency2Samples = false,
|
|
||||||
.sparseResidency4Samples = false,
|
|
||||||
.sparseResidency8Samples = false,
|
|
||||||
.sparseResidency16Samples = false,
|
|
||||||
.sparseResidencyAliased = false,
|
|
||||||
.variableMultisampleRate = false,
|
|
||||||
.inheritedQueries = false,
|
|
||||||
};
|
|
||||||
|
|
||||||
vk_foreach_struct (ext, pFeatures->pNext) {
|
|
||||||
switch (ext->sType) {
|
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: {
|
|
||||||
VkPhysicalDevicePrivateDataFeatures *pFeature =
|
|
||||||
(VkPhysicalDevicePrivateDataFeatures *)ext;
|
|
||||||
pFeature->privateData = VK_TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: {
|
|
||||||
VkPhysicalDeviceTimelineSemaphoreFeatures *pFeature =
|
|
||||||
(VkPhysicalDeviceTimelineSemaphoreFeatures *)ext;
|
|
||||||
pFeature->timelineSemaphore = VK_TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
pvr_debug_ignored_stype(ext->sType);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t
|
static uint32_t
|
||||||
pvr_get_simultanous_num_allocs(const struct pvr_physical_device *pdevice)
|
pvr_get_simultanous_num_allocs(const struct pvr_physical_device *pdevice)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue