public class AMDShaderInfo
extends java.lang.Object
While this extension provides a mechanism for extracting this information, the details regarding the contents or format of this information are not specified by this extension and may be provided by the vendor externally.
Furthermore, all information types are optionally supported, and users should not assume every implementation supports querying every type of information.
This example extracts the register usage of a fragment shader within a particular graphics pipeline:
extern VkDevice device;
extern VkPipeline gfxPipeline;
PFN_vkGetShaderInfoAMD pfnGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)vkGetDeviceProcAddr(
device, "vkGetShaderInfoAMD");
VkShaderStatisticsInfoAMD statistics = {};
size_t dataSize = sizeof(statistics);
if (pfnGetShaderInfoAMD(device,
gfxPipeline,
VK_SHADER_STAGE_FRAGMENT_BIT,
VK_SHADER_INFO_TYPE_STATISTICS_AMD,
&dataSize,
&statistics) == VK_SUCCESS)
{
printf("VGPR usage: %d\n", statistics.resourceUsage.numUsedVgprs);
printf("SGPR usage: %d\n", statistics.resourceUsage.numUsedSgprs);
}
The following example continues the previous example by subsequently attempting to query and print shader disassembly about the fragment shader:
// Query disassembly size (if available)
if (pfnGetShaderInfoAMD(device,
gfxPipeline,
VK_SHADER_STAGE_FRAGMENT_BIT,
VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD,
&dataSize,
nullptr) == VK_SUCCESS)
{
printf("Fragment shader disassembly:\n");
void* disassembly = malloc(dataSize);
// Query disassembly and print
if (pfnGetShaderInfoAMD(device,
gfxPipeline,
VK_SHADER_STAGE_FRAGMENT_BIT,
VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD,
&dataSize,
disassembly) == VK_SUCCESS)
{
printf((char*)disassembly);
}
free(disassembly);
}
VK_AMD_shader_info| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
VK_AMD_SHADER_INFO_EXTENSION_NAME
The extension name.
|
static int |
VK_AMD_SHADER_INFO_SPEC_VERSION
The extension specification version.
|
static int |
VK_SHADER_INFO_TYPE_BINARY_AMD
VkShaderInfoTypeAMD - Enum specifying which type of shader info to query
|
static int |
VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD
VkShaderInfoTypeAMD - Enum specifying which type of shader info to query
|
static int |
VK_SHADER_INFO_TYPE_STATISTICS_AMD
VkShaderInfoTypeAMD - Enum specifying which type of shader info to query
|
| Modifier and Type | Method and Description |
|---|---|
static int |
nvkGetShaderInfoAMD(org.lwjgl.vulkan.VkDevice device,
long pipeline,
int shaderStage,
int infoType,
long pInfoSize,
long pInfo)
Unsafe version of:
GetShaderInfoAMD |
static int |
vkGetShaderInfoAMD(org.lwjgl.vulkan.VkDevice device,
long pipeline,
int shaderStage,
int infoType,
org.lwjgl.PointerBuffer pInfoSize,
java.nio.ByteBuffer pInfo)
Get information about a shader in a pipeline.
|
public static final int VK_AMD_SHADER_INFO_SPEC_VERSION
public static final java.lang.String VK_AMD_SHADER_INFO_EXTENSION_NAME
public static final int VK_SHADER_INFO_TYPE_STATISTICS_AMD
SHADER_INFO_TYPE_STATISTICS_AMD specifies that device resources used by a shader will be queried.SHADER_INFO_TYPE_BINARY_AMD specifies that implementation-specific information will be queried.SHADER_INFO_TYPE_DISASSEMBLY_AMD specifies that human-readable dissassembly of a shader.public static final int VK_SHADER_INFO_TYPE_BINARY_AMD
SHADER_INFO_TYPE_STATISTICS_AMD specifies that device resources used by a shader will be queried.SHADER_INFO_TYPE_BINARY_AMD specifies that implementation-specific information will be queried.SHADER_INFO_TYPE_DISASSEMBLY_AMD specifies that human-readable dissassembly of a shader.public static final int VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD
SHADER_INFO_TYPE_STATISTICS_AMD specifies that device resources used by a shader will be queried.SHADER_INFO_TYPE_BINARY_AMD specifies that implementation-specific information will be queried.SHADER_INFO_TYPE_DISASSEMBLY_AMD specifies that human-readable dissassembly of a shader.public static int nvkGetShaderInfoAMD(org.lwjgl.vulkan.VkDevice device,
long pipeline,
int shaderStage,
int infoType,
long pInfoSize,
long pInfo)
GetShaderInfoAMDpInfoSize - a pointer to a value related to the amount of data the query returns, as described below.public static int vkGetShaderInfoAMD(org.lwjgl.vulkan.VkDevice device,
long pipeline,
int shaderStage,
int infoType,
org.lwjgl.PointerBuffer pInfoSize,
@Nullable
java.nio.ByteBuffer pInfo)
Information about a particular shader that has been compiled as part of a pipeline object can be extracted by calling:
VkResult vkGetShaderInfoAMD(
VkDevice device,
VkPipeline pipeline,
VkShaderStageFlagBits shaderStage,
VkShaderInfoTypeAMD infoType,
size_t* pInfoSize,
void* pInfo);
If pInfo is NULL, then the maximum size of the information that can be retrieved about the shader, in bytes, is returned in pInfoSize. Otherwise, pInfoSize must point to a variable set by the user to the size of the buffer, in bytes, pointed to by pInfo, and on return the variable is overwritten with the amount of data actually written to pInfo.
If pInfoSize is less than the maximum size that can be retrieved by the pipeline cache, then at most pInfoSize bytes will be written to pInfo, and vkGetShaderInfoAMD will return 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 ERROR_FEATURE_NOT_PRESENT.
If information is successfully and fully queried, the function will return SUCCESS.
For infoType SHADER_INFO_TYPE_STATISTICS_AMD, a VkShaderStatisticsInfoAMD structure will be written to the buffer pointed to by 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 infoType SHADER_INFO_TYPE_DISASSEMBLY_AMD, 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 infoType SHADER_INFO_TYPE_BINARY_AMD, are left to the vendor and are not further specified by this extension.
device must be a valid VkDevice handlepipeline must be a valid VkPipeline handleshaderStage must be a valid VkShaderStageFlagBits valueinfoType must be a valid VkShaderInfoTypeAMD valuepInfoSize must be a valid pointer to a size_t valuepInfoSize is not 0, and pInfo is not NULL, pInfo must be a valid pointer to an array of pInfoSize bytespipeline must have been created, allocated, or retrieved from devicedevice - the device that created pipeline.pipeline - the target of the query.shaderStage - identifies the particular shader within the pipeline about which information is being queried.infoType - describes what kind of information is being queried.pInfoSize - a pointer to a value related to the amount of data the query returns, as described below.pInfo - either NULL or a pointer to a buffer.Copyright LWJGL. All Rights Reserved. License terms.