// This section is included inside the Pipelines chapter (pipelines.txt) [[pipelines-shader-information]] == Pipeline Shader Information [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::../api/protos/vkGetShaderInfoAMD.txt[] * pname:device is the device that created pname:pipeline. * pname:pipeline is the target of the query. * pname:shaderStage identifies 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 fname:vkGetShaderInfoAMD will return ename:VK_INCOMPLETE. 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, an instance of sname:VkShaderStatisticsInfoAMD 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 points 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::../validity/protos/vkGetShaderInfoAMD.txt[] -- [open,refpage='VkShaderInfoTypeAMD',desc='Enum specifying which type of shader info to query',type='enums'] -- Possible values of flink:vkGetShaderInfoAMD::pname:infoType, specifying the information being queried from a shader, are: include::../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::../api/structs/VkShaderStatisticsInfoAMD.txt[] * pname:shaderStageMask are the combination of logical shader stages contained within this shader. * pname:resourceUsage is an instance of slink:VkShaderResourceUsageAMD 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::../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::../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::../validity/structs/VkShaderResourceUsageAMD.txt[] --