vulkaninfo.c revision e2d07a5a3810d83d0ea7ecb396d61477893b74a4
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * XGL 3320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 4320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Copyright (C) 2014 LunarG, Inc. 5320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 6320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Permission is hereby granted, free of charge, to any person obtaining a 7320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * copy of this software and associated documentation files (the "Software"), 8320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * to deal in the Software without restriction, including without limitation 9320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * and/or sell copies of the Software, and to permit persons to whom the 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Software is furnished to do so, subject to the following conditions: 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The above copyright notice and this permission notice shall be included 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in all copies or substantial portions of the Software. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 16f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DEALINGS IN THE SOFTWARE. 23f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes */ 24f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes#include <stdlib.h> 25f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes#include <stdio.h> 26f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes#include <stdbool.h> 27f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes#include <string.h> 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include <assert.h> 29f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes#include <xgl.h> 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes#define ERR(err) printf("%s:%d: failed with %s\n", \ 33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes __FILE__, __LINE__, xgl_result_string(err)); 34f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 35320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#define ERR_EXIT(err) do { ERR(err); exit(-1); } while (0) 36320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 37320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) 38320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 39320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#define MAX_GPUS 8 40320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 41320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#define MAX_QUEUE_TYPES 5 42320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 43320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonstruct app_gpu; 44320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 45320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonstruct app_dev { 46f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes struct app_gpu *gpu; /* point back to the GPU */ 47320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 48320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson XGL_DEVICE obj; 49320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 50320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 51320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson XGL_FORMAT_PROPERTIES format_props[XGL_NUM_FMT]; 52320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson}; 53320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstruct app_gpu { 55320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson uint32_t id; 56320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson XGL_PHYSICAL_GPU obj; 57320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 58320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson XGL_PHYSICAL_GPU_PROPERTIES props; 59320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson XGL_PHYSICAL_GPU_PERFORMANCE perf; 60320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 61320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson uint32_t queue_count; 62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_PHYSICAL_GPU_QUEUE_PROPERTIES *queue_props; 63320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson XGL_DEVICE_QUEUE_CREATE_INFO *queue_reqs; 64320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 65320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson XGL_PHYSICAL_GPU_MEMORY_PROPERTIES memory_props; 66320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 67320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson uint32_t extension_count; 68320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson const char **extensions; 69320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 70320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson struct app_dev dev; 71320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson}; 72320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 73320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonstatic const char *xgl_result_string(XGL_RESULT err) 74320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson{ 75320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson switch (err) { 76320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#define STR(r) case r: return #r 77320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_SUCCESS); 78320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_UNSUPPORTED); 79320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_NOT_READY); 80320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_TIMEOUT); 81320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_EVENT_SET); 82320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_EVENT_RESET); 83f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(XGL_ERROR_UNKNOWN); 84320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_UNAVAILABLE); 85320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INITIALIZATION_FAILED); 86320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_OUT_OF_MEMORY); 87320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_OUT_OF_GPU_MEMORY); 88320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_DEVICE_ALREADY_CREATED); 89320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_DEVICE_LOST); 90320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_POINTER); 91320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_VALUE); 92320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_HANDLE); 93320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_ORDINAL); 94320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_MEMORY_SIZE); 95320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_EXTENSION); 96320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_FLAGS); 97320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_ALIGNMENT); 98320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_FORMAT); 99320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_IMAGE); 100320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_DESCRIPTOR_SET_DATA); 101320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_QUEUE_TYPE); 102320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INVALID_OBJECT_TYPE); 103320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_UNSUPPORTED_SHADER_IL_VERSION); 104320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_BAD_SHADER_CODE); 105320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_BAD_PIPELINE_DATA); 106320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_TOO_MANY_MEMORY_REFERENCES); 107320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_NOT_MAPPABLE); 108320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_MEMORY_MAP_FAILED); 109320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_MEMORY_UNMAP_FAILED); 110320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INCOMPATIBLE_DEVICE); 111320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INCOMPATIBLE_DRIVER); 112320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INCOMPLETE_COMMAND_BUFFER); 113320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_BUILDING_COMMAND_BUFFER); 114320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_MEMORY_NOT_BOUND); 115320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_INCOMPATIBLE_QUEUE); 116320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(XGL_ERROR_NOT_SHAREABLE); 117320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#undef STR 118320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson default: return "UNKNOWN_RESULT"; 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 120320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 121f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 122320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonstatic const char *xgl_gpu_type_string(XGL_PHYSICAL_GPU_TYPE type) 123320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson{ 124320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson switch (type) { 125320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#define STR(r) case XGL_GPU_TYPE_ ##r: return #r 126320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(OTHER); 127320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(INTEGRATED); 128320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(DISCRETE); 129f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(VIRTUAL); 130320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#undef STR 131320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson default: return "UNKNOWN_GPU"; 132320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 133f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 134320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectstatic const char *xgl_format_string(XGL_FORMAT fmt) 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project{ 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (fmt) { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#define STR(r) case XGL_FMT_ ##r: return #r 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(UNDEFINED); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R4G4_UNORM); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R4G4_USCALED); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R4G4B4A4_UNORM); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R4G4B4A4_USCALED); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R5G6B5_UNORM); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R5G6B5_USCALED); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R5G5B5A1_UNORM); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R5G5B5A1_USCALED); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8_UNORM); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8_SNORM); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8_USCALED); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8_SSCALED); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8_UINT); 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8_SINT); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8_SRGB); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8_UNORM); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8_SNORM); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8_USCALED); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8_SSCALED); 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8_UINT); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8_SINT); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8_SRGB); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8_UNORM); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8_SNORM); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8_USCALED); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8_SSCALED); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8_UINT); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8_SINT); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8_SRGB); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8A8_UNORM); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8A8_SNORM); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8A8_USCALED); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8A8_SSCALED); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8A8_UINT); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8A8_SINT); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R8G8B8A8_SRGB); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R10G10B10A2_UNORM); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R10G10B10A2_SNORM); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R10G10B10A2_USCALED); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R10G10B10A2_SSCALED); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R10G10B10A2_UINT); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R10G10B10A2_SINT); 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16_UNORM); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16_SNORM); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16_USCALED); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16_SSCALED); 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16_UINT); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16_SINT); 188320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(R16_SFLOAT); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16_UNORM); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16_SNORM); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16_USCALED); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16_SSCALED); 193f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R16G16_UINT); 194f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R16G16_SINT); 195320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(R16G16_SFLOAT); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16B16_UNORM); 197f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R16G16B16_SNORM); 198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R16G16B16_USCALED); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16B16_SSCALED); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16B16_UINT); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16B16_SINT); 202320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(R16G16B16_SFLOAT); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16B16A16_UNORM); 204f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R16G16B16A16_SNORM); 205f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R16G16B16A16_USCALED); 206320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(R16G16B16A16_SSCALED); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R16G16B16A16_UINT); 208f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R16G16B16A16_SINT); 209320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(R16G16B16A16_SFLOAT); 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32_UINT); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32_SINT); 212320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(R32_SFLOAT); 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32G32_UINT); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32G32_SINT); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32G32_SFLOAT); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32G32B32_UINT); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32G32B32_SINT); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32G32B32_SFLOAT); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R32G32B32A32_UINT); 220f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R32G32B32A32_SINT); 221f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R32G32B32A32_SFLOAT); 222f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R64_SFLOAT); 223f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R64G64_SFLOAT); 224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R64G64B64_SFLOAT); 225f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(R64G64B64A64_SFLOAT); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R11G11B10_UFLOAT); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(R9G9B9E5_UFLOAT); 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(D16_UNORM); 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(D24_UNORM); 230f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(D32_SFLOAT); 231f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(S8_UINT); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(D16_UNORM_S8_UINT); 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(D24_UNORM_S8_UINT); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(D32_SFLOAT_S8_UINT); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC1_UNORM); 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC1_SRGB); 237f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(BC2_UNORM); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC2_SRGB); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC3_UNORM); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC3_SRGB); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC4_UNORM); 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC4_SNORM); 243f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(BC5_UNORM); 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC5_SNORM); 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC6H_UFLOAT); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC6H_SFLOAT); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC7_UNORM); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(BC7_SRGB); 249f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ETC2_R8G8B8_UNORM); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ETC2_R8G8B8A1_UNORM); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ETC2_R8G8B8A8_UNORM); 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(EAC_R11_UNORM); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(EAC_R11_SNORM); 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(EAC_R11G11_UNORM); 255f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(EAC_R11G11_SNORM); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_4x4_UNORM); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_4x4_SRGB); 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_4x5_UNORM); 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_4x5_SRGB); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_5x5_UNORM); 261f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_5x5_SRGB); 262320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(ASTC_6x5_UNORM); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_6x5_SRGB); 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_6x6_UNORM); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_6x6_SRGB); 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_8x5_UNORM); 267f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_8x5_SRGB); 268f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_8x6_UNORM); 269f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_8x6_SRGB); 270f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_8x8_UNORM); 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_8x8_SRGB); 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_10x5_UNORM); 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_10x5_SRGB); 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_10x6_UNORM); 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_10x6_SRGB); 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_10x8_UNORM); 277f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_10x8_SRGB); 278f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_10x10_UNORM); 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_10x10_SRGB); 280f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_12x10_UNORM); 281f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_12x10_SRGB); 282f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(ASTC_12x12_UNORM); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(ASTC_12x12_SRGB); 284f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B5G6R5_UNORM); 285f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B5G6R5_USCALED); 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(B8G8R8_UNORM); 287f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B8G8R8_SNORM); 288320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(B8G8R8_USCALED); 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(B8G8R8_SSCALED); 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(B8G8R8_UINT); 291f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B8G8R8_SINT); 292f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B8G8R8_SRGB); 293f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B8G8R8A8_UNORM); 294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B8G8R8A8_SNORM); 295f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B8G8R8A8_USCALED); 296320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson STR(B8G8R8A8_SSCALED); 297f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B8G8R8A8_UINT); 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(B8G8R8A8_SINT); 299f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B8G8R8A8_SRGB); 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(B10G10R10A2_UNORM); 301f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B10G10R10A2_SNORM); 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project STR(B10G10R10A2_USCALED); 303f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B10G10R10A2_SSCALED); 304f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B10G10R10A2_UINT); 305f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes STR(B10G10R10A2_SINT); 306320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson#undef STR 307320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson default: return "UNKNOWN_FORMAT"; 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 309f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectstatic void app_dev_init_formats(struct app_dev *dev) 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project{ 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project XGL_FORMAT f; 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (f = 0; f < XGL_NUM_FMT; f++) { 316f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes const XGL_FORMAT fmt = f; 317f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_RESULT err; 318f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes size_t size = sizeof(dev->format_props[f]); 319f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project err = xglGetFormatInfo(dev->obj, fmt, 321f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_INFO_TYPE_FORMAT_PROPERTIES, 322f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes &size, &dev->format_props[f]); 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (err) { 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project memset(&dev->format_props[f], 0, 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sizeof(dev->format_props[f])); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 327f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes else if (size != sizeof(dev->format_props[f])) { 328f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ERR_EXIT(XGL_ERROR_UNKNOWN); 329f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 330f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 331f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 332f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 333320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonstatic void app_dev_init(struct app_dev *dev, struct app_gpu *gpu) 334f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes{ 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project XGL_DEVICE_CREATE_INFO info = { 336f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes .sType = XGL_STRUCTURE_TYPE_DEVICE_CREATE_INFO, 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .pNext = NULL, 338f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes .queueRecordCount = 0, 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .pRequestedQueues = NULL, 340f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes .extensionCount = 0, 341f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes .ppEnabledExtensionNames = NULL, 342f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes .maxValidationLevel = XGL_VALIDATION_LEVEL_END_RANGE, 343320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson .flags = XGL_DEVICE_CREATE_VALIDATION_BIT, 344320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson }; 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project XGL_RESULT err; 346f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* request all queues */ 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project info.queueRecordCount = gpu->queue_count; 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project info.pRequestedQueues = gpu->queue_reqs; 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 351f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes /* enable all extensions */ 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project info.extensionCount = gpu->extension_count; 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project info.ppEnabledExtensionNames = gpu->extensions; 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dev->gpu = gpu; 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project err = xglCreateDevice(gpu->obj, &info, &dev->obj); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (err) 357f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ERR_EXIT(err); 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 359f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 360f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 361f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstatic void app_dev_destroy(struct app_dev *dev) 362320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson{ 363320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson xglDestroyDevice(dev->obj); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectstatic void app_gpu_init_extensions(struct app_gpu *gpu) 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project{ 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project XGL_RESULT err; 369f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes uint32_t i; 370f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static const char *known_extensions[] = { 372f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes "XGL_WSI_X11", 373f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes }; 374320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (i = 0; i < ARRAY_SIZE(known_extensions); i++) { 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project err = xglGetExtensionSupport(gpu->obj, known_extensions[i]); 377f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (!err) 378f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes gpu->extension_count++; 379f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 380f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 381f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes gpu->extensions = 382320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson malloc(sizeof(gpu->extensions[0]) * gpu->extension_count); 383f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (!gpu->extensions) 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ERR_EXIT(XGL_ERROR_OUT_OF_MEMORY); 385f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 386320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson gpu->extension_count = 0; 387f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes for (i = 0; i < ARRAY_SIZE(known_extensions); i++) { 388f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes err = xglGetExtensionSupport(gpu->obj, known_extensions[i]); 389f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (!err) 390320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson gpu->extensions[gpu->extension_count++] = known_extensions[i]; 391320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectstatic void app_gpu_init(struct app_gpu *gpu, uint32_t id, XGL_PHYSICAL_GPU obj) 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project{ 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project size_t size; 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project XGL_RESULT err; 398f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes int i; 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project memset(gpu, 0, sizeof(*gpu)); 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project gpu->id = id; 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project gpu->obj = obj; 404f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes size = sizeof(gpu->props); 405320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson err = xglGetGpuInfo(gpu->obj, 406f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_INFO_TYPE_PHYSICAL_GPU_PROPERTIES, 407f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes &size, &gpu->props); 408f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (err || size != sizeof(gpu->props)) 409f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ERR_EXIT(err); 410320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 411f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes size = sizeof(gpu->perf); 412f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes err = xglGetGpuInfo(gpu->obj, 413f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_INFO_TYPE_PHYSICAL_GPU_PERFORMANCE, 414f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes &size, &gpu->perf); 415f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (err || size != sizeof(gpu->perf)) 416f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ERR_EXIT(err); 417f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 418f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes /* get queue count */ 419f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes err = xglGetGpuInfo(gpu->obj, 420f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_INFO_TYPE_PHYSICAL_GPU_QUEUE_PROPERTIES, 421f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes &size, NULL); 422f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (err || size % sizeof(gpu->queue_props[0])) 423f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ERR_EXIT(err); 424f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes gpu->queue_count = size / sizeof(gpu->queue_props[0]); 425320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 426f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes gpu->queue_props = 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project malloc(sizeof(gpu->queue_props[0]) * gpu->queue_count); 428f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes size = sizeof(gpu->queue_props[0]) * gpu->queue_count; 429f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (!gpu->queue_props) 430f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ERR_EXIT(XGL_ERROR_OUT_OF_MEMORY); 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project err = xglGetGpuInfo(gpu->obj, 432f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_INFO_TYPE_PHYSICAL_GPU_QUEUE_PROPERTIES, 433f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes &size, gpu->queue_props); 434320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson if (err || size != sizeof(gpu->queue_props[0]) * gpu->queue_count) 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ERR_EXIT(err); 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* set up queue requests */ 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project size = sizeof(*gpu->queue_reqs) * gpu->queue_count; 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project gpu->queue_reqs = malloc(sizeof(*gpu->queue_reqs) * gpu->queue_count); 440f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (!gpu->queue_reqs) 441f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ERR_EXIT(XGL_ERROR_OUT_OF_MEMORY); 442f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes for (i = 0; i < gpu->queue_count; i++) { 443f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes gpu->queue_reqs[i].queueNodeIndex = i; 444f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes gpu->queue_reqs[i].queueCount = gpu->queue_props[i].queueCount; 445f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 446f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 447f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes size = sizeof(gpu->memory_props); 448320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson err = xglGetGpuInfo(gpu->obj, 449f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES, 450f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes &size, &gpu->memory_props); 451f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (err || size != sizeof(gpu->memory_props)) 452f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ERR_EXIT(err); 453f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 454f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_gpu_init_extensions(gpu); 455f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_dev_init(&gpu->dev, gpu); 456f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_dev_init_formats(&gpu->dev); 457f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 459320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonstatic void app_gpu_destroy(struct app_gpu *gpu) 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project{ 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project app_dev_destroy(&gpu->dev); 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project free(gpu->extensions); 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project free(gpu->queue_reqs); 464f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes free(gpu->queue_props); 465f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 466f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 467f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstatic void app_dev_dump_format_props(const struct app_dev *dev, XGL_FORMAT fmt) 468f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes{ 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const XGL_FORMAT_PROPERTIES *props = &dev->format_props[fmt]; 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project struct { 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char *name; 472f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_FLAGS flags; 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } tilings[2]; 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project uint32_t i; 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 476f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (!props->linearTilingFeatures && !props->optimalTilingFeatures) 477320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson return; 478f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 479f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes tilings[0].name = "linear"; 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tilings[0].flags = props->linearTilingFeatures; 481f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes tilings[1].name = "optimal"; 482f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes tilings[1].flags = props->optimalTilingFeatures; 483f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 484320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("FORMAT_%s\n", xgl_format_string(fmt)); 485320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson for (i = 0; i < ARRAY_SIZE(tilings); i++) { 486f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (!tilings[i].flags) 487f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes continue; 488320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\t%s tiling image =%s%s%s\n", tilings[i].name, 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (tilings[i].flags & XGL_FORMAT_IMAGE_SHADER_READ_BIT) ? " read" : "", 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (tilings[i].flags & XGL_FORMAT_IMAGE_SHADER_WRITE_BIT) ? " write" : "", 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (tilings[i].flags & XGL_FORMAT_IMAGE_COPY_BIT) ? " copy" : ""); 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\t%s tiling memory =%s\n", tilings[i].name, 494f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes (tilings[i].flags & XGL_FORMAT_MEMORY_SHADER_ACCESS_BIT) ? " access" : ""); 495f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("\t%s tiling attachment =%s%s%s%s%s\n", tilings[i].name, 496320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson (tilings[i].flags & XGL_FORMAT_COLOR_ATTACHMENT_WRITE_BIT) ? " color" : "", 497f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes (tilings[i].flags & XGL_FORMAT_COLOR_ATTACHMENT_BLEND_BIT) ? " blend" : "", 498f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes (tilings[i].flags & XGL_FORMAT_DEPTH_ATTACHMENT_BIT) ? " depth" : "", 499f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes (tilings[i].flags & XGL_FORMAT_STENCIL_ATTACHMENT_BIT) ? " stencil" : "", 500f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes (tilings[i].flags & XGL_FORMAT_MSAA_ATTACHMENT_BIT) ? " msaa" : ""); 501320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\t%s tiling conversion = %u\n", tilings[i].name, 502f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes (bool) (tilings[i].flags & XGL_FORMAT_CONVERSION_BIT)); 503320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 504f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 505f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 506f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 507320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonstatic void 508f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesapp_dev_dump(const struct app_dev *dev) 509f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes{ 510f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_FORMAT fmt; 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (fmt = 0; fmt < XGL_NUM_FMT; fmt++) { 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project app_dev_dump_format_props(dev, fmt); 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 516f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 517f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstatic void app_gpu_dump_multi_compat(const struct app_gpu *gpu, const struct app_gpu *other, 518320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson const XGL_GPU_COMPATIBILITY_INFO *info) 519f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes{ 520f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("XGL_GPU_COMPATIBILITY_INFO[GPU%d]\n", other->id); 521f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 522f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes#define TEST(info, b) printf(#b " = %u\n", (bool) (info->compatibilityFlags & XGL_GPU_COMPAT_ ##b## _BIT)) 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TEST(info, ASIC_FEATURES); 524f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes TEST(info, IQ_MATCH); 525320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson TEST(info, PEER_TRANSFER); 526f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes TEST(info, SHARED_MEMORY); 527f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes TEST(info, SHARED_SYNC); 528f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes TEST(info, SHARED_GPU0_DISPLAY); 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TEST(info, SHARED_GPU1_DISPLAY); 530f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes#undef TEST 531f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 532f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectstatic void app_gpu_multi_compat(struct app_gpu *gpus, uint32_t gpu_count) 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project{ 535f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_RESULT err; 536f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes uint32_t i, j; 537320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (i = 0; i < gpu_count; i++) { 539f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes for (j = 0; j < gpu_count; j++) { 540f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_GPU_COMPATIBILITY_INFO info; 541f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 542f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (i == j) 543320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson continue; 544f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 545f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes err = xglGetMultiGpuCompatibility(gpus[i].obj, 546320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson gpus[j].obj, &info); 547320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson if (err) 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ERR_EXIT(err); 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project app_gpu_dump_multi_compat(&gpus[i], &gpus[j], &info); 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 555f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstatic void app_gpu_dump_props(const struct app_gpu *gpu) 556f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes{ 557f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes const XGL_PHYSICAL_GPU_PROPERTIES *props = &gpu->props; 558320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("XGL_PHYSICAL_GPU_PROPERTIES\n"); 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tapiVersion = %u\n", props->apiVersion); 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tdriverVersion = %u\n", props->driverVersion); 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tvendorId = 0x%04x\n", props->vendorId); 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tdeviceId = 0x%04x\n", props->deviceId); 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tgpuType = %s\n", xgl_gpu_type_string(props->gpuType)); 565f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("\tgpuName = %s\n", props->gpuName); 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tmaxMemRefsPerSubmission = %u\n", props->maxMemRefsPerSubmission); 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tmaxInlineMemoryUpdateSize = %zu\n", props->maxInlineMemoryUpdateSize); 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tmaxBoundDescriptorSets = %u\n", props->maxBoundDescriptorSets); 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\tmaxThreadGroupSize = %u\n", props->maxThreadGroupSize); 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project printf("\ttimestampFrequency = %lu\n", props->timestampFrequency); 571320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tmultiColorAttachmentClears = %u\n", props->multiColorAttachmentClears); 572f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 573f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 574f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstatic void app_gpu_dump_perf(const struct app_gpu *gpu) 575320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson{ 576f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes const XGL_PHYSICAL_GPU_PERFORMANCE *perf = &gpu->perf; 577f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 578f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("XGL_PHYSICAL_GPU_PERFORMANCE\n"); 579320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tmaxGpuClock = %f\n", perf->maxGpuClock); 580320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\taluPerClock = %f\n", perf->aluPerClock); 581320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\ttexPerClock = %f\n", perf->texPerClock); 582320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tprimsPerClock = %f\n", perf->primsPerClock); 583320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tpixelsPerClock = %f\n", perf->pixelsPerClock); 584320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 585320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 586f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstatic void app_gpu_dump_extensions(const struct app_gpu *gpu) 587320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson{ 588320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson int i; 589320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("Extensions"); 590320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tcount = %d\n", gpu->extension_count); 591320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\t"); 592320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson for (i=0; i< gpu->extension_count; i++) { 593320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson if (i>0) 594320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf(", "); // separator between extension names 595320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("%s", gpu->extensions[i]); 596320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 597320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\n"); 598320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 599f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 600320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonstatic void app_gpu_dump_queue_props(const struct app_gpu *gpu, uint32_t id) 601320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson{ 602320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson const XGL_PHYSICAL_GPU_QUEUE_PROPERTIES *props = &gpu->queue_props[id]; 603320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 604f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("XGL_PHYSICAL_GPU_QUEUE_PROPERTIES[%d]\n", id); 605320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tqueueFlags = %c%c%c%c\n", 606320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson (props->queueFlags & XGL_QUEUE_GRAPHICS_BIT) ? 'G' : '.', 607320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson (props->queueFlags & XGL_QUEUE_COMPUTE_BIT) ? 'C' : '.', 608320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson (props->queueFlags & XGL_QUEUE_DMA_BIT) ? 'D' : '.', 609f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes (props->queueFlags & XGL_QUEUE_EXTENDED_BIT) ? 'X' : '.'); 610320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tqueueCount = %u\n", props->queueCount); 611320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tmaxAtomicCounters = %u\n", props->maxAtomicCounters); 612320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tsupportsTimestamps = %u\n", props->supportsTimestamps); 613320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 614320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 615f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstatic void app_gpu_dump_memory_props(const struct app_gpu *gpu) 616f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes{ 617f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes const XGL_PHYSICAL_GPU_MEMORY_PROPERTIES *props = &gpu->memory_props; 618320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 619320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("XGL_PHYSICAL_GPU_MEMORY_PROPERTIES\n"); 620f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("\tsupportsMigration = %u\n", props->supportsMigration); 621320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\tsupportsPinning = %u\n", props->supportsPinning); 622320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 623f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 624f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesstatic void app_gpu_dump(const struct app_gpu *gpu) 625320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson{ 626320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson uint32_t i; 627320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 628320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("GPU%u\n", gpu->id); 629320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson app_gpu_dump_props(gpu); 630320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\n"); 631320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson app_gpu_dump_extensions(gpu); 632f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("\n"); 633f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_gpu_dump_perf(gpu); 634f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("\n"); 635f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes for (i = 0; i < gpu->queue_count; i++) { 636f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_gpu_dump_queue_props(gpu, i); 637f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("\n"); 638f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 639f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_gpu_dump_memory_props(gpu); 640f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes printf("\n"); 641f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_dev_dump(&gpu->dev); 642f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes} 643f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 644f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesint main(int argc, char **argv) 645f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes{ 646f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes static const XGL_APPLICATION_INFO app_info = { 647320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson .sType = XGL_STRUCTURE_TYPE_APPLICATION_INFO, 648320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson .pNext = NULL, 649320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson .pAppName = "xglinfo", 650320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson .appVersion = 1, 651320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson .pEngineName = "xglinfo", 652320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson .engineVersion = 1, 653320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson .apiVersion = XGL_MAKE_VERSION(0, 22, 0), 654f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes }; 655320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson struct app_gpu gpus[MAX_GPUS]; 656f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_PHYSICAL_GPU objs[MAX_GPUS]; 657f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes uint32_t gpu_count, i; 658f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes XGL_RESULT err; 659320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 660320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson err = xglInitAndEnumerateGpus(&app_info, NULL, 661320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson MAX_GPUS, &gpu_count, objs); 662f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (err) 663320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson ERR_EXIT(err); 664320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 665320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson for (i = 0; i < gpu_count; i++) { 666320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson app_gpu_init(&gpus[i], i, objs[i]); 667f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_gpu_dump(&gpus[i]); 668320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson printf("\n\n"); 669320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 670320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 671320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson app_gpu_multi_compat(gpus, gpu_count); 672320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 673f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes for (i = 0; i < gpu_count; i++) 674f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes app_gpu_destroy(&gpus[i]); 675320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 676320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson xglInitAndEnumerateGpus(&app_info, NULL, 0, &gpu_count, NULL); 677320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 678320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson return 0; 679320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 680320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson