removing starting_slot argument

This commit is contained in:
2025-02-22 00:27:47 +01:00
parent b5abfe1589
commit 3a598ab887
12 changed files with 39 additions and 47 deletions

View File

@@ -46,7 +46,7 @@ int main(void)
CHECK_PULSE_HANDLE_RETVAL(pipeline, 1);
PulseBufferCreateInfo buffer_create_info = { 0 };
buffer_create_info.size = 1024;
buffer_create_info.size = 256 * sizeof(uint32_t);
buffer_create_info.usage = PULSE_BUFFER_USAGE_STORAGE_READ | PULSE_BUFFER_USAGE_STORAGE_WRITE | PULSE_BUFFER_USAGE_TRANSFER_DOWNLOAD;
PulseBuffer buffer = PulseCreateBuffer(device, &buffer_create_info);
@@ -59,7 +59,7 @@ int main(void)
PulseComputePass pass = PulseBeginComputePass(cmd);
CHECK_PULSE_HANDLE_RETVAL(pass, 1);
PulseBindStorageBuffers(pass, 0, &buffer, 1);
PulseBindStorageBuffers(pass, &buffer, 1);
PulseBindComputePipeline(pass, pipeline);
PulseDispatchComputations(pass, 32, 32, 1);
PulseEndComputePass(pass);
@@ -71,7 +71,7 @@ int main(void)
void* ptr;
PulseMapBuffer(buffer, &ptr);
for(uint32_t i = 0; i < 1024; i++)
for(uint32_t i = 0; i < 256; i++)
printf("%d, ", ((int32_t*)ptr)[i]);
puts("");
PulseUnmapBuffer(buffer);
@@ -84,6 +84,6 @@ int main(void)
PulseDestroyDevice(device);
PulseUnloadBackend(backend);
puts("Successfully loaded Pulse using Vulkan !");
puts("Successfully executed Pulse example using Vulkan !");
return 0;
}

View File

@@ -280,9 +280,9 @@ PULSE_API PulseComputePipeline PulseCreateComputePipeline(PulseDevice device, co
PULSE_API void PulseDestroyComputePipeline(PulseDevice device, PulseComputePipeline pipeline);
PULSE_API PulseComputePass PulseBeginComputePass(PulseCommandList cmd);
PULSE_API void PulseBindStorageBuffers(PulseComputePass pass, uint32_t starting_slot, const PulseBuffer* buffers, uint32_t num_buffers);
PULSE_API void PulseBindStorageBuffers(PulseComputePass pass, const PulseBuffer* buffers, uint32_t num_buffers);
PULSE_API void PulseBindUniformData(PulseComputePass pass, uint32_t slot, const void* data, uint32_t data_size);
PULSE_API void PulseBindStorageImages(PulseComputePass pass, uint32_t starting_slot, const PulseImage* images, uint32_t num_images);
PULSE_API void PulseBindStorageImages(PulseComputePass pass, const PulseImage* images, uint32_t num_images);
PULSE_API void PulseBindComputePipeline(PulseComputePass pass, PulseComputePipeline pipeline);
PULSE_API void PulseDispatchComputations(PulseComputePass pass, uint32_t groupcount_x, uint32_t groupcount_y, uint32_t groupcount_z);
PULSE_API void PulseDispatchComputationsIndirect(PulseComputePass pass, PulseBuffer buffer, uint32_t offset);

View File

@@ -34,7 +34,7 @@ void VulkanDestroyComputePass(PulseDevice device, PulseComputePass pass)
free(pass);
}
void VulkanBindStorageBuffers(PulseComputePass pass, uint32_t starting_slot, const PulseBuffer* buffers, uint32_t num_buffers)
void VulkanBindStorageBuffers(PulseComputePass pass, const PulseBuffer* buffers, uint32_t num_buffers)
{
PulseBufferUsageFlags usage = buffers[0]->usage;
bool is_readwrite = (usage & PULSE_BUFFER_USAGE_STORAGE_WRITE) != 0;
@@ -58,9 +58,9 @@ void VulkanBindStorageBuffers(PulseComputePass pass, uint32_t starting_slot, con
return;
}
if(array[starting_slot + i] == buffers[i])
if(array[i] == buffers[i])
continue;
array[starting_slot + i] = buffers[i];
array[i] = buffers[i];
if(is_readwrite)
vulkan_pass->should_recreate_write_descriptor_sets = true;
@@ -73,7 +73,7 @@ void VulkanBindUniformData(PulseComputePass pass, uint32_t slot, const void* dat
{
}
void VulkanBindStorageImages(PulseComputePass pass, uint32_t starting_slot, const PulseImage* images, uint32_t num_images)
void VulkanBindStorageImages(PulseComputePass pass, const PulseImage* images, uint32_t num_images)
{
PulseImageUsageFlags usage = images[0]->usage;
bool is_readwrite = (usage & PULSE_IMAGE_USAGE_STORAGE_WRITE) != 0;
@@ -97,9 +97,9 @@ void VulkanBindStorageImages(PulseComputePass pass, uint32_t starting_slot, cons
return;
}
if(array[starting_slot + i] == images[i])
if(array[i] == images[i])
continue;
array[starting_slot + i] = images[i];
array[i] = images[i];
if((usage & PULSE_IMAGE_USAGE_STORAGE_WRITE) != 0)
vulkan_pass->should_recreate_write_descriptor_sets = true;

View File

@@ -31,9 +31,9 @@ void VulkanDestroyComputePass(PulseDevice device, PulseComputePass pass);
PulseComputePass VulkanBeginComputePass(PulseCommandList cmd);
void VulkanEndComputePass(PulseComputePass pass);
void VulkanBindStorageBuffers(PulseComputePass pass, uint32_t starting_slot, const PulseBuffer* buffers, uint32_t num_buffers);
void VulkanBindStorageBuffers(PulseComputePass pass, const PulseBuffer* buffers, uint32_t num_buffers);
void VulkanBindUniformData(PulseComputePass pass, uint32_t slot, const void* data, uint32_t data_size);
void VulkanBindStorageImages(PulseComputePass pass, uint32_t starting_slot, const PulseImage* images, uint32_t num_images);
void VulkanBindStorageImages(PulseComputePass pass, const PulseImage* images, uint32_t num_images);
void VulkanBindComputePipeline(PulseComputePass pass, PulseComputePipeline pipeline);
void VulkanDispatchComputations(PulseComputePass pass, uint32_t groupcount_x, uint32_t groupcount_y, uint32_t groupcount_z);

View File

@@ -275,8 +275,6 @@ void VulkanBindDescriptorSets(PulseComputePass pass)
for(uint32_t i = 0; i < pass->current_pipeline->num_readonly_storage_images; i++)
{
if(pass->readonly_images[i] == PULSE_NULL_HANDLE)
continue;
VkWriteDescriptorSet* write_descriptor_set = &writes[write_count];
write_descriptor_set->sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
@@ -303,8 +301,6 @@ void VulkanBindDescriptorSets(PulseComputePass pass)
for(uint32_t i = 0; i < pass->current_pipeline->num_readonly_storage_buffers; i++)
{
if(pass->readonly_storage_buffers[i] == PULSE_NULL_HANDLE)
continue;
VkWriteDescriptorSet* write_descriptor_set = &writes[write_count];
write_descriptor_set->sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
@@ -340,8 +336,6 @@ void VulkanBindDescriptorSets(PulseComputePass pass)
for(uint32_t i = 0; i < pass->current_pipeline->num_readwrite_storage_images; i++)
{
if(pass->readwrite_images[i] == PULSE_NULL_HANDLE)
continue;
VkWriteDescriptorSet* write_descriptor_set = &writes[write_count];
write_descriptor_set->sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
@@ -368,8 +362,6 @@ void VulkanBindDescriptorSets(PulseComputePass pass)
for(uint32_t i = 0; i < pass->current_pipeline->num_readwrite_storage_buffers; i++)
{
if(pass->readwrite_storage_buffers[i] == PULSE_NULL_HANDLE)
continue;
VkWriteDescriptorSet* write_descriptor_set = &writes[write_count];
write_descriptor_set->sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;

View File

@@ -23,13 +23,13 @@ PULSE_API PulseComputePass PulseBeginComputePass(PulseCommandList cmd)
return pass;
}
PULSE_API void PulseBindStorageBuffers(PulseComputePass pass, uint32_t starting_slot, const PulseBuffer* buffers, uint32_t num_buffers)
PULSE_API void PulseBindStorageBuffers(PulseComputePass pass, const PulseBuffer* buffers, uint32_t num_buffers)
{
PULSE_CHECK_HANDLE(pass);
PULSE_CHECK_COMMAND_LIST_STATE(pass->cmd);
pass->cmd->device->PFN_BindStorageBuffers(pass, starting_slot, buffers, num_buffers);
pass->cmd->device->PFN_BindStorageBuffers(pass, buffers, num_buffers);
}
PULSE_API void PulseBindUniformData(PulseComputePass pass, uint32_t slot, const void* data, uint32_t data_size)
@@ -41,13 +41,13 @@ PULSE_API void PulseBindUniformData(PulseComputePass pass, uint32_t slot, const
pass->cmd->device->PFN_BindUniformData(pass, slot, data, data_size);
}
PULSE_API void PulseBindStorageImages(PulseComputePass pass, uint32_t starting_slot, const PulseImage* images, uint32_t num_images)
PULSE_API void PulseBindStorageImages(PulseComputePass pass, const PulseImage* images, uint32_t num_images)
{
PULSE_CHECK_HANDLE(pass);
PULSE_CHECK_COMMAND_LIST_STATE(pass->cmd);
pass->cmd->device->PFN_BindStorageImages(pass, starting_slot, images, num_images);
pass->cmd->device->PFN_BindStorageImages(pass, images, num_images);
}
PULSE_API void PulseBindComputePipeline(PulseComputePass pass, PulseComputePipeline pipeline)

View File

@@ -36,9 +36,9 @@ typedef bool (*PulseCopyBufferToImageFN)(PulseCommandList, const PulseBufferRegi
typedef bool (*PulseCopyImageToBufferPFN)(PulseCommandList, const PulseImageRegion*, const PulseBufferRegion*);
typedef bool (*PulseBlitImagePFN)(PulseCommandList, const PulseImageRegion*, const PulseImageRegion*);
typedef PulseComputePass (*PulseBeginComputePassPFN)(PulseCommandList);
typedef void (*PulseBindStorageBuffersPFN)(PulseComputePass, uint32_t, const PulseBuffer*, uint32_t);
typedef void (*PulseBindStorageBuffersPFN)(PulseComputePass, const PulseBuffer*, uint32_t);
typedef void (*PulseBindUniformDataPFN)(PulseComputePass, uint32_t, const void*, uint32_t);
typedef void (*PulseBindStorageImagesPFN)(PulseComputePass, uint32_t, const PulseImage*, uint32_t);
typedef void (*PulseBindStorageImagesPFN)(PulseComputePass, const PulseImage*, uint32_t);
typedef void (*PulseBindComputePipelinePFN)(PulseComputePass, PulseComputePipeline);
typedef void (*PulseEndComputePassPFN)(PulseComputePass);

View File

@@ -298,7 +298,7 @@ void TestBufferComputeWrite()
PulseComputePass pass = PulseBeginComputePass(cmd);
TEST_ASSERT_NOT_EQUAL_MESSAGE(pass, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseBindStorageBuffers(pass, 0, &buffer, 1);
PulseBindStorageBuffers(pass, &buffer, 1);
PulseBindComputePipeline(pass, pipeline);
PulseDispatchComputations(pass, 32, 32, 1);
PulseEndComputePass(pass);
@@ -367,8 +367,8 @@ void TestBufferComputeCopy()
PulseComputePass pass = PulseBeginComputePass(cmd);
TEST_ASSERT_NOT_EQUAL_MESSAGE(pass, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseBindStorageBuffers(pass, 0, &read_buffer, 1);
PulseBindStorageBuffers(pass, 0, &write_buffer, 1);
PulseBindStorageBuffers(pass, &read_buffer, 1);
PulseBindStorageBuffers(pass, &write_buffer, 1);
PulseBindComputePipeline(pass, pipeline);
PulseDispatchComputations(pass, 32, 32, 1);
PulseEndComputePass(pass);

View File

@@ -76,8 +76,8 @@ void TestPipelineReadOnlyBindings()
PulseComputePass pass = PulseBeginComputePass(cmd);
TEST_ASSERT_NOT_EQUAL_MESSAGE(pass, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseBindStorageBuffers(pass, 0, &buffer, 1);
PulseBindStorageImages(pass, 1, &image, 1);
PulseBindStorageImages(pass, &image, 1);
PulseBindStorageBuffers(pass, &buffer, 1);
PulseBindComputePipeline(pass, pipeline);
PulseDispatchComputations(pass, 32, 32, 1);
PulseEndComputePass(pass);
@@ -132,8 +132,8 @@ void TestPipelineWriteOnlyBindings()
PulseComputePass pass = PulseBeginComputePass(cmd);
TEST_ASSERT_NOT_EQUAL_MESSAGE(pass, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseBindStorageBuffers(pass, 0, &buffer, 1);
PulseBindStorageImages(pass, 1, &image, 1);
PulseBindStorageImages(pass, &image, 1);
PulseBindStorageBuffers(pass, &buffer, 1);
PulseBindComputePipeline(pass, pipeline);
PulseDispatchComputations(pass, 32, 32, 1);
PulseEndComputePass(pass);
@@ -196,10 +196,10 @@ void TestPipelineReadWriteBindings()
PulseComputePass pass = PulseBeginComputePass(cmd);
TEST_ASSERT_NOT_EQUAL_MESSAGE(pass, PULSE_NULL_HANDLE, PulseVerbaliseErrorType(PulseGetLastErrorType()));
PulseBindStorageBuffers(pass, 0, &read_buffer, 1);
PulseBindStorageBuffers(pass, 0, &write_buffer, 1);
PulseBindStorageImages(pass, 1, &read_image, 1);
PulseBindStorageImages(pass, 1, &write_image, 1);
PulseBindStorageImages(pass, &read_image, 1);
PulseBindStorageImages(pass, &write_image, 1);
PulseBindStorageBuffers(pass, &read_buffer, 1);
PulseBindStorageBuffers(pass, &write_buffer, 1);
PulseBindComputePipeline(pass, pipeline);
PulseDispatchComputations(pass, 32, 32, 1);
PulseEndComputePass(pass);

View File

@@ -14,8 +14,8 @@ struct SSBO
external
{
[set(0), binding(0)] read_ssbo: storage[SSBO, readonly],
[set(0), binding(1)] read_texture: texture2D[f32, readonly, rgba8],
[set(0), binding(0)] read_texture: texture2D[f32, readonly, rgba8],
[set(0), binding(1)] read_ssbo: storage[SSBO, readonly],
}
[entry(compute)]

View File

@@ -14,10 +14,10 @@ struct SSBO
external
{
[set(0), binding(0)] read_ssbo: storage[SSBO, readonly],
[set(0), binding(1)] read_texture: texture2D[f32, readonly, rgba8],
[set(1), binding(0)] write_ssbo: storage[SSBO, writeonly],
[set(1), binding(1)] write_texture: texture2D[f32, readonly, rgba8],
[set(0), binding(0)] read_texture: texture2D[f32, readonly, rgba8],
[set(0), binding(1)] read_ssbo: storage[SSBO, readonly],
[set(1), binding(0)] write_texture: texture2D[f32, readonly, rgba8],
[set(1), binding(1)] write_ssbo: storage[SSBO, writeonly],
}
[entry(compute)]

View File

@@ -14,8 +14,8 @@ struct SSBO
external
{
[set(1), binding(0)] write_ssbo: storage[SSBO],
[set(1), binding(1)] write_texture: texture2D[f32, readonly, rgba8],
[set(1), binding(0)] write_texture: texture2D[f32, readonly, rgba8],
[set(1), binding(1)] write_ssbo: storage[SSBO],
}
[entry(compute)]