[vulkan] Switch to using vkGetPhysicalDeviceProperties2

Necessary for getting VkPhysicalDeviceMultiviewProperties (and others,
but not at this time).
This commit is contained in:
Bill Currie 2022-05-29 22:13:36 +09:00
parent e5932d1f92
commit f04108ae3e
8 changed files with 23 additions and 12 deletions

View file

@ -22,7 +22,7 @@ GLOBAL_LEVEL_VULKAN_FUNCTION (vkCreateInstance)
#endif #endif
INSTANCE_LEVEL_VULKAN_FUNCTION (vkEnumeratePhysicalDevices) INSTANCE_LEVEL_VULKAN_FUNCTION (vkEnumeratePhysicalDevices)
INSTANCE_LEVEL_VULKAN_FUNCTION (vkGetPhysicalDeviceProperties) INSTANCE_LEVEL_VULKAN_FUNCTION (vkGetPhysicalDeviceProperties2)
INSTANCE_LEVEL_VULKAN_FUNCTION (vkGetPhysicalDeviceFeatures) INSTANCE_LEVEL_VULKAN_FUNCTION (vkGetPhysicalDeviceFeatures)
INSTANCE_LEVEL_VULKAN_FUNCTION (vkGetPhysicalDeviceQueueFamilyProperties) INSTANCE_LEVEL_VULKAN_FUNCTION (vkGetPhysicalDeviceQueueFamilyProperties)
INSTANCE_LEVEL_VULKAN_FUNCTION (vkCreateDevice) INSTANCE_LEVEL_VULKAN_FUNCTION (vkCreateDevice)

View file

@ -42,7 +42,9 @@ typedef struct DARRAY_TYPE(const char *) qfv_debugstack_t;
typedef struct qfv_physdev_s { typedef struct qfv_physdev_s {
struct qfv_instance_s *instance; struct qfv_instance_s *instance;
VkPhysicalDevice dev; VkPhysicalDevice dev;
VkPhysicalDeviceProperties properties; VkPhysicalDeviceProperties2 properties2;
VkPhysicalDeviceProperties *properties;
VkPhysicalDeviceMultiviewProperties multiViewProperties;
VkPhysicalDeviceMemoryProperties memory_properties; VkPhysicalDeviceMemoryProperties memory_properties;
} qfv_physdev_t; } qfv_physdev_t;

View file

@ -151,6 +151,7 @@ QFV_CreateDevice (vulkan_ctx_t *ctx, const char **extensions)
}; };
VkPhysicalDeviceFeatures features = { VkPhysicalDeviceFeatures features = {
.geometryShader = 1, .geometryShader = 1,
.multiViewport = 1,
}; };
VkDeviceCreateInfo dCreateInfo = { VkDeviceCreateInfo dCreateInfo = {
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, 0, 0, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, 0, 0,

View file

@ -279,7 +279,15 @@ QFV_CreateInstance (vulkan_ctx_t *ctx,
qfv_physdev_t *dev = &inst->devices[i]; qfv_physdev_t *dev = &inst->devices[i];
dev->instance = inst; dev->instance = inst;
dev->dev = physDev; dev->dev = physDev;
ifunc->vkGetPhysicalDeviceProperties (physDev, &dev->properties); dev->properties2 = (VkPhysicalDeviceProperties2) {
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
.pNext = &dev->multiViewProperties,
};
dev->multiViewProperties = (VkPhysicalDeviceMultiviewProperties) {
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
};
ifunc->vkGetPhysicalDeviceProperties2 (physDev, &dev->properties2);
dev->properties = &dev->properties2.properties;
ifunc->vkGetPhysicalDeviceMemoryProperties (physDev, ifunc->vkGetPhysicalDeviceMemoryProperties (physDev,
&dev->memory_properties); &dev->memory_properties);
} }
@ -306,8 +314,8 @@ QFV_GetMaxSampleCount (qfv_physdev_t *physdev)
{ {
VkSampleCountFlagBits maxSamples = VK_SAMPLE_COUNT_64_BIT; VkSampleCountFlagBits maxSamples = VK_SAMPLE_COUNT_64_BIT;
VkSampleCountFlagBits counts; VkSampleCountFlagBits counts;
counts = min (physdev->properties.limits.framebufferColorSampleCounts, counts = min (physdev->properties->limits.framebufferColorSampleCounts,
physdev->properties.limits.framebufferDepthSampleCounts); physdev->properties->limits.framebufferDepthSampleCounts);
while (maxSamples && maxSamples > counts) { while (maxSamples && maxSamples > counts) {
maxSamples >>= 1; maxSamples >>= 1;
} }

View file

@ -41,7 +41,7 @@ qfv_stagebuf_t *
QFV_CreateStagingBuffer (qfv_device_t *device, const char *name, size_t size, QFV_CreateStagingBuffer (qfv_device_t *device, const char *name, size_t size,
VkCommandPool cmdPool) VkCommandPool cmdPool)
{ {
size_t atom = device->physDev->properties.limits.nonCoherentAtomSize; size_t atom = device->physDev->properties->limits.nonCoherentAtomSize;
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
dstring_t *str = dstring_new (); dstring_t *str = dstring_new ();

View file

@ -1092,7 +1092,7 @@ parse_object (vulkan_ctx_t *ctx, memsuper_t *memsuper, plitem_t *plist,
{"frames", &vulkan_frameset_t_type, &ctx->frames}, {"frames", &vulkan_frameset_t_type, &ctx->frames},
{"msaaSamples", &VkSampleCountFlagBits_type, &ctx->msaaSamples}, {"msaaSamples", &VkSampleCountFlagBits_type, &ctx->msaaSamples},
{"physDevLimits", &VkPhysicalDeviceLimits_type, {"physDevLimits", &VkPhysicalDeviceLimits_type,
&ctx->device->physDev->properties.limits }, &ctx->device->physDev->properties->limits },
{QFV_PROPERTIES, &cexpr_plitem, &parsectx.properties}, {QFV_PROPERTIES, &cexpr_plitem, &parsectx.properties},
{} {}
}; };

View file

@ -436,7 +436,7 @@ Vulkan_BuildDisplayLists (model_t **models, int num_models, vulkan_ctx_t *ctx)
} }
} }
size_t atom = device->physDev->properties.limits.nonCoherentAtomSize; size_t atom = device->physDev->properties->limits.nonCoherentAtomSize;
size_t atom_mask = atom - 1; size_t atom_mask = atom - 1;
size_t frames = bctx->frames.size; size_t frames = bctx->frames.size;
size_t index_buffer_size = index_count * frames * sizeof (uint32_t); size_t index_buffer_size = index_count * frames * sizeof (uint32_t);
@ -1118,7 +1118,7 @@ Vulkan_Bsp_Flush (vulkan_ctx_t *ctx)
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
bspctx_t *bctx = ctx->bsp_context; bspctx_t *bctx = ctx->bsp_context;
bspframe_t *bframe = &bctx->frames.a[ctx->curFrame]; bspframe_t *bframe = &bctx->frames.a[ctx->curFrame];
size_t atom = device->physDev->properties.limits.nonCoherentAtomSize; size_t atom = device->physDev->properties->limits.nonCoherentAtomSize;
size_t atom_mask = atom - 1; size_t atom_mask = atom - 1;
size_t index_offset = bframe->index_offset; size_t index_offset = bframe->index_offset;
size_t index_size = bframe->index_count * sizeof (uint32_t); size_t index_size = bframe->index_count * sizeof (uint32_t);
@ -1424,7 +1424,7 @@ Vulkan_Bsp_Init (vulkan_ctx_t *ctx)
size_t entid_count = Vulkan_Scene_MaxEntities (ctx); size_t entid_count = Vulkan_Scene_MaxEntities (ctx);
size_t entid_size = entid_count * sizeof (uint32_t); size_t entid_size = entid_count * sizeof (uint32_t);
size_t atom = device->physDev->properties.limits.nonCoherentAtomSize; size_t atom = device->physDev->properties->limits.nonCoherentAtomSize;
size_t atom_mask = atom - 1; size_t atom_mask = atom - 1;
entid_size = (entid_size + atom_mask) & ~atom_mask; entid_size = (entid_size + atom_mask) & ~atom_mask;
bctx->entid_buffer bctx->entid_buffer

View file

@ -362,7 +362,7 @@ Vulkan_Lighting_Init (vulkan_ctx_t *ctx)
lframe->shadowWrite.dstBinding = 0; lframe->shadowWrite.dstBinding = 0;
lframe->shadowWrite.descriptorCount lframe->shadowWrite.descriptorCount
= min (MaxLights, = min (MaxLights,
device->physDev->properties.limits.maxPerStageDescriptorSamplers); device->physDev->properties->limits.maxPerStageDescriptorSamplers);
lframe->shadowWrite.pImageInfo = lframe->shadowInfo; lframe->shadowWrite.pImageInfo = lframe->shadowInfo;
} }
free (shadow_set); free (shadow_set);
@ -578,7 +578,7 @@ build_shadow_maps (lightingctx_t *lctx, vulkan_ctx_t *ctx)
qfv_device_t *device = ctx->device; qfv_device_t *device = ctx->device;
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
qfv_physdev_t *physDev = device->physDev; qfv_physdev_t *physDev = device->physDev;
int maxLayers = physDev->properties.limits.maxImageArrayLayers; int maxLayers = physDev->properties->limits.maxImageArrayLayers;
lightingdata_t *ldata = lctx->ldata; lightingdata_t *ldata = lctx->ldata;
light_t *lights = ldata->lights.a; light_t *lights = ldata->lights.a;
int numLights = ldata->lights.size; int numLights = ldata->lights.size;