On 04/06/2018 03:01 PM, Nils Wallménius wrote:
Hi Samuel, a question below

Den fre 6 apr. 2018 14:28Samuel Pitoiset <samuel.pitoi...@gmail.com <mailto:samuel.pitoi...@gmail.com>> skrev:

    Simple extension that only returns information for AMD hw.

    Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com
    <mailto: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) {


Isn't Polaris missing from this switch?

You are right. I did try this too quickly.


BR
Nils

    +       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);
    +                       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;
    +                       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 <mailto: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

Reply via email to