@@ -26,8 +26,9 @@ struct cvk_device_properties_mali : public cvk_device_properties {
2626 cl_uint get_max_first_cmd_batch_size () const override final { return 10 ; }
2727 cl_uint get_max_cmd_group_size () const override final { return 1 ; }
2828
29- cvk_device_properties_mali (const uint32_t deviceID)
30- : m_deviceID(deviceID) {}
29+ cvk_device_properties_mali (const uint32_t deviceID,
30+ const VkDriverId driverID)
31+ : m_deviceID(deviceID), m_driverID(driverID) {}
3132
3233 bool is_non_uniform_decoration_broken () const override final {
3334#define GPU_ID2_ARCH_MAJOR_SHIFT 28
@@ -37,24 +38,31 @@ struct cvk_device_properties_mali : public cvk_device_properties {
3738 return (m_deviceID & GPU_ID2_ARCH_MAJOR) <= bifrost_arch_major;
3839 }
3940
41+ bool reuse_descriptor_set () const override final {
42+ return m_driverID == VK_DRIVER_ID_ARM_PROPRIETARY;
43+ }
44+
4045private:
4146 const uint32_t m_deviceID;
47+ const VkDriverId m_driverID;
4248};
4349
4450struct cvk_device_properties_mali_exynos9820
4551 : public cvk_device_properties_mali {
4652 cl_ulong get_global_mem_cache_size () const override final { return 262144 ; }
4753 cl_ulong get_num_compute_units () const override final { return 12 ; }
48- cvk_device_properties_mali_exynos9820 (const uint32_t deviceID)
49- : cvk_device_properties_mali(deviceID) {}
54+ cvk_device_properties_mali_exynos9820 (const uint32_t deviceID,
55+ const VkDriverId driverID)
56+ : cvk_device_properties_mali(deviceID, driverID) {}
5057};
5158
5259struct cvk_device_properties_mali_exynos990
5360 : public cvk_device_properties_mali {
5461 cl_ulong get_global_mem_cache_size () const override final { return 262144 ; }
5562 cl_ulong get_num_compute_units () const override final { return 11 ; }
56- cvk_device_properties_mali_exynos990 (const uint32_t deviceID)
57- : cvk_device_properties_mali(deviceID) {}
63+ cvk_device_properties_mali_exynos990 (const uint32_t deviceID,
64+ const VkDriverId driverID)
65+ : cvk_device_properties_mali(deviceID, driverID) {}
5866};
5967
6068static bool isMaliDevice (const char * name, const uint32_t vendorID) {
@@ -264,9 +272,9 @@ std::unique_ptr<cvk_device_properties> create_cvk_device_properties(
264272 cvk_warn (" Unable to query 'ro.hardware' system property, some "
265273 " device properties will be incorrect." );
266274 } else if (strcmp (soc, " exynos9820" ) == 0 ) {
267- RETURN (cvk_device_properties_mali_exynos9820, deviceID);
275+ RETURN (cvk_device_properties_mali_exynos9820, deviceID, driverID );
268276 } else if (strcmp (soc, " exynos990" ) == 0 ) {
269- RETURN (cvk_device_properties_mali_exynos990, deviceID);
277+ RETURN (cvk_device_properties_mali_exynos990, deviceID, driverID );
270278 } else {
271279 cvk_warn (" Unrecognized 'ro.hardware' value '%s', some device "
272280 " properties will be incorrect." ,
@@ -276,7 +284,7 @@ std::unique_ptr<cvk_device_properties> create_cvk_device_properties(
276284 cvk_warn (" Unrecognized Mali device, some device properties will be "
277285 " incorrect." );
278286#endif
279- RETURN (cvk_device_properties_mali, deviceID);
287+ RETURN (cvk_device_properties_mali, deviceID, driverID );
280288 } else if (strcmp (name, " Adreno (TM) 615" ) == 0 ) {
281289 RETURN (cvk_device_properties_adreno_615);
282290 } else if (strcmp (name, " Adreno (TM) 620" ) == 0 ) {
0 commit comments