fix some bugs
This commit is contained in:
@@ -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,
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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,
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
Submodule projects/utils updated: e3286f119d...d7a13b16d1
Reference in New Issue
Block a user