diff --git a/Examples/Vulkan/main.c b/Examples/Vulkan/main.c index baf8594..e296cc8 100644 --- a/Examples/Vulkan/main.c +++ b/Examples/Vulkan/main.c @@ -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; } diff --git a/Includes/Pulse.h b/Includes/Pulse.h index 552dfe6..6ebb8c7 100644 --- a/Includes/Pulse.h +++ b/Includes/Pulse.h @@ -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); diff --git a/Sources/Backends/Vulkan/VulkanComputePass.c b/Sources/Backends/Vulkan/VulkanComputePass.c index 676b02e..b539279 100644 --- a/Sources/Backends/Vulkan/VulkanComputePass.c +++ b/Sources/Backends/Vulkan/VulkanComputePass.c @@ -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; diff --git a/Sources/Backends/Vulkan/VulkanComputePass.h b/Sources/Backends/Vulkan/VulkanComputePass.h index 178f7e7..9891f46 100644 --- a/Sources/Backends/Vulkan/VulkanComputePass.h +++ b/Sources/Backends/Vulkan/VulkanComputePass.h @@ -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); diff --git a/Sources/Backends/Vulkan/VulkanDescriptor.c b/Sources/Backends/Vulkan/VulkanDescriptor.c index 9f6c48e..52fedda 100644 --- a/Sources/Backends/Vulkan/VulkanDescriptor.c +++ b/Sources/Backends/Vulkan/VulkanDescriptor.c @@ -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; diff --git a/Sources/PulseComputePass.c b/Sources/PulseComputePass.c index 67fd82f..daf7671 100644 --- a/Sources/PulseComputePass.c +++ b/Sources/PulseComputePass.c @@ -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) diff --git a/Sources/PulsePFNs.h b/Sources/PulsePFNs.h index ead02b9..fabdda1 100644 --- a/Sources/PulsePFNs.h +++ b/Sources/PulsePFNs.h @@ -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); diff --git a/Tests/Vulkan/Buffer.c b/Tests/Vulkan/Buffer.c index e88c1f8..ff16bf3 100644 --- a/Tests/Vulkan/Buffer.c +++ b/Tests/Vulkan/Buffer.c @@ -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); diff --git a/Tests/Vulkan/Pipeline.c b/Tests/Vulkan/Pipeline.c index e5a5d21..48ce4d5 100644 --- a/Tests/Vulkan/Pipeline.c +++ b/Tests/Vulkan/Pipeline.c @@ -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); diff --git a/Tests/Vulkan/Shaders/ReadOnlyBindings.nzsl b/Tests/Vulkan/Shaders/ReadOnlyBindings.nzsl index 2494dee..47ffc01 100644 --- a/Tests/Vulkan/Shaders/ReadOnlyBindings.nzsl +++ b/Tests/Vulkan/Shaders/ReadOnlyBindings.nzsl @@ -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)] diff --git a/Tests/Vulkan/Shaders/ReadWriteBindings.nzsl b/Tests/Vulkan/Shaders/ReadWriteBindings.nzsl index 277e40f..7bbf5ba 100644 --- a/Tests/Vulkan/Shaders/ReadWriteBindings.nzsl +++ b/Tests/Vulkan/Shaders/ReadWriteBindings.nzsl @@ -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)] diff --git a/Tests/Vulkan/Shaders/WriteOnlyBindings.nzsl b/Tests/Vulkan/Shaders/WriteOnlyBindings.nzsl index 8b66b01..c67a8c4 100644 --- a/Tests/Vulkan/Shaders/WriteOnlyBindings.nzsl +++ b/Tests/Vulkan/Shaders/WriteOnlyBindings.nzsl @@ -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)]