# VkRenderPassPerformanceCountersByRegionBeginInfoARM(3) Manual Page

## Name

VkRenderPassPerformanceCountersByRegionBeginInfoARM - Structure specifying per region performance counters

Loading… please wait.

## C Specification

The `VkRenderPassPerformanceCountersByRegionBeginInfoARM` structure is defined as:

    // Provided by VK_ARM_performance_counters_by_region
    typedef struct VkRenderPassPerformanceCountersByRegionBeginInfoARM {
        VkStructureType           sType;
        void*                     pNext;
        uint32_t                  counterAddressCount;
        const VkDeviceAddress*    pCounterAddresses;
        VkBool32                  serializeRegions;
        uint32_t                  counterIndexCount;
        uint32_t*                 pCounterIndices;
    } VkRenderPassPerformanceCountersByRegionBeginInfoARM;

## Members

- `sType` is a VkStructureType value identifying this structure.

- `pNext` is `NULL` or a pointer to a structure extending this structure.

- `counterAddressCount` is the number of entries in the `pCounterAddresses` array.

- `pCounterAddresses` is a pointer to an array of VkDeviceAddress where performance counter data will be written.

- `serializeRegions` controls whether the implementation serializes the execution of each region.

- `counterIndexCount` is the number of entries in the `pCounterIndices` array.

- `pCounterIndices` is a pointer to an array of VkPerformanceCounterARM::`counterID` values, as enumerated by vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, to enable in this render pass instance.

## Description

Performance counters values are written to each element of `pCounterAddresses` in an implementation-dependent manner. These writes execute in the `VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT` pipeline stage.

The index into this array is calculated as:

    uint32_t index = s * L + l;

where `s` is the physical subpass index, `L` is the maximum number of views or layers in the current render pass instance, and `l` is the index of the current view or layer.

When using a render pass object with multiple subpasses, an implementation may merge one more subpasses. The physical subpass index represents the index into the set of subpasses that remain after such merge operations are done.

Note | The `VK_EXT_subpass_merge_feedback` extension can be used to determine which if any subpasses have been merged. The physical subpass index is equal to the `postMergeIndex` value provided in VkRenderPassSubpassFeedbackInfoEXT.

Within each element of `pCounterAddresses`, counter values are written in framebuffer-space order if VkPhysicalDevicePerformanceCountersByRegionPropertiesARM::`identityTransformOrder` is `VK_TRUE`.

Each counter value is written as an unsigned 32-bit integer value.

If the render pass has a fragment density map, performance counter values are only written for regions where the fragment area is unchanged.

Valid Usage

- VUID-VkRenderPassPerformanceCountersByRegionBeginInfoARM-counterAddressCount-11815
  `counterAddressCount` must be equal to S × L, where S is the number of subpasses in the current render pass instance, and L is the number of layers in the current render pass instance or the index of the most significant bit of any view mask in the current render pass instance

- VUID-VkRenderPassPerformanceCountersByRegionBeginInfoARM-pCounterAddresses-11816
  For each element of `pCounterAddresses` that is not `0`, if the buffer from which it was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object

- VUID-VkRenderPassPerformanceCountersByRegionBeginInfoARM-pCounterAddresses-11817
  For each element of `pCounterAddresses`[i], all device addresses between `pCounterAddresses`[i] and `pCounterAddresses`[i] plus N - 1, must be in the buffer device address range of the same buffer, where N is given by N=a l i g n(⌈w/rs w⌉×a l i g n(c×s i zeo f(u in t 32_t),r a),rs a)×⌈h/rs h⌉, where `w` is the value of VkRenderingInfo::`renderArea.extent.width`, `h` is the value of VkRenderingInfo::`renderArea.extent.height`, `rsw` is the value of VkPhysicalDevicePerformanceCountersByRegionPropertiesARM::`performanceCounterRegionSize.width`, `rsh` is the value of VkPhysicalDevicePerformanceCountersByRegionPropertiesARM::`performanceCounterRegionSize.height`, `c` is the value of `counterIndexCount`, `ra` is the value of VkPhysicalDevicePerformanceCountersByRegionPropertiesARM::`regionAlignment`, and `rsa` is the value of VkPhysicalDevicePerformanceCountersByRegionPropertiesARM::`rowStrideAlignment`

- VUID-VkRenderPassPerformanceCountersByRegionBeginInfoARM-counterIndexCount-11818
  `counterIndexCount` must be less than or equal to VkPhysicalDevicePerformanceCountersByRegionPropertiesARM::`maxPerRegionPerformanceCounters`

Valid Usage (Implicit)

- VUID-VkRenderPassPerformanceCountersByRegionBeginInfoARM-sType-sType
  `sType` must be `VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM`

- VUID-VkRenderPassPerformanceCountersByRegionBeginInfoARM-pCounterAddresses-parameter
  `pCounterAddresses` must be a valid pointer to a valid VkDeviceAddress value

- VUID-VkRenderPassPerformanceCountersByRegionBeginInfoARM-pCounterIndices-parameter
  `pCounterIndices` must be a valid pointer to a `uint32_t` value

## See Also

VK_ARM_performance_counters_by_region, VkBool32, VkDeviceAddress, VkStructureType

## Document Notes

For more information, see the Vulkan Specification.

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright 2014-2025 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0