finish with the new array list structure

This commit is contained in:
Gregory Wells
2025-08-03 18:39:52 -04:00
parent 3157dc0342
commit 7a03ef296a
4 changed files with 17 additions and 16 deletions

View File

@@ -15,7 +15,7 @@ gnReturnCode gnCreateInstance(gnInstanceHandle* instance, gnInstanceCreateInfo*
(*instance)->hasDebugger = GN_FALSE; (*instance)->hasDebugger = GN_FALSE;
(*instance)->layers = loaderLayerArrayListCreate(); (*instance)->layers = loaderLayerArrayListCreate();
loaderLayerArrayListAdd(&(*instance)->layers, loadLayer((loaderInfo){ loaderLayerArrayListAdd((*instance)->layers, loadLayer((loaderInfo){
.api = info->coreAPI, .api = info->coreAPI,
.layerToLoad = api_layer .layerToLoad = api_layer
})); }));
@@ -23,20 +23,20 @@ gnReturnCode gnCreateInstance(gnInstanceHandle* instance, gnInstanceCreateInfo*
gnBool unsupportedExtension = GN_FALSE; gnBool unsupportedExtension = GN_FALSE;
for (int c = 0; c < GN_EXT_MAX; c++) (*instance)->enabledExtensions[c] = GN_FALSE; for (int c = 0; c < GN_EXT_MAX; c++) (*instance)->enabledExtensions[c] = GN_FALSE;
for (int c = 0; c < GN_LAYER_MAX; c++) (*instance)->enabledLayerCounts[c] = 0; for (int c = 0; c < GN_LAYER_MAX; c++) (*instance)->enabledLayerCounts[c] = 0;
for (int i = 0; i < info->extensionCount; i++) { for (uint32_t i = 0; i < info->extensionCount; i++) {
(*instance)->enabledExtensions[info->extensions[i]] = GN_TRUE; (*instance)->enabledExtensions[info->extensions[i]] = GN_TRUE;
if (!gnIsExtensionSuppoted(info->coreAPI, info->extensions[i])) unsupportedExtension = GN_TRUE; if (!gnIsExtensionSuppoted(info->coreAPI, info->extensions[i])) unsupportedExtension = GN_TRUE;
} }
if ((*instance)->enabledExtensions[GN_EXT_SYNCHRONIZATION]) (*instance)->layers.data[0].syncFunctions = loadAPISyncFunctions(info->coreAPI); // if ((*instance)->enabledExtensions[GN_EXT_SYNCHRONIZATION]) (*instance)->layers.data[0].syncFunctions = loadAPISyncFunctions(info->coreAPI);
if ((*instance)->enabledExtensions[GN_EXT_QUEUES]) (*instance)->layers.data[0].queueFunctions = loadAPIQueueFunctions(info->coreAPI); // if ((*instance)->enabledExtensions[GN_EXT_QUEUES]) (*instance)->layers.data[0].queueFunctions = loadAPIQueueFunctions(info->coreAPI);
if (info->debuggerInfo.layerCount > 0) { if (info->debuggerInfo.layerCount > 0) {
for (int i = 0; i < info->debuggerInfo.layerCount; i++) { for (uint32_t i = 0; i < info->debuggerInfo.layerCount; i++) {
(*instance)->enabledLayerCounts[info->debuggerInfo.layers[i]]++; (*instance)->enabledLayerCounts[info->debuggerInfo.layers[i]]++;
if (info->debuggerInfo.layers[i] == GN_DEBUGGER_LAYER_FUNCTIONS) { if (info->debuggerInfo.layers[i] == GN_DEBUGGER_LAYER_FUNCTIONS) {
loaderLayerArrayListAdd(&(*instance)->layers, loadLayer((loaderInfo){ loaderLayerArrayListAdd((*instance)->layers, loadLayer((loaderInfo){
.api = info->coreAPI, .api = info->coreAPI,
.layerToLoad = function_checker_layer .layerToLoad = function_checker_layer
})); }));
@@ -52,15 +52,16 @@ gnReturnCode gnCreateInstance(gnInstanceHandle* instance, gnInstanceCreateInfo*
)); ));
int layerIDX = 0; int layerIDX = 0;
for (int i = 0; i < info->debuggerInfo.layerCount; i++) { for (uint32_t i = 0; i < info->debuggerInfo.layerCount; i++) {
if (info->debuggerInfo.layers[i] == GN_DEBUGGER_LAYER_FUNCTIONS) (*instance)->allLayers[layerIDX++] = checkerLoadInstanceFunctions(); if (info->debuggerInfo.layers[i] == GN_DEBUGGER_LAYER_FUNCTIONS) (*instance)->allLayers[layerIDX++] = checkerLoadInstanceFunctions();
(*instance)->allLayers[layerIDX - 1].next = &(*instance)->allLayers[layerIDX]; (*instance)->allLayers[layerIDX - 1].next = &(*instance)->allLayers[layerIDX];
} }
(*instance)->allLayers[layerIDX] = gryphnLoadAPILayer(info->coreAPI); (*instance)->allLayers[layerIDX] = gryphnLoadAPILayer(info->coreAPI);
(*instance)->functions = &(*instance)->allLayers[0]; (*instance)->functions = &(*instance)->allLayers[0];
(*instance)->currentLayer = ((*instance)->layers.count - 1);
for (int i = 0; i < (*instance)->layers.count; i++) (*instance)->layers.data[i].layerIndex = i; resetLayer(*instance);
(*instance)->callingLayer = &(*instance)->layers.data[(*instance)->layers.count - 1]; for (uint32_t i = 0; i < loaderLayerArrayListCount((*instance)->layers); i++) loaderLayerArrayListRefAt((*instance)->layers, i)->layerIndex = i;
(*instance)->callingLayer = loaderLayerArrayListRefAt((*instance)->layers, (*instance)->currentLayer);
if (unsupportedExtension) return GN_UNLOADED_EXTENSION; if (unsupportedExtension) return GN_UNLOADED_EXTENSION;
return (*instance)->functions->createInstance(*instance, info, (*instance)->functions->next); return (*instance)->functions->createInstance(*instance, info, (*instance)->functions->next);
} }

View File

@@ -13,12 +13,12 @@ gnReturnCode gnCreateUniformPool(gnUniformPool* pool, gnDeviceHandle device) {
// you own this memory now // you own this memory now
gnUniformArrayList gnUniformPoolAllocateUniforms(gnUniformPool pool, gnUniformAllocationInfo allocInfo) { gnUniformArrayList gnUniformPoolAllocateUniforms(gnUniformPool pool, gnUniformAllocationInfo allocInfo) {
gnUniform* uniforms = pool->device->instance->callingLayer->deviceFunctions._gnUniformPoolAllocateUniforms(pool, allocInfo); gnUniform* uniforms = pool->device->instance->callingLayer->deviceFunctions._gnUniformPoolAllocateUniforms(pool, allocInfo);
for (int i = 0; i < allocInfo.setCount; i++) for (uint32_t i = 0; i < allocInfo.setCount; i++)
uniforms[i]->pool = pool; uniforms[i]->pool = pool;
gnUniformArrayList list = gnUniformArrayListCreate(); gnUniformArrayList list = gnUniformArrayListCreate();
gnUniformArrayListResize(&list, allocInfo.setCount); gnUniformArrayListResize(list, allocInfo.setCount);
for (int i = 0; i < allocInfo.setCount; i++) list.data[i] = uniforms[i]; for (uint32_t i = 0; i < allocInfo.setCount; i++) *gnUniformArrayListRefAt(list, i) = uniforms[i];
return list; return list;
} }

View File

@@ -169,11 +169,11 @@ loaderLayer* loaderGetNextLayer(gnInstance instance) {
nextLayer = 0; nextLayer = 0;
resetLayer(instance); resetLayer(instance);
} }
return &instance->layers.data[nextLayer]; return loaderLayerArrayListRefAt(instance->layers, nextLayer);
} }
void resetLayer(gnInstance instance) { void resetLayer(gnInstance instance) {
instance->currentLayer = (instance->layers.count - 1); instance->currentLayer = loaderLayerArrayListCount(instance->layers) - 1;
} }