fix some bugs

This commit is contained in:
Gregory Wells
2025-08-03 18:46:39 -04:00
parent 7a03ef296a
commit 13e5932890
7 changed files with 14 additions and 11 deletions

View File

@@ -9,7 +9,7 @@ typedef struct mtlCompiler_t {
} mtlInternalCompiler; } mtlInternalCompiler;
void handle_resources(spirv_cross::CompilerMSL& compiler, spirv_cross::SmallVector<spirv_cross::Resource>& resources) { void handle_resources(spirv_cross::CompilerMSL& compiler, spirv_cross::SmallVector<spirv_cross::Resource>& resources) {
for (int i = 0; i < resources.size(); i++) { for (size_t i = 0; i < resources.size(); i++) {
uint32_t set = compiler.get_decoration(resources[i].id, spv::DecorationDescriptorSet); uint32_t set = compiler.get_decoration(resources[i].id, spv::DecorationDescriptorSet);
compiler.unset_decoration(resources[i].id, spv::DecorationDescriptorSet); compiler.unset_decoration(resources[i].id, spv::DecorationDescriptorSet);
compiler.set_decoration(resources[i].id, spv::DecorationDescriptorSet, set + 1); compiler.set_decoration(resources[i].id, spv::DecorationDescriptorSet, set + 1);
@@ -38,9 +38,9 @@ GN_CPP_FUNCTION const char* mtlCompilerShader(mtlCompiler compiler, gnUniformLay
if (compiler->usingArgumentBuffers) { if (compiler->usingArgumentBuffers) {
// std::vector<spirv_cross::MSLResourceBinding> bindings; // std::vector<spirv_cross::MSLResourceBinding> bindings;
for (int i = 0; i < uniformLayout->setCount; i++) { for (uint32_t i = 0; i < uniformLayout->setCount; i++) {
uint32_t currentBinding = 0; uint32_t currentBinding = 0;
for (int c = 0; c < uniformLayout->sets[i].uniformBindingCount; c++) { for (size_t c = 0; c < uniformLayout->sets[i].uniformBindingCount; c++) {
gnUniformBinding gryphnBinding = uniformLayout->sets[i].uniformBindings[c]; gnUniformBinding gryphnBinding = uniformLayout->sets[i].uniformBindings[c];
spirv_cross::MSLResourceBinding binding = { spirv_cross::MSLResourceBinding binding = {
.binding = gryphnBinding.binding, .binding = gryphnBinding.binding,

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <uniforms/gryphn_uniform_pool.h> #include <uniforms/gryphn_uniform_pool.h>
typedef struct gnPlatformUniformPool_t {} gnPlatformUniformPool; typedef struct gnPlatformUniformPool_t { gnBool warningAvoider; } gnPlatformUniformPool;
gnReturnCode createMetalUniformPool(gnUniformPool pool, gnDeviceHandle device); gnReturnCode createMetalUniformPool(gnUniformPool pool, gnDeviceHandle device);
gnUniform* allocateMetalUniforms(gnUniformPool pool, const gnUniformAllocationInfo allocInfo); gnUniform* allocateMetalUniforms(gnUniformPool pool, const gnUniformAllocationInfo allocInfo);

View File

@@ -2,14 +2,17 @@
#include <uniforms/gryphn_uniform.h> #include <uniforms/gryphn_uniform.h>
#include "metal_uniform.h" #include "metal_uniform.h"
#include "devices/metal_output_devices.h" #include "devices/metal_output_devices.h"
#include "metal_uniform_pool.h"
gnReturnCode createMetalUniformPool(gnUniformPool pool, gnDeviceHandle device) { gnReturnCode createMetalUniformPool(gnUniformPool pool, gnDeviceHandle device) {
if (device == NULL) return GN_INVALID_HANDLE;
pool->uniformPool = malloc(sizeof(gnPlatformUniformPool));
return GN_SUCCESS; return GN_SUCCESS;
} }
gnUniform* allocateMetalUniforms(gnUniformPool pool, const gnUniformAllocationInfo allocInfo) { gnUniform* allocateMetalUniforms(gnUniformPool pool, const gnUniformAllocationInfo allocInfo) {
gnUniform* uniforms = malloc(sizeof(gnUniform) * allocInfo.setCount); gnUniform* uniforms = malloc(sizeof(gnUniform) * allocInfo.setCount);
for (int i = 0; i < allocInfo.setCount; i++) { for (uint32_t i = 0; i < allocInfo.setCount; i++) {
uniforms[i] = malloc(sizeof(struct gnUniform_t)); uniforms[i] = malloc(sizeof(struct gnUniform_t));
uniforms[i]->uniform = malloc(sizeof(gnPlatformUniform)); uniforms[i]->uniform = malloc(sizeof(gnPlatformUniform));
int currentIndex = 0; int currentIndex = 0;
@@ -17,7 +20,7 @@ gnUniform* allocateMetalUniforms(gnUniformPool pool, const gnUniformAllocationIn
NSMutableArray* vertexArguments = [NSMutableArray arrayWithCapacity:allocInfo.sets[i].uniformBindingCount]; NSMutableArray* vertexArguments = [NSMutableArray arrayWithCapacity:allocInfo.sets[i].uniformBindingCount];
NSMutableArray* fragmentArguments = [NSMutableArray arrayWithCapacity:allocInfo.sets[i].uniformBindingCount]; NSMutableArray* fragmentArguments = [NSMutableArray arrayWithCapacity:allocInfo.sets[i].uniformBindingCount];
for (int c = 0; c < allocInfo.sets[i].uniformBindingCount; c++) { for (uint32_t c = 0; c < allocInfo.sets[i].uniformBindingCount; c++) {
gnUniformBinding binding = allocInfo.sets[i].uniformBindings[c]; gnUniformBinding binding = allocInfo.sets[i].uniformBindings[c];
switch (binding.type) { switch (binding.type) {
case GN_UNIFORM_BUFFER_DESCRIPTOR: case GN_UNIFORM_BUFFER_DESCRIPTOR:
@@ -75,7 +78,7 @@ gnUniform* allocateMetalUniforms(gnUniformPool pool, const gnUniformAllocationIn
[uniforms[i]->uniform->encoders[mtlFragment] setArgumentBuffer:uniforms[i]->uniform->argumentBuffers[mtlFragment] offset:0]; [uniforms[i]->uniform->encoders[mtlFragment] setArgumentBuffer:uniforms[i]->uniform->argumentBuffers[mtlFragment] offset:0];
} }
for (int k = 0; k < totalArguments.count; k++) [[totalArguments objectAtIndex:k] release]; for (uint32_t k = 0; k < totalArguments.count; k++) [[totalArguments objectAtIndex:k] release];
[totalArguments release]; [totalArguments release];
for (int g = 0; g < MAX_METAL_BINDINGS; g++) uniforms[i]->uniform->indexMap[g] = -1; for (int g = 0; g < MAX_METAL_BINDINGS; g++) uniforms[i]->uniform->indexMap[g] = -1;
} }

View File

@@ -19,7 +19,7 @@ VkDescriptorSetLayout vkGryphnCreateSetLayouts(
gnUniformSet uniformSet = *set; gnUniformSet uniformSet = *set;
VkDescriptorSetLayoutBinding* bindings = malloc(sizeof(VkDescriptorSetLayoutBinding) * uniformSet.uniformBindingCount); VkDescriptorSetLayoutBinding* bindings = malloc(sizeof(VkDescriptorSetLayoutBinding) * uniformSet.uniformBindingCount);
for (int i = 0; i < uniformSet.uniformBindingCount; i++) { for (uint32_t i = 0; i < uniformSet.uniformBindingCount; i++) {
bindings[i] = (VkDescriptorSetLayoutBinding){ bindings[i] = (VkDescriptorSetLayoutBinding){
.binding = uniformSet.uniformBindings[i].binding, .binding = uniformSet.uniformBindings[i].binding,
.descriptorCount = 1, .descriptorCount = 1,

View File

@@ -7,7 +7,7 @@
VkGryphnUniformPool* GetLastUniformPool(VkGryphnUniformPoolArrayList list) { VkGryphnUniformPool* GetLastUniformPool(VkGryphnUniformPoolArrayList list) {
uint32_t count = VkGryphnUniformPoolArrayListCount(list); uint32_t count = VkGryphnUniformPoolArrayListCount(list);
return VkGryphnUniformPoolArrayListRefAt(list, count); return VkGryphnUniformPoolArrayListRefAt(list, count - 1);
} }
gnReturnCode createUniformPool(gnUniformPool pool, gnDeviceHandle device) { gnReturnCode createUniformPool(gnUniformPool pool, gnDeviceHandle device) {

View File

@@ -4,7 +4,7 @@
gnPhysicalOutputDeviceHandle* gnGetPhyscialDevices(gnInstanceHandle instance, uint32_t* count) {; gnPhysicalOutputDeviceHandle* gnGetPhyscialDevices(gnInstanceHandle instance, uint32_t* count) {;
gnPhysicalOutputDeviceHandle* devices = instance->callingLayer->instanceFunctions._gnGetPhysicalDevices(instance, count); gnPhysicalOutputDeviceHandle* devices = instance->callingLayer->instanceFunctions._gnGetPhysicalDevices(instance, count);
for (int i = 0; i < *count; i++) for (uint32_t i = 0; i < *count; i++)
devices[i]->instance = instance; devices[i]->instance = instance;
return devices; return devices;
} }