On Fri, Apr 6, 2018 at 2:28 PM, Samuel Pitoiset <samuel.pitoi...@gmail.com> wrote: > Simple extension that only returns information for AMD hw. > > Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> > --- > src/amd/vulkan/radv_device.c | 71 > +++++++++++++++++++++++++++++++++++++++ > src/amd/vulkan/radv_extensions.py | 1 + > 2 files changed, 72 insertions(+) > > diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c > index 41f8242754..fba0b5c586 100644 > --- a/src/amd/vulkan/radv_device.c > +++ b/src/amd/vulkan/radv_device.c > @@ -888,6 +888,39 @@ void radv_GetPhysicalDeviceProperties( > memcpy(pProperties->pipelineCacheUUID, pdevice->cache_uuid, > VK_UUID_SIZE); > } > > +static uint32_t > +radv_get_max_cu_per_sh(struct radv_physical_device *device) > +{ > + /* This should be queried from the KMD, like the number of SEs. */ > + switch (device->rad_info.family) { > + case CHIP_TAHITI: > + return 8; > + case CHIP_HAINAN: > + return 5; > + case CHIP_BONAIRE: > + return 7; > + case CHIP_HAWAII: > + return 11; > + case CHIP_ICELAND: > + return 6; > + case CHIP_CARRIZO: > + return 8; > + case CHIP_TONGA: > + return 8; > + case CHIP_FIJI: > + return 16; > + case CHIP_STONEY: > + return 3; > + case CHIP_VEGA10: > + return 16; > + case CHIP_RAVEN: > + return 11; > + default: > + fprintf(stderr, "Number of CUs per SH unknown!\n"); > + return 0; > + } > +} > + > void radv_GetPhysicalDeviceProperties2( > VkPhysicalDevice physicalDevice, > VkPhysicalDeviceProperties2KHR *pProperties) > @@ -961,6 +994,44 @@ void radv_GetPhysicalDeviceProperties2( > properties->filterMinmaxSingleComponentFormats = true; > break; > } > + case > VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD: { > + VkPhysicalDeviceShaderCorePropertiesAMD *properties = > + (VkPhysicalDeviceShaderCorePropertiesAMD > *)ext; > + > + /* Shader engines. */ > + properties->shaderEngineCount = > + pdevice->rad_info.max_se; > + properties->shaderArraysPerEngineCount = > + pdevice->rad_info.max_sh_per_se; > + properties->computeUnitsPerShaderArray = > + radv_get_max_cu_per_sh(pdevice);
The kernel provides a num_cu_per_sh variable, I'd prefer if you use that. > + properties->simdPerComputeUnit = 4; > + properties->wavefrontsPerSimd = > + pdevice->rad_info.family == CHIP_TONGA || > + pdevice->rad_info.family == CHIP_ICELAND || > + pdevice->rad_info.family == CHIP_POLARIS10 || > + pdevice->rad_info.family == CHIP_POLARIS11 || > + pdevice->rad_info.family == CHIP_POLARIS12 ? > 8 : 10; > + properties->wavefrontSize = 64; > + > + /* SGPR. */ > + properties->sgprsPerSimd = > + radv_get_num_physical_sgprs(pdevice); > + properties->minSgprAllocation = > + pdevice->rad_info.chip_class >= VI ? 16 : 8; > + properties->maxSgprAllocation = > + pdevice->rad_info.family == CHIP_TONGA || > + pdevice->rad_info.family == CHIP_ICELAND ? 96 > : 104; Do we want to round this to multiples of 16 for >= VI? What does AMD do here. > + properties->sgprAllocationGranularity = > + pdevice->rad_info.chip_class >= VI ? 16 : 8; > + > + /* VGPR. */ > + properties->vgprsPerSimd = RADV_NUM_PHYSICAL_VGPRS; > + properties->minVgprAllocation = 4; > + properties->maxVgprAllocation = 256; > + properties->vgprAllocationGranularity = 4; > + break; > + } > default: > break; > } > diff --git a/src/amd/vulkan/radv_extensions.py > b/src/amd/vulkan/radv_extensions.py > index bc63a34896..a25db637e2 100644 > --- a/src/amd/vulkan/radv_extensions.py > +++ b/src/amd/vulkan/radv_extensions.py > @@ -96,6 +96,7 @@ EXTENSIONS = [ > Extension('VK_AMD_draw_indirect_count', 1, True), > Extension('VK_AMD_gcn_shader', 1, True), > Extension('VK_AMD_rasterization_order', 1, > 'device->has_out_of_order_rast'), > + Extension('VK_AMD_shader_core_properties', 1, True), > Extension('VK_AMD_shader_info', 1, True), > Extension('VK_AMD_shader_trinary_minmax', 1, True), > ] > -- > 2.16.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev