TextureBlockMatch2QCOM capability. It builds on the functionality of QCOM_image_processing with the addition of 4 new image processing operations.
opImageBlockMatchWindowSADQCOM` SPIR-V instruction builds upon the functionality of opImageBlockMatchSADQCOM` by repeatedly performing block match operations across a 2D window. The “2D windowExtent” and “compareMode” are are specified by VkSamplerBlockMatchWindowCreateInfoQCOM in the sampler used to create the target image. Like OpImageBlockMatchSADQCOM, opImageBlockMatchWindowSADQCOM computes an error metric, that describes whether a block of texels in the target image matches a corresponding block of texels in the reference image. Unlike OpImageBlockMatchSADQCOM, this instruction computes an error metric at each (X,Y) location within the 2D window and returns either the minimum or maximum error. The instruction only supports single-component formats. Refer to the pseudocode below for details.opImageBlockMatchWindowSSDQCOM follows the same pattern, computing the SSD error metric at each location within the 2D window.opImageBlockMatchGatherSADQCOM builds upon OpImageBlockMatchSADQCOM. This instruction computes an error metric, that describes whether a block of texels in the target image matches a corresponding block of texels in the reference image. The instruction computes the SAD error metric at 4 texel offsets and returns the error metric for each offset in the X,Y,Z,and W components. The instruction only supports single-component texture formats. Refer to the pseudocode below for details.opImageBlockMatchGatherSSDQCOM follows the same pattern, computing the SSD error metric for 4 offsets.Each of the above 4 image processing instructions are limited to single-component formats.
Below is the pseudocode for GLSL built-in function textureWindowBlockMatchSADQCOM. The pseudocode for textureWindowBlockMatchSSD is identical other than replacing all instances of "SAD" with "SSD".
vec4 textureBlockMatchWindowSAD( sampler2D target,
uvec2 targetCoord,
samler2D reference,
uvec2 refCoord,
uvec2 blocksize) {
// compareMode (MIN or MAX) comes from the vkSampler associated with `target`
// uvec2 window comes from the vkSampler associated with `target`
minSAD = INF;
maxSAD = -INF;
uvec2 minCoord;
uvec2 maxCoord;
for (uint x=0, x < window.width; x++) {
for (uint y=0; y < window.height; y++) {
float SAD = textureBlockMatchSAD(target,
targetCoord + uvec2(x, y),
reference,
refCoord,
blocksize).x;
// Note: the below comparison operator will produce undefined results
// if SAD is a denorm value.
if (SAD < minSAD) {
minSAD = SAD;
minCoord = uvec2(x,y);
}
if (SAD > maxSAD) {
maxSAD = SAD;
maxCoord = uvec2(x,y);
}
}
}
if (compareMode=MIN) {
return vec4(minSAD, minCoord.x, minCoord.y, 0.0);
} else {
return vec4(maxSAD, maxCoord.x, maxCoord.y, 0.0);
}
}
Below is the pseudocode for textureBlockMatchGatherSADQCOM. The pseudocode for textureBlockMatchGatherSSD follows an identical pattern.
vec4 textureBlockMatchGatherSAD( sampler2D target,
uvec2 targetCoord,
samler2D reference,
uvec2 refCoord,
uvec2 blocksize) {
vec4 out;
for (uint x=0, x<4; x++) {
float SAD = textureBlockMatchSAD(target,
targetCoord + uvec2(x, 0),
reference,
refCoord,
blocksize).x;
out[x] = SAD;
}
return out;
}
VK_QCOM_image_processing2VK_QCOM_image_processingSPV_QCOM_image_processing2GL_QCOM_image_processing2| Modifier and Type | Field and Description |
|---|---|
| public static final int | VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM
VkBlockMatchWindowCompareModeQCOM - Block match window compare modes Description
|
| public static final int | VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM
VkBlockMatchWindowCompareModeQCOM - Block match window compare modes Description
|
| public static final String | VK_QCOM_IMAGE_PROCESSING_2_EXTENSION_NAME
The extension name. |
| public static final int | VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION
The extension specification version. |
| public static final int | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM
Extends |
| public static final int | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM
Extends |
| public static final int | VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM
Extends |
| Access | Constructor and Description |
|---|---|
| private |
| VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM | back to summary |
|---|---|
| public static final int VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM VkBlockMatchWindowCompareModeQCOM - Block match window compare modes Description
See Also | |
| VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM | back to summary |
|---|---|
| public static final int VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM VkBlockMatchWindowCompareModeQCOM - Block match window compare modes Description
See Also | |
| VK_QCOM_IMAGE_PROCESSING_2_EXTENSION_NAME | back to summary |
|---|---|
| public static final String VK_QCOM_IMAGE_PROCESSING_2_EXTENSION_NAME The extension name. | |
| VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION | back to summary |
|---|---|
| public static final int VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION The extension specification version. | |
| VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM | back to summary |
|---|---|
| public static final int VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM Extends Enum values: | |
| VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM | back to summary |
|---|---|
| public static final int VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM Extends Enum values: | |
| VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM | back to summary |
|---|---|
| public static final int VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM Extends Enum values: | |
| QCOMImageProcessing2 | back to summary |
|---|---|
| private QCOMImageProcessing2() | |