1c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 2c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Copyright 2012 Francisco Jerez 3c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 4c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Permission is hereby granted, free of charge, to any person obtaining a 5c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// copy of this software and associated documentation files (the "Software"), 6c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// to deal in the Software without restriction, including without limitation 7c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// the rights to use, copy, modify, merge, publish, distribute, sublicense, 8c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// and/or sell copies of the Software, and to permit persons to whom the 9c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Software is furnished to do so, subject to the following conditions: 10c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 11c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// The above copyright notice and this permission notice shall be included in 12c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// all copies or substantial portions of the Software. 13c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 14c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// SOFTWARE. 21c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 22c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 23c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include <algorithm> 24c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 25c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/format.hpp" 26c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/memory.hpp" 27c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "pipe/p_screen.h" 28c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "pipe/p_context.h" 29c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 30c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jereznamespace clover { 31c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez static const std::map<cl_image_format, pipe_format> formats { 32c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_BGRA, CL_UNORM_INT8 }, PIPE_FORMAT_B8G8R8A8_UNORM }, 33c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_ARGB, CL_UNORM_INT8 }, PIPE_FORMAT_A8R8G8B8_UNORM }, 34c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_UNORM_SHORT_565 }, PIPE_FORMAT_B5G6R5_UNORM }, 35c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_UNORM_INT8 }, PIPE_FORMAT_L8_UNORM }, 36c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_UNORM_INT8 }, PIPE_FORMAT_A8_UNORM }, 37c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_UNORM_INT8 }, PIPE_FORMAT_I8_UNORM }, 38c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_UNORM_INT16 }, PIPE_FORMAT_L16_UNORM }, 39c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_FLOAT }, PIPE_FORMAT_R32_FLOAT }, 40c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_FLOAT }, PIPE_FORMAT_R32G32_FLOAT }, 41c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_FLOAT }, PIPE_FORMAT_R32G32B32_FLOAT }, 42c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_FLOAT }, PIPE_FORMAT_R32G32B32A32_FLOAT }, 43c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_UNORM_INT16 }, PIPE_FORMAT_R16_UNORM }, 44c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_UNORM_INT16 }, PIPE_FORMAT_R16G16_UNORM }, 45c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_UNORM_INT16 }, PIPE_FORMAT_R16G16B16_UNORM }, 46c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_UNORM_INT16 }, PIPE_FORMAT_R16G16B16A16_UNORM }, 47c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_SNORM_INT16 }, PIPE_FORMAT_R16_SNORM }, 48c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_SNORM_INT16 }, PIPE_FORMAT_R16G16_SNORM }, 49c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_SNORM_INT16 }, PIPE_FORMAT_R16G16B16_SNORM }, 50c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_SNORM_INT16 }, PIPE_FORMAT_R16G16B16A16_SNORM }, 51c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_UNORM_INT8 }, PIPE_FORMAT_R8_UNORM }, 52c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8_UNORM }, 53c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8B8_UNORM }, 54c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8B8A8_UNORM }, 55c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_SNORM_INT8 }, PIPE_FORMAT_R8_SNORM }, 56c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_SNORM_INT8 }, PIPE_FORMAT_R8G8_SNORM }, 57c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_SNORM_INT8 }, PIPE_FORMAT_R8G8B8_SNORM }, 58c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_SNORM_INT8 }, PIPE_FORMAT_R8G8B8A8_SNORM }, 59c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_HALF_FLOAT }, PIPE_FORMAT_R16_FLOAT }, 60c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_HALF_FLOAT }, PIPE_FORMAT_R16G16_FLOAT }, 61c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_HALF_FLOAT }, PIPE_FORMAT_R16G16B16_FLOAT }, 62c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_HALF_FLOAT }, PIPE_FORMAT_R16G16B16A16_FLOAT }, 63c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBx, CL_UNORM_SHORT_555 }, PIPE_FORMAT_B5G5R5X1_UNORM }, 64c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBx, CL_UNORM_INT8 }, PIPE_FORMAT_R8G8B8X8_UNORM }, 65c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_UNORM_INT16 }, PIPE_FORMAT_A16_UNORM }, 66c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_UNORM_INT16 }, PIPE_FORMAT_I16_UNORM }, 67c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_SNORM_INT8 }, PIPE_FORMAT_L8_SNORM }, 68c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_SNORM_INT8 }, PIPE_FORMAT_I8_SNORM }, 69c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_SNORM_INT16 }, PIPE_FORMAT_A16_SNORM }, 70c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_SNORM_INT16 }, PIPE_FORMAT_L16_SNORM }, 71c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_SNORM_INT16 }, PIPE_FORMAT_I16_SNORM }, 72c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_HALF_FLOAT }, PIPE_FORMAT_A16_FLOAT }, 73c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_HALF_FLOAT }, PIPE_FORMAT_L16_FLOAT }, 74c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_HALF_FLOAT }, PIPE_FORMAT_I16_FLOAT }, 75c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_FLOAT }, PIPE_FORMAT_A32_FLOAT }, 76c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_FLOAT }, PIPE_FORMAT_L32_FLOAT }, 77c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_FLOAT }, PIPE_FORMAT_I32_FLOAT }, 78c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RA, CL_UNORM_INT8 }, PIPE_FORMAT_R8A8_UNORM }, 79c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_UNSIGNED_INT8 }, PIPE_FORMAT_R8_UINT }, 80c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_UNSIGNED_INT8 }, PIPE_FORMAT_R8G8_UINT }, 81c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_UNSIGNED_INT8 }, PIPE_FORMAT_R8G8B8_UINT }, 82c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_UNSIGNED_INT8 }, PIPE_FORMAT_R8G8B8A8_UINT }, 83c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_SIGNED_INT8 }, PIPE_FORMAT_R8_SINT }, 84c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_SIGNED_INT8 }, PIPE_FORMAT_R8G8_SINT }, 85c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_SIGNED_INT8 }, PIPE_FORMAT_R8G8B8_SINT }, 86c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_SIGNED_INT8 }, PIPE_FORMAT_R8G8B8A8_SINT }, 87c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_UNSIGNED_INT16 }, PIPE_FORMAT_R16_UINT }, 88c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_UNSIGNED_INT16 }, PIPE_FORMAT_R16G16_UINT }, 89c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_UNSIGNED_INT16 }, PIPE_FORMAT_R16G16B16_UINT }, 90c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_UNSIGNED_INT16 }, PIPE_FORMAT_R16G16B16A16_UINT }, 91c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_SIGNED_INT16 }, PIPE_FORMAT_R16_SINT }, 92c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_SIGNED_INT16 }, PIPE_FORMAT_R16G16_SINT }, 93c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_SIGNED_INT16 }, PIPE_FORMAT_R16G16B16_SINT }, 94c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_SIGNED_INT16 }, PIPE_FORMAT_R16G16B16A16_SINT }, 95c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_UNSIGNED_INT32 }, PIPE_FORMAT_R32_UINT }, 96c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_UNSIGNED_INT32 }, PIPE_FORMAT_R32G32_UINT }, 97c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_UNSIGNED_INT32 }, PIPE_FORMAT_R32G32B32_UINT }, 98c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_UNSIGNED_INT32 }, PIPE_FORMAT_R32G32B32A32_UINT }, 99c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_R, CL_SIGNED_INT32 }, PIPE_FORMAT_R32_SINT }, 100c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RG, CL_SIGNED_INT32 }, PIPE_FORMAT_R32G32_SINT }, 101c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGB, CL_SIGNED_INT32 }, PIPE_FORMAT_R32G32B32_SINT }, 102c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_RGBA, CL_SIGNED_INT32 }, PIPE_FORMAT_R32G32B32A32_SINT }, 103c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_UNSIGNED_INT8 }, PIPE_FORMAT_A8_UINT }, 104c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_UNSIGNED_INT8 }, PIPE_FORMAT_I8_UINT }, 105c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_UNSIGNED_INT8 }, PIPE_FORMAT_L8_UINT }, 106c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_SIGNED_INT8 }, PIPE_FORMAT_A8_SINT }, 107c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_SIGNED_INT8 }, PIPE_FORMAT_I8_SINT }, 108c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_SIGNED_INT8 }, PIPE_FORMAT_L8_SINT }, 109c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_UNSIGNED_INT16 }, PIPE_FORMAT_A16_UINT }, 110c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_UNSIGNED_INT16 }, PIPE_FORMAT_I16_UINT }, 111c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_UNSIGNED_INT16 }, PIPE_FORMAT_L16_UINT }, 112c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_SIGNED_INT16 }, PIPE_FORMAT_A16_SINT }, 113c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_SIGNED_INT16 }, PIPE_FORMAT_I16_SINT }, 114c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_SIGNED_INT16 }, PIPE_FORMAT_L16_SINT }, 115c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_UNSIGNED_INT32 }, PIPE_FORMAT_A32_UINT }, 116c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_UNSIGNED_INT32 }, PIPE_FORMAT_I32_UINT }, 117c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_UNSIGNED_INT32 }, PIPE_FORMAT_L32_UINT }, 118c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_A, CL_SIGNED_INT32 }, PIPE_FORMAT_A32_SINT }, 119c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_INTENSITY, CL_SIGNED_INT32 }, PIPE_FORMAT_I32_SINT }, 120c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez { { CL_LUMINANCE, CL_SIGNED_INT32 }, PIPE_FORMAT_L32_SINT } 121c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez }; 122c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 123c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez pipe_texture_target 124c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez translate_target(cl_mem_object_type type) { 125c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez switch (type) { 126c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_MEM_OBJECT_BUFFER: 127c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return PIPE_BUFFER; 128c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_MEM_OBJECT_IMAGE2D: 129c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return PIPE_TEXTURE_2D; 130c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_MEM_OBJECT_IMAGE3D: 131c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return PIPE_TEXTURE_3D; 132c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez default: 133c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_VALUE); 134c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 135c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 136c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 137c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez pipe_format 138c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez translate_format(const cl_image_format &format) { 139c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez auto it = formats.find(format); 140c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 141c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (it == formats.end()) 142c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_IMAGE_FORMAT_NOT_SUPPORTED); 143c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 144c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return it->second; 145c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 146c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 147c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::set<cl_image_format> 148c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez supported_formats(cl_context ctx, cl_mem_object_type type) { 149c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::set<cl_image_format> s; 150c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez pipe_texture_target target = translate_target(type); 151c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez unsigned bindings = (PIPE_BIND_SAMPLER_VIEW | 152c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez PIPE_BIND_COMPUTE_RESOURCE | 153c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez PIPE_BIND_TRANSFER_READ | 154c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez PIPE_BIND_TRANSFER_WRITE); 155c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 156c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez for (auto f : formats) { 157c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (std::all_of(ctx->devs.begin(), ctx->devs.end(), 158c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez [=](const device *dev) { 159c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return dev->pipe->is_format_supported( 160c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->pipe, f.second, target, 1, bindings); 161c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez })) 162c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez s.insert(f.first); 163c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 164c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 165c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return s; 166c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 167c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 168