Home | History | Annotate | Download | only in ycbcr

Lines Matching refs:vk

61 typedef de::SharedPtr<vk::Allocation> AllocationSp;
65 ImageConfig (vk::VkFormat format_,
66 vk::VkImageTiling tiling_,
76 vk::VkFormat format;
77 vk::VkImageTiling tiling;
102 const vk::VkFormatProperties properties (vk::getPhysicalDeviceFormatProperties(context.getInstanceInterface(), context.getPhysicalDevice(), config.src.format));
103 const vk::VkFormatFeatureFlags features (config.src.tiling == vk::VK_IMAGE_TILING_OPTIMAL
107 if ((features & vk::VK_FORMAT_FEATURE_TRANSFER_SRC_BIT) == 0
108 && (features & vk::VK_FORMAT_FEATURE_TRANSFER_DST_BIT) == 0)
113 if (config.src.disjoint && ((features & vk::VK_FORMAT_FEATURE_DISJOINT_BIT) == 0))
116 catch (const vk::Error& err)
118 if (err.getError() == vk::VK_ERROR_FORMAT_NOT_SUPPORTED)
126 const vk::VkFormatProperties properties (vk::getPhysicalDeviceFormatProperties(context.getInstanceInterface(), context.getPhysicalDevice(), config.dst.format));
127 const vk::VkFormatFeatureFlags features (config.dst.tiling == vk::VK_IMAGE_TILING_OPTIMAL
131 if ((features & vk::VK_FORMAT_FEATURE_TRANSFER_SRC_BIT) == 0
132 && (features & vk::VK_FORMAT_FEATURE_TRANSFER_DST_BIT) == 0)
137 if (config.dst.disjoint && ((features & vk::VK_FORMAT_FEATURE_DISJOINT_BIT) == 0))
140 catch (const vk::Error& err)
142 if (err.getError() == vk::VK_ERROR_FORMAT_NOT_SUPPORTED)
149 vk::Move<vk::VkImage> createImage (const vk::DeviceInterface& vkd,
150 vk::VkDevice device,
151 vk::VkFormat format,
154 vk::VkImageTiling tiling)
156 const vk::VkImageCreateInfo createInfo =
158 vk::VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
160 disjoint ? (vk::VkImageCreateFlags)vk::VK_IMAGE_CREATE_DISJOINT_BIT : (vk::VkImageCreateFlags)0u,
162 vk::VK_IMAGE_TYPE_2D,
164 vk::makeExtent3D(size.x(), size.y(), 1u),
167 vk::VK_SAMPLE_COUNT_1_BIT,
169 vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT | vk::VK_IMAGE_USAGE_TRANSFER_DST_BIT,
170 vk::VK_SHARING_MODE_EXCLUSIVE,
173 vk::VK_IMAGE_LAYOUT_UNDEFINED,
176 return vk::createImage(vkd, device, &createInfo);
179 vk::VkFormat getPlaneCompatibleFormat (vk::VkFormat format, deUint32 planeNdx)
185 case vk::VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
186 return vk::VK_FORMAT_R8_UNORM;
188 case vk::VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
193 return vk::VK_FORMAT_R8_UNORM;
195 return vk::VK_FORMAT_R8G8_UNORM;
198 case vk::VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
199 return vk::VK_FORMAT_R8_UNORM;
201 case vk::VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
206 return vk::VK_FORMAT_R8_UNORM;
208 return vk::VK_FORMAT_R8G8_UNORM;
211 case vk::VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
212 return vk::VK_FORMAT_R8_UNORM;
214 case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
215 return vk::VK_FORMAT_R10X6_UNORM_PACK16;
217 case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
222 return vk::VK_FORMAT_R10X6_UNORM_PACK16;
224 return vk::VK_FORMAT_R10X6G10X6_UNORM_2PACK16;
227 case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
228 return vk::VK_FORMAT_R10X6_UNORM_PACK16;
230 case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
235 return vk::VK_FORMAT_R10X6_UNORM_PACK16;
237 return vk::VK_FORMAT_R10X6G10X6_UNORM_2PACK16;
240 case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
241 return vk::VK_FORMAT_R10X6_UNORM_PACK16;
243 case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
244 return vk::VK_FORMAT_R12X4_UNORM_PACK16;
246 case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
251 return vk::VK_FORMAT_R12X4_UNORM_PACK16;
253 return vk::VK_FORMAT_R12X4G12X4_UNORM_2PACK16;
256 case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
257 return vk::VK_FORMAT_R12X4_UNORM_PACK16;
259 case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
264 return vk::VK_FORMAT_R12X4_UNORM_PACK16;
266 return vk::VK_FORMAT_R12X4G12X4_UNORM_2PACK16;
269 case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
270 return vk::VK_FORMAT_R12X4_UNORM_PACK16;
272 case vk::VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
273 return vk::VK_FORMAT_R16_UNORM;
275 case vk::VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
280 return vk::VK_FORMAT_R16_UNORM;
282 return vk::VK_FORMAT_R16G16_UNORM;
285 case vk::VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
286 return vk::VK_FORMAT_R16_UNORM;
288 case vk::VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
293 return vk::VK_FORMAT_R16_UNORM;
295 return vk::VK_FORMAT_R16G16_UNORM;
298 case vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
299 return vk::VK_FORMAT_R16_UNORM;
307 bool isCompatible (vk::VkFormat srcFormat,
308 vk::VkFormat dstFormat)
314 const vk::VkFormat class8Bit[] =
316 vk::VK_FORMAT_R4G4_UNORM_PACK8,
317 vk::VK_FORMAT_R8_UNORM,
318 vk::VK_FORMAT_R8_SNORM,
319 vk::VK_FORMAT_R8_USCALED,
320 vk::VK_FORMAT_R8_SSCALED,
321 vk::VK_FORMAT_R8_UINT,
322 vk::VK_FORMAT_R8_SINT,
323 vk::VK_FORMAT_R8_SRGB
325 const vk::VkFormat class16Bit[] =
327 vk::VK_FORMAT_R4G4B4A4_UNORM_PACK16,
328 vk::VK_FORMAT_B4G4R4A4_UNORM_PACK16,
329 vk::VK_FORMAT_R5G6B5_UNORM_PACK16,
330 vk::VK_FORMAT_B5G6R5_UNORM_PACK16,
331 vk::VK_FORMAT_R5G5B5A1_UNORM_PACK16,
332 vk::VK_FORMAT_B5G5R5A1_UNORM_PACK16,
333 vk::VK_FORMAT_A1R5G5B5_UNORM_PACK16,
334 vk::VK_FORMAT_R8G8_UNORM,
335 vk::VK_FORMAT_R8G8_SNORM,
336 vk::VK_FORMAT_R8G8_USCALED,
337 vk::VK_FORMAT_R8G8_SSCALED,
338 vk::VK_FORMAT_R8G8_UINT,
339 vk::VK_FORMAT_R8G8_SINT,
340 vk::VK_FORMAT_R8G8_SRGB,
341 vk::VK_FORMAT_R16_UNORM,
342 vk::VK_FORMAT_R16_SNORM,
343 vk::VK_FORMAT_R16_USCALED,
344 vk::VK_FORMAT_R16_SSCALED,
345 vk::VK_FORMAT_R16_UINT,
346 vk::VK_FORMAT_R16_SINT,
347 vk::VK_FORMAT_R16_SFLOAT,
348 vk::VK_FORMAT_R10X6_UNORM_PACK16,
349 vk::VK_FORMAT_R12X4_UNORM_PACK16
351 const vk::VkFormat class24Bit[] =
353 vk::VK_FORMAT_R8G8B8_UNORM,
354 vk::VK_FORMAT_R8G8B8_SNORM,
355 vk::VK_FORMAT_R8G8B8_USCALED,
356 vk::VK_FORMAT_R8G8B8_SSCALED,
357 vk::VK_FORMAT_R8G8B8_UINT,
358 vk::VK_FORMAT_R8G8B8_SINT,
359 vk::VK_FORMAT_R8G8B8_SRGB,
360 vk::VK_FORMAT_B8G8R8_UNORM,
361 vk::VK_FORMAT_B8G8R8_SNORM,
362 vk::VK_FORMAT_B8G8R8_USCALED,
363 vk::VK_FORMAT_B8G8R8_SSCALED,
364 vk::VK_FORMAT_B8G8R8_UINT,
365 vk::VK_FORMAT_B8G8R8_SINT,
366 vk::VK_FORMAT_B8G8R8_SRGB
368 const vk::VkFormat class32Bit[] =
370 vk::VK_FORMAT_R8G8B8A8_UNORM,
371 vk::VK_FORMAT_R8G8B8A8_SNORM,
372 vk::VK_FORMAT_R8G8B8A8_USCALED,
373 vk::VK_FORMAT_R8G8B8A8_SSCALED,
374 vk::VK_FORMAT_R8G8B8A8_UINT,
375 vk::VK_FORMAT_R8G8B8A8_SINT,
376 vk::VK_FORMAT_R8G8B8A8_SRGB,
377 vk::VK_FORMAT_B8G8R8A8_UNORM,
378 vk::VK_FORMAT_B8G8R8A8_SNORM,
379 vk::VK_FORMAT_B8G8R8A8_USCALED,
380 vk::VK_FORMAT_B8G8R8A8_SSCALED,
381 vk::VK_FORMAT_B8G8R8A8_UINT,
382 vk::VK_FORMAT_B8G8R8A8_SINT,
383 vk::VK_FORMAT_B8G8R8A8_SRGB,
384 vk::VK_FORMAT_A8B8G8R8_UNORM_PACK32,
385 vk::VK_FORMAT_A8B8G8R8_SNORM_PACK32,
386 vk::VK_FORMAT_A8B8G8R8_USCALED_PACK32,
387 vk::VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
388 vk::VK_FORMAT_A8B8G8R8_UINT_PACK32,
389 vk::VK_FORMAT_A8B8G8R8_SINT_PACK32,
390 vk::VK_FORMAT_A8B8G8R8_SRGB_PACK32,
391 vk::VK_FORMAT_A2R10G10B10_UNORM_PACK32,
392 vk::VK_FORMAT_A2R10G10B10_SNORM_PACK32,
393 vk::VK_FORMAT_A2R10G10B10_USCALED_PACK32,
394 vk::VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
395 vk::VK_FORMAT_A2R10G10B10_UINT_PACK32,
396 vk::VK_FORMAT_A2R10G10B10_SINT_PACK32,
397 vk::VK_FORMAT_A2B10G10R10_UNORM_PACK32,
398 vk::VK_FORMAT_A2B10G10R10_SNORM_PACK32,
399 vk::VK_FORMAT_A2B10G10R10_USCALED_PACK32,
400 vk::VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
401 vk::VK_FORMAT_A2B10G10R10_UINT_PACK32,
402 vk::VK_FORMAT_A2B10G10R10_SINT_PACK32,
403 vk::VK_FORMAT_R16G16_UNORM,
404 vk::VK_FORMAT_R16G16_SNORM,
405 vk::VK_FORMAT_R16G16_USCALED,
406 vk::VK_FORMAT_R16G16_SSCALED,
407 vk::VK_FORMAT_R16G16_UINT,
408 vk::VK_FORMAT_R16G16_SINT,
409 vk::VK_FORMAT_R16G16_SFLOAT,
410 vk::VK_FORMAT_R32_UINT,
411 vk::VK_FORMAT_R32_SINT,
412 vk::VK_FORMAT_R32_SFLOAT,
413 vk::VK_FORMAT_B10G11R11_UFLOAT_PACK32,
414 vk::VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
415 vk::VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
416 vk::VK_FORMAT_R12X4G12X4_UNORM_2PACK16
418 const vk::VkFormat class48Bit[] =
420 vk::VK_FORMAT_R16G16B16_UNORM,
421 vk::VK_FORMAT_R16G16B16_SNORM,
422 vk::VK_FORMAT_R16G16B16_USCALED,
423 vk::VK_FORMAT_R16G16B16_SSCALED,
424 vk::VK_FORMAT_R16G16B16_UINT,
425 vk::VK_FORMAT_R16G16B16_SINT,
426 vk::VK_FORMAT_R16G16B16_SFLOAT
428 const vk::VkFormat class64Bit[] =
430 vk::VK_FORMAT_R16G16B16A16_UNORM,
431 vk::VK_FORMAT_R16G16B16A16_SNORM,
432 vk::VK_FORMAT_R16G16B16A16_USCALED,
433 vk::VK_FORMAT_R16G16B16A16_SSCALED,
434 vk::VK_FORMAT_R16G16B16A16_UINT,
435 vk::VK_FORMAT_R16G16B16A16_SINT,
436 vk::VK_FORMAT_R16G16B16A16_SFLOAT,
437 vk::VK_FORMAT_R32G32_UINT,
438 vk::VK_FORMAT_R32G32_SINT,
439 vk::VK_FORMAT_R32G32_SFLOAT,
440 vk::VK_FORMAT_R64_UINT,
441 vk::VK_FORMAT_R64_SINT,
442 vk::VK_FORMAT_R64_SFLOAT
444 const vk::VkFormat class96Bit[] =
446 vk::VK_FORMAT_R32G32B32_UINT,
447 vk::VK_FORMAT_R32G32B32_SINT,
448 vk::VK_FORMAT_R32G32B32_SFLOAT
450 const vk::VkFormat class128Bit[] =
452 vk::VK_FORMAT_R32G32B32A32_UINT,
453 vk::VK_FORMAT_R32G32B32A32_SINT,
454 vk::VK_FORMAT_R32G32B32A32_SFLOAT,
455 vk::VK_FORMAT_R64G64_UINT,
456 vk::VK_FORMAT_R64G64_SINT,
457 vk::VK_FORMAT_R64G64_SFLOAT
459 const vk::VkFormat class192Bit[] =
461 vk::VK_FORMAT_R64G64B64_UINT,
462 vk::VK_FORMAT_R64G64B64_SINT,
463 vk::VK_FORMAT_R64G64B64_SFLOAT
465 const vk::VkFormat class256Bit[] =
467 vk::VK_FORMAT_R64G64B64A64_UINT,
468 vk::VK_FORMAT_R64G64B64A64_SINT,
469 vk::VK_FORMAT_R64G64B64A64_SFLOAT
516 UVec2 getBlockSize (vk::VkFormat format)
520 case vk::VK_FORMAT_G8B8G8R8_422_UNORM:
521 case vk::VK_FORMAT_B8G8R8G8_422_UNORM:
522 case vk::VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
523 case vk::VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
524 case vk::VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
525 case vk::VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
526 case vk::VK_FORMAT_G16B16G16R16_422_UNORM:
527 case vk::VK_FORMAT_B16G16R16G16_422_UNORM:
535 deUint32 getBlockByteSize (vk::VkFormat format)
539 case vk::VK_FORMAT_B8G8R8G8_422_UNORM:
540 case vk::VK_FORMAT_G8B8G8R8_422_UNORM:
543 case vk::VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
544 case vk::VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
545 case vk::VK_FORMAT_B16G16R16G16_422_UNORM:
546 case vk::VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
547 case vk::VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
548 case vk::VK_FORMAT_G16B16G16R16_422_UNORM:
549 case vk::VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:
550 case vk::VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
551 case vk::VK_FORMAT_R16G16B16A16_UNORM:
554 case vk::VK_FORMAT_R10X6_UNORM_PACK16:
555 case vk::VK_FORMAT_R12X4_UNORM_PACK16:
558 case vk::VK_FORMAT_R10X6G10X6_UNORM_2PACK16:
559 case vk::VK_FORMAT_R12X4G12X4_UNORM_2PACK16:
562 case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
563 case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
566 case vk
567 case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
568 case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
569 case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
570 case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
571 case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
572 case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
573 case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
574 case vk::VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
575 case vk::VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
576 case vk::VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
577 case vk::VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
578 case vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
579 case vk::VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
580 case vk::VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
581 case vk::VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
582 case vk::VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
583 case vk::VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
588 return (deUint32)vk::mapVkFormat(format).getPixelSize();
592 UVec2 getPlaneSize (const vk::PlanarFormatDescription& info,
616 vk::VkFormat srcFormat,
618 vk::VkFormat dstFormat,
620 vector<vk::VkImageCopy>* copies)
623 const vk::PlanarFormatDescription srcPlaneInfo (vk::getPlanarFormatDescription(srcFormat));
624 const vk::PlanarFormatDescription dstPlaneInfo (vk::getPlanarFormatDescription(dstFormat));
630 const vk::VkFormat srcPlaneFormat (getPlaneCompatibleFormat(srcFormat, srcPlaneNdx));
631 const vk::VkFormat dstPlaneFormat (getPlaneCompatibleFormat(dstFormat, dstPlaneNdx));
647 const vk::VkFormat srcPlaneFormat (getPlaneCompatibleFormat(srcFormat, srcPlaneNdx));
653 const vk::VkFormat dstPlaneFormat (getPlaneCompatibleFormat(dstFormat, dstPlaneNdx));
662 const vk::VkImageCopy copy =
666 static_cast<vk::VkImageAspectFlags>(srcPlaneInfo.numPlanes > 1 ? vk::getPlaneAspect(srcPlaneNdx) : vk::VK_IMAGE_ASPECT_COLOR_BIT),
678 static_cast<vk::VkImageAspectFlags>(dstPlaneInfo.numPlanes > 1 ? vk::getPlaneAspect(dstPlaneNdx) : vk::VK_IMAGE_ASPECT_COLOR_BIT),
726 const vector<vk::VkImageCopy>& copies)
756 vector<vk::VkImageCopy> copies;
768 const vk::DeviceInterface& vkd (context.getDeviceInterface());
769 const vk::VkDevice device (context.getDevice());
771 const vk::Unique<vk::VkImage> srcImage (createImage(vkd, device, config.src.format, config.src.size, config.src.disjoint, config.src.tiling));
772 const vk::MemoryRequirement srcMemoryRequirement (config.src.tiling == vk::VK_IMAGE_TILING_OPTIMAL
773 ? vk::MemoryRequirement::Any
774 : vk::MemoryRequirement::HostVisible);
775 const vk::VkImageCreateFlags srcCreateFlags (config.src.disjoint ? vk::VK_IMAGE_CREATE_DISJOINT_BIT : (vk::VkImageCreateFlagBits)0u);
778 const vk::Unique<vk::VkImage> dstImage (createImage(vkd, device, config.dst.format, config.dst.size, config.dst.disjoint, config.dst.tiling));
779 const vk::MemoryRequirement dstMemoryRequirement (config.dst.tiling == vk::VK_IMAGE_TILING_OPTIMAL
780 ? vk::MemoryRequirement::Any
781 : vk::MemoryRequirement::HostVisible);
782 const vk::VkImageCreateFlags dstCreateFlags (config.dst.disjoint ? vk::VK_IMAGE_CREATE_DISJOINT_BIT : (vk::VkImageCreateFlagBits)0u);
785 if (config.src.tiling == vk::VK_IMAGE_TILING_OPTIMAL)
786 uploadImage(vkd, device, context.getUniversalQueueFamilyIndex(), context.getDefaultAllocator(), *srcImage, srcData, vk::VK_ACCESS_TRANSFER_READ_BIT, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
788 fillImageMemory(vkd, device, context.getUniversalQueueFamilyIndex(), *srcImage, srcImageMemory, srcData, vk::VK_ACCESS_TRANSFER_READ_BIT, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
790 if (config.dst.tiling == vk::VK_IMAGE_TILING_OPTIMAL)
791 uploadImage(vkd, device, context.getUniversalQueueFamilyIndex(), context.getDefaultAllocator(), *dstImage, dstData, vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
793 fillImageMemory(vkd, device, context.getUniversalQueueFamilyIndex(), *dstImage, dstImageMemory, dstData, vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
797 const vk::VkQueue queue (context.getUniversalQueue());
798 const vk::Unique<vk::VkCommandPool> cmdPool (createCommandPool(vkd, device, (vk::VkCommandPoolCreateFlags)0, queueFamilyNdx));
799 const vk::Unique<vk::VkCommandBuffer> cmdBuffer (allocateCommandBuffer(vkd, device, *cmdPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY));
801 const vk::VkCommandBufferBeginInfo beginInfo =
803 vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
805 (vk::VkCommandBufferUsageFlags)vk::VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
806 (const vk::VkCommandBufferInheritanceInfo*)DE_NULL
814 vkd.cmdCopyImage(*cmdBuffer, *srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &copies[i]);
816 const vk::VkImageMemoryBarrier preCopyBarrier =
818 vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
820 vk::VK_ACCESS_TRANSFER_WRITE_BIT,
821 vk::VK_ACCESS_TRANSFER_WRITE_BIT,
822 vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
823 vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
827 { vk::VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }
831 (vk::VkPipelineStageFlags)vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
832 (vk::VkPipelineStageFlags)vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
833 (vk::VkDependencyFlags)0u,
835 (const vk::VkMemoryBarrier*)DE_NULL,
837 (const vk::VkBufferMemoryBarrier*)DE_NULL,
845 const vk::Unique<vk::VkFence> fence (createFence(vkd, device));
846 const vk::VkSubmitInfo submitInfo =
848 vk::VK_STRUCTURE_TYPE_SUBMIT_INFO,
851 (const vk::VkSemaphore*)DE_NULL,
852 (const vk::VkPipelineStageFlags*)DE_NULL,
856 (const vk::VkSemaphore*)DE_NULL,
864 if (config.dst.tiling == vk::VK_IMAGE_TILING_OPTIMAL)
865 downloadImage(vkd, device, context.getUniversalQueueFamilyIndex(), context.getDefaultAllocator(), *dstImage, &result, vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
867 readImageMemory(vkd, device, context.getUniversalQueueFamilyIndex(), *dstImage, dstImageMemory, &result, vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
877 const vk::VkImageCopy& copy (copies[copyNdx]);
879 const deUint32 srcPlaneNdx (copy.srcSubresource.aspectMask != vk::VK_IMAGE_ASPECT_COLOR_BIT
880 ? vk::getAspectPlaneNdx((vk::VkImageAspectFlagBits)copy.srcSubresource.aspectMask)
884 const vk::VkFormat srcPlaneFormat (getPlaneCompatibleFormat(config.src.format, srcPlaneNdx));
893 const deUint32 dstPlaneNdx (copy.dstSubresource.aspectMask != vk::VK_IMAGE_ASPECT_COLOR_BIT
894 ? vk::getAspectPlaneNdx((vk::VkImageAspectFlagBits)copy.dstSubresource.aspectMask)
898 const vk::VkFormat dstPlaneFormat (getPlaneCompatibleFormat(config.dst.format, dstPlaneNdx));
949 bool isCopyCompatible (vk::VkFormat srcFormat, vk::VkFormat dstFormat)
953 const vk::PlanarFormatDescription srcPlaneInfo (vk::getPlanarFormatDescription(srcFormat));
954 const vk::PlanarFormatDescription dstPlaneInfo (vk::getPlanarFormatDescription(dstFormat));
960 const vk::VkFormat srcPlaneFormat (getPlaneCompatibleFormat(srcFormat, srcPlaneNdx));
961 const vk::VkFormat dstPlaneFormat (getPlaneCompatibleFormat(dstFormat, dstPlaneNdx));
970 const vk::PlanarFormatDescription srcPlaneInfo (vk::getPlanarFormatDescription(srcFormat));
974 const vk::VkFormat srcPlaneFormat (getPlaneCompatibleFormat(srcFormat, srcPlaneNdx));
982 const vk::PlanarFormatDescription dstPlaneInfo (vk::getPlanarFormatDescription(dstFormat));
986 const vk::VkFormat dstPlaneFormat (getPlaneCompatibleFormat(dstFormat, dstPlaneNdx));
1000 const vk::VkFormat ycbcrFormats[] =
1002 vk::VK_FORMAT_R4G4_UNORM_PACK8,
1003 vk::VK_FORMAT_R4G4B4A4_UNORM_PACK16,
1004 vk::VK_FORMAT_B4G4R4A4_UNORM_PACK16,
1005 vk::VK_FORMAT_R5G6B5_UNORM_PACK16,
1006 vk::VK_FORMAT_B5G6R5_UNORM_PACK16,
1007 vk::VK_FORMAT_R5G5B5A1_UNORM_PACK16,
1008 vk::VK_FORMAT_B5G5R5A1_UNORM_PACK16,
1009 vk::VK_FORMAT_A1R5G5B5_UNORM_PACK16,
1010 vk::VK_FORMAT_R8_UNORM,
1011 vk::VK_FORMAT_R8G8_UNORM,
1012 vk::VK_FORMAT_R8G8B8_UNORM,
1013 vk::VK_FORMAT_B8G8R8_UNORM,
1014 vk::VK_FORMAT_R8G8B8A8_UNORM,
1015 vk::VK_FORMAT_B8G8R8A8_UNORM,
1016 vk::VK_FORMAT_A8B8G8R8_UNORM_PACK32,
1017 vk::VK_FORMAT_A2R10G10B10_UNORM_PACK32,
1018 vk::VK_FORMAT_R16_UNORM,
1019 vk::VK_FORMAT_R16G16_UNORM,
1020 vk::VK_FORMAT_R16G16B16_UNORM,
1021 vk::VK_FORMAT_R16G16B16A16_UNORM,
1022 vk::VK_FORMAT_B10G11R11_UFLOAT_PACK32,
1023 vk::VK_FORMAT_G8B8G8R8_422_UNORM,
1024 vk::VK_FORMAT_B8G8R8G8_422_UNORM,
1025 vk::VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
1026 vk::VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
1027 vk::VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
1028 vk::VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
1029 vk::VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
1030 vk::VK_FORMAT_R10X6_UNORM_PACK16,
1031 vk::VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
1032 vk::VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
1033 vk::VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
1034 vk::VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
1035 vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
1036 vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
1037 vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
1038 vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
1039 vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
1040 vk::VK_FORMAT_R12X4_UNORM_PACK16,
1041 vk::VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
1042 vk::VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
1043 vk::VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
1044 vk::VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
1045 vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
1046 vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
1047 vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
1048 vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
1049 vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
1050 vk::VK_FORMAT_G16B16G16R16_422_UNORM,
1051 vk::VK_FORMAT_B16G16R16G16_422_UNORM,
1052 vk::VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
1053 vk::VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
1054 vk::VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
1055 vk::VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
1056 vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
1061 vk::VkImageTiling value;
1064 { "linear", vk::VK_IMAGE_TILING_LINEAR },
1065 { "optimal", vk::VK_IMAGE_TILING_OPTIMAL }
1071 const vk::VkFormat srcFormat (ycbcrFormats[srcFormatNdx]);
1078 const vk::VkFormat dstFormat (ycbcrFormats[dstFormatNdx]);
1082 if ((!vk::isYCbCrFormat(srcFormat) && !vk::isYCbCrFormat(dstFormat))
1090 const vk::VkImageTiling srcTiling = imageTilings[srcTilingNdx].value;
1095 const vk::VkImageTiling dstTiling = imageTilings[dstTilingNdx].value;