Class INTELPerformanceQuery


  • public class INTELPerformanceQuery
    extends java.lang.Object
    This extension allows an application to capture performance data to be interpreted by a external application or library.

    Such a library is available at : https://github.com/intel/metrics-discovery

    Performance analysis tools such as GPA (https://software.intel.com/en-us/gpa) make use of this extension and the metrics-discovery library to present the data in a human readable way.

    Example Code
    
     // A previously created device
     VkDevice device;
     
     // A queue from from device
     VkQueue queue;
     
     VkInitializePerformanceApiInfoINTEL performanceApiInfoIntel = {
       VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL,
       NULL,
       NULL
     };
     
     vkInitializePerformanceApiINTEL(
       device,
       &performanceApiInfoIntel);
     
     VkQueryPoolCreateInfoINTEL queryPoolIntel = {
       VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL,
       NULL,
       VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL,
     };
     
     VkQueryPoolCreateInfo queryPoolCreateInfo = {
       VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
       &queryPoolIntel,
       0,
       VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL,
       1,
       0
     };
     
     VkQueryPool queryPool;
     
     VkResult result = vkCreateQueryPool(
       device,
       &queryPoolCreateInfo,
       NULL,
       &queryPool);
     
     assert(VK_SUCCESS == result);
     
     // A command buffer we want to record counters on
     VkCommandBuffer commandBuffer;
     
     VkCommandBufferBeginInfo commandBufferBeginInfo = {
       VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
       NULL,
       VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
       NULL
     };
     
     result = vkBeginCommandBuffer(commandBuffer, &commandBufferBeginInfo);
     
     assert(VK_SUCCESS == result);
     
     vkCmdResetQueryPool(
       commandBuffer,
       queryPool,
       0,
       1);
     
     vkCmdBeginQuery(
       commandBuffer,
       queryPool,
       0,
       0);
     
     // Perform the commands you want to get performance information on
     // ...
     
     // Perform a barrier to ensure all previous commands were complete before
     // ending the query
     vkCmdPipelineBarrier(commandBuffer,
       VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
       VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
       0,
       0,
       NULL,
       0,
       NULL,
       0,
       NULL);
     
     vkCmdEndQuery(
       commandBuffer,
       queryPool,
       0);
     
     result = vkEndCommandBuffer(commandBuffer);
     
     assert(VK_SUCCESS == result);
     
     VkPerformanceConfigurationAcquireInfoINTEL performanceConfigurationAcquireInfo = {
       VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL,
       NULL,
       VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL
     };
     
     VkPerformanceConfigurationINTEL performanceConfigurationIntel;
     
     result = vkAcquirePerformanceConfigurationINTEL(
       device,
       &performanceConfigurationAcquireInfo,
       &performanceConfigurationIntel);
     
     vkQueueSetPerformanceConfigurationINTEL(queue, performanceConfigurationIntel);
     
     assert(VK_SUCCESS == result);
     
     // Submit the command buffer and wait for its completion
     // ...
     
     result = vkReleasePerformanceConfigurationINTEL(
       device,
       performanceConfigurationIntel);
     
     assert(VK_SUCCESS == result);
     
     // Get the report size from metrics-discovery's QueryReportSize
     
     result = vkGetQueryPoolResults(
       device,
       queryPool,
       0, 1, QueryReportSize,
       data, QueryReportSize, 0);
     
     assert(VK_SUCCESS == result);
     
     // The data can then be passed back to metrics-discovery from which
     // human readable values can be queried.
    Name String
    VK_INTEL_performance_query
    Extension Type
    Device extension
    Registered Extension Number
    211
    Revision
    1
    Extension and Version Dependencies
    • Requires Vulkan 1.0
    Contact
    Last Modified Date
    2018-05-16
    IP Status
    No known IP claims.
    Contributors
    • Lionel Landwerlin, Intel
    • Piotr Maciejewski, Intel