| // Copyright (c) 2018-2020 Advanced Micro Devices, Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| // This section is included inside the Pipelines chapter (pipelines.txt) |
| |
| [open,refpage='vkGetShaderInfoAMD',desc='Get information about a shader in a pipeline',type='protos'] |
| -- |
| Information about a particular shader that has been compiled as part of a |
| pipeline object can be extracted by calling: |
| |
| include::{generated}/api/protos/vkGetShaderInfoAMD.txt[] |
| |
| * pname:device is the device that created pname:pipeline. |
| * pname:pipeline is the target of the query. |
| * pname:shaderStage is a elink:VkShaderStageFlagBits specifying the |
| particular shader within the pipeline about which information is being |
| queried. |
| * pname:infoType describes what kind of information is being queried. |
| * pname:pInfoSize is a pointer to a value related to the amount of data |
| the query returns, as described below. |
| * pname:pInfo is either `NULL` or a pointer to a buffer. |
| |
| If pname:pInfo is `NULL`, then the maximum size of the information that can: |
| be retrieved about the shader, in bytes, is returned in pname:pInfoSize. |
| Otherwise, pname:pInfoSize must: point to a variable set by the user to the |
| size of the buffer, in bytes, pointed to by pname:pInfo, and on return the |
| variable is overwritten with the amount of data actually written to |
| pname:pInfo. |
| If pname:pInfoSize is less than the maximum size that can: be retrieved by |
| the pipeline cache, then at most pname:pInfoSize bytes will be written to |
| pname:pInfo, and ename:VK_INCOMPLETE will be returned, instead of |
| ename:VK_SUCCESS, to indicate that not all required of the pipeline cache |
| was returned. |
| |
| Not all information is available for every shader and implementations may |
| not support all kinds of information for any shader. |
| When a certain type of information is unavailable, the function returns |
| ename:VK_ERROR_FEATURE_NOT_PRESENT. |
| |
| If information is successfully and fully queried, the function will return |
| ename:VK_SUCCESS. |
| |
| For pname:infoType ename:VK_SHADER_INFO_TYPE_STATISTICS_AMD, a |
| sname:VkShaderStatisticsInfoAMD structure will be written to the buffer |
| pointed to by pname:pInfo. |
| This structure will be populated with statistics regarding the physical |
| device resources used by that shader along with other miscellaneous |
| information and is described in further detail below. |
| |
| For pname:infoType ename:VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD, pname:pInfo is |
| a pointer to a UTF-8 null-terminated string containing human-readable |
| disassembly. |
| The exact formatting and contents of the disassembly string are |
| vendor-specific. |
| |
| The formatting and contents of all other types of information, including |
| pname:infoType ename:VK_SHADER_INFO_TYPE_BINARY_AMD, are left to the vendor |
| and are not further specified by this extension. |
| |
| include::{generated}/validity/protos/vkGetShaderInfoAMD.txt[] |
| -- |
| |
| [open,refpage='VkShaderInfoTypeAMD',desc='Enum specifying which type of shader information to query',type='enums'] |
| -- |
| Possible values of flink:vkGetShaderInfoAMD::pname:infoType, specifying the |
| information being queried from a shader, are: |
| |
| include::{generated}/api/enums/VkShaderInfoTypeAMD.txt[] |
| |
| * ename:VK_SHADER_INFO_TYPE_STATISTICS_AMD specifies that device resources |
| used by a shader will be queried. |
| * ename:VK_SHADER_INFO_TYPE_BINARY_AMD specifies that |
| implementation-specific information will be queried. |
| * ename:VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD specifies that human-readable |
| dissassembly of a shader. |
| -- |
| |
| [open,refpage='VkShaderStatisticsInfoAMD',desc='Statistical information about a particular shader within a pipeline',type='structs'] |
| -- |
| The sname:VkShaderStatisticsInfoAMD structure is defined as: |
| |
| include::{generated}/api/structs/VkShaderStatisticsInfoAMD.txt[] |
| |
| * pname:shaderStageMask are the combination of logical shader stages |
| contained within this shader. |
| * pname:resourceUsage is a slink:VkShaderResourceUsageAMD structure |
| describing internal physical device resources used by this shader. |
| * pname:numPhysicalVgprs is the maximum number of vector instruction |
| general-purpose registers (VGPRs) available to the physical device. |
| * pname:numPhysicalSgprs is the maximum number of scalar instruction |
| general-purpose registers (SGPRs) available to the physical device. |
| * pname:numAvailableVgprs is the maximum limit of VGPRs made available to |
| the shader compiler. |
| * pname:numAvailableSgprs is the maximum limit of SGPRs made available to |
| the shader compiler. |
| * pname:computeWorkGroupSize is the local workgroup size of this shader in |
| { X, Y, Z } dimensions. |
| |
| Some implementations may merge multiple logical shader stages together in a |
| single shader. |
| In such cases, pname:shaderStageMask will contain a bitmask of all of the |
| stages that are active within that shader. |
| Consequently, if specifying those stages as input to |
| flink:vkGetShaderInfoAMD, the same output information may: be returned for |
| all such shader stage queries. |
| |
| The number of available VGPRs and SGPRs (pname:numAvailableVgprs and |
| pname:numAvailableSgprs respectively) are the shader-addressable subset of |
| physical registers that is given as a limit to the compiler for register |
| assignment. |
| These values may: further be limited by implementations due to performance |
| optimizations where register pressure is a bottleneck. |
| |
| include::{generated}/validity/structs/VkShaderStatisticsInfoAMD.txt[] |
| -- |
| |
| [open,refpage='VkShaderResourceUsageAMD',desc='Resource usage information about a particular shader within a pipeline',type='structs'] |
| -- |
| The sname:VkShaderResourceUsageAMD structure is defined as: |
| |
| include::{generated}/api/structs/VkShaderResourceUsageAMD.txt[] |
| |
| * pname:numUsedVgprs is the number of vector instruction general-purpose |
| registers used by this shader. |
| * pname:numUsedSgprs is the number of scalar instruction general-purpose |
| registers used by this shader. |
| * pname:ldsSizePerLocalWorkGroup is the maximum local data store size per |
| work group in bytes. |
| * pname:ldsUsageSizeInBytes is the LDS usage size in bytes per work group |
| by this shader. |
| * pname:scratchMemUsageInBytes is the scratch memory usage in bytes by |
| this shader. |
| |
| include::{generated}/validity/structs/VkShaderResourceUsageAMD.txt[] |
| -- |