From a0450a0351a74e73c0142b9dc52ed0ec5b25e572 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Fri, 19 Sep 2025 09:21:18 -0400 Subject: [PATCH] write all new functions headers --- .../output_device/gryphn_physical_device.c | 4 + .../output_device/gryphn_physical_device.h | 77 ++++++++++++++++++- .../loader/src/gryphn_instance_functions.h | 3 +- projects/loader/src/gryphn_loader.h | 1 + 4 files changed, 82 insertions(+), 3 deletions(-) diff --git a/projects/core/src/output_device/gryphn_physical_device.c b/projects/core/src/output_device/gryphn_physical_device.c index 6418db2..830024f 100644 --- a/projects/core/src/output_device/gryphn_physical_device.c +++ b/projects/core/src/output_device/gryphn_physical_device.c @@ -10,6 +10,10 @@ gnPhysicalDeviceProperties gnQueryPhysicalDeviceFeatures(gnInstanceHandle instan return instance->functions->getPhysicalDeviceFeatures(instance, device, instance->functions->next); } +gnPhysicalDeviceProperties gnQueryPhysicalDeviceLimits(gnInstanceHandle instance, gnPhysicalDeviceHandle device) { + return instance->functions->getPhysicalDeviceLimits(instance, device, instance->functions->next); +} + gnBool gnPhysicalDeviceCanPresentToSurface(gnInstanceHandle instance, gnPhysicalDeviceHandle device, gnWindowSurfaceHandle windowSurface) { return instance->callingLayer->instanceFunctions._gnPhysicalDeviceCanPresentToSurface(device, windowSurface); } diff --git a/projects/core/src/output_device/gryphn_physical_device.h b/projects/core/src/output_device/gryphn_physical_device.h index 662e12a..33e6c50 100644 --- a/projects/core/src/output_device/gryphn_physical_device.h +++ b/projects/core/src/output_device/gryphn_physical_device.h @@ -2,6 +2,7 @@ #include "stdint.h" #include "utils/gryphn_string.h" #include "gryphn_handles.h" +#include typedef enum gnPhysicalDeviceType { GN_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, @@ -11,7 +12,7 @@ typedef enum gnPhysicalDeviceType { GN_PHYSICAL_DEVICE_TYPE_CPU, } gnPhysicalDeviceType; -typedef enum gnMultisampleCountFlags { +typedef enum gnSampleCountFlags { GN_SAMPLE_BIT_1 = 1 << 0, // 0x01 GN_SAMPLE_BIT_2 = 1 << 1, // 0x02 GN_SAMPLE_BIT_4 = 1 << 2, // 0x04 @@ -19,7 +20,7 @@ typedef enum gnMultisampleCountFlags { GN_SAMPLE_BIT_16 = 1 << 4, // 0x10 GN_SAMPLE_BIT_32 = 1 << 5, // 0x20 GN_SAMPLE_BIT_64 = 1 << 6, // 0x40 -} gnMultisampleCountFlags; +} gnSampleCountFlags; typedef struct gnPhysicalDeviceProperties { uint32_t driverVersion; @@ -40,7 +41,79 @@ typedef struct gnPhysicalDeviceFeatures { gnBool samplerAnisotropy; } gnPhysicalDeviceFeatures; +typedef struct gnPhysicalDeviceLimits { + uint32_t maxImageExtent1D; + uint32_t maxImageExtent2D; + uint32_t maxImageExtent3D; + uint32_t maxImageExtentCube; + uint32_t maxImageArrayLayers; + uint32_t maxTexelBufferElements; + uint32_t maxUniformBufferRange; + uint32_t maxStorageBufferRange; + uint32_t maxPushConstantsSize; + uint32_t maxMemoryAllocationCount; + uint32_t maxSamplerAllocationCount; + uint32_t maxBoundUniforms; + uint32_t maxPerStageUniformSamplers; + uint32_t maxPerStageUniformUniformBuffers; + uint32_t maxPerStageUniformStorageBuffers; + uint32_t maxPerStageUniformSampledImages; + uint32_t maxPerStageUniformStorageImages; + uint32_t maxPerStageUniformInputAttachments; + uint32_t maxPerStageResources; + uint32_t maxUniformSamplers; + uint32_t maxUniformUniformBuffers; + uint32_t maxUniformUniformBuffersDynamic; + uint32_t maxUniformStorageBuffers; + uint32_t maxUniformStorageBuffersDynamic; + uint32_t maxUniformSampledImages; + uint32_t maxUniformStorageImages; + uint32_t maxUniformInputAttachments; + uint32_t maxVertexInputAttributes; + uint32_t maxVertexInputBindings; + uint32_t maxVertexInputAttributeOffset; + uint32_t maxVertexInputBindingStride; + uint32_t maxVertexOutputComponents; + uint32_t maxTessellationGenerationLevel; + uint32_t maxTessellationPatchSize; + uint32_t maxTessellationControlPerVertexInputComponents; + uint32_t maxTessellationControlPerVertexOutputComponents; + uint32_t maxTessellationControlPerPatchOutputComponents; + uint32_t maxTessellationControlTotalOutputComponents; + uint32_t maxTessellationEvaluationInputComponents; + uint32_t maxTessellationEvaluationOutputComponents; + uint32_t maxGeometryShaderInvocations; + uint32_t maxGeometryInputComponents; + uint32_t maxGeometryOutputComponents; + uint32_t maxGeometryOutputVertices; + uint32_t maxGeometryTotalOutputComponents; + uint32_t maxFragmentInputComponents; + uint32_t maxFragmentOutputAttachments; + uint32_t maxFragmentDualSrcAttachments; + uint32_t maxFragmentCombinedOutputResources; + uint32_t maxDrawIndexedIndexValue; + uint32_t maxDrawIndirectCount; + float maxSamplerLodBias; + float maxSamplerAnisotropy; + uint32_t maxViewports; + uint32_t maxViewportExtents[2]; + float viewportBoundsRange[2]; + gnExtent2D maxFramebufferExtent; + uint32_t maxFramebufferLayers; + gnSampleCountFlags framebufferColorSampleCounts; + gnSampleCountFlags framebufferDepthSampleCounts; + gnSampleCountFlags framebufferStencilSampleCounts; + gnSampleCountFlags framebufferNoAttachmentsSampleCounts; + uint32_t maxColorAttachments; + float pointSizeRange[2]; + float lineWidthRange[2]; + float pointSizeGranularity; + float lineWidthGranularity; + gnBool strictLines; +} gnPhysicalDeviceLimits; + gnPhysicalDeviceProperties gnQueryPhysicalDeviceProperties(gnInstanceHandle instance, gnPhysicalDeviceHandle device); gnPhysicalDeviceProperties gnQueryPhysicalDeviceFeatures(gnInstanceHandle instance, gnPhysicalDeviceHandle device); +gnPhysicalDeviceProperties gnQueryPhysicalDeviceLimits(gnInstanceHandle instance, gnPhysicalDeviceHandle device); gnBool gnPhysicalDeviceCanPresentToSurface(gnInstance instance, gnPhysicalDeviceHandle device, gnWindowSurfaceHandle windowSurface); diff --git a/projects/loader/src/gryphn_instance_functions.h b/projects/loader/src/gryphn_instance_functions.h index 0daaa75..29dfd5a 100644 --- a/projects/loader/src/gryphn_instance_functions.h +++ b/projects/loader/src/gryphn_instance_functions.h @@ -26,8 +26,9 @@ typedef gnBool (*PFN_gnIsInstanceSuitable)(gnInstanceHandle, gnSuitableField, gr typedef gnReturnCode (*PFN_gnInstanceQueryDevices)(gnInstanceHandle, uint32_t*, gnPhysicalDeviceHandle*, gryphnInstanceFunctionLayers*); typedef void (*PFN_gnDestroyInstance)(gnInstanceHandle, gryphnInstanceFunctionLayers*, gnAllocators*); -typedef gnPhysicalDeviceProperties (*PFN_gnQueryPhysicalDeviceFeatures)(gnInstanceHandle, gnPhysicalDeviceHandle, gryphnInstanceFunctionLayers*); typedef gnPhysicalDeviceProperties (*PFN_gnQueryPhysicalDeviceProperties)(gnInstance, gnPhysicalDeviceHandle, gryphnInstanceFunctionLayers*); +typedef gnPhysicalDeviceProperties (*PFN_gnQueryPhysicalDeviceFeatures)(gnInstanceHandle, gnPhysicalDeviceHandle, gryphnInstanceFunctionLayers*); +typedef gnPhysicalDeviceProperties (*PFN_gnQueryPhysicalDeviceLimits)(gnInstanceHandle, gnPhysicalDeviceHandle, gryphnInstanceFunctionLayers*); typedef struct gnInstanceFunctions { gnBool (*_gnPhysicalDeviceCanPresentToSurface)(gnPhysicalDevice device, gnWindowSurfaceHandle windowSurface); diff --git a/projects/loader/src/gryphn_loader.h b/projects/loader/src/gryphn_loader.h index eb16c46..44a8ad0 100644 --- a/projects/loader/src/gryphn_loader.h +++ b/projects/loader/src/gryphn_loader.h @@ -20,6 +20,7 @@ typedef struct gryphnInstanceFunctionLayers { PFN_gnDestroyInstance destroyInstance; PFN_gnQueryPhysicalDeviceFeatures getPhysicalDeviceFeatures; PFN_gnQueryPhysicalDeviceProperties getPhysicalDeviceProperties; + PFN_gnQueryPhysicalDeviceLimits getPhysicalDeviceLimits; struct gryphnInstanceFunctionLayers* next; } gryphnInstanceFunctionLayers;