Thread with 16 posts

jump to expanded post

you know, it’s a shame that C is designed by ISO/IEC JTC1/SC22/WG14 and not the OpenGL Architecture Review Board. i’m sure we’d all rather write:

glDisable(GL_MASKING);
glEnableClientState(GL_SOURCE_DATA_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glSourceDataPointer(1, gl::UNSIGNED_BYTE, 1, dst_ptr);
glEnableClientState(GL_DESTINATION_DATA_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDestinationDataPointer(1, gl::UNSIGNED_BYTE, 1, src_ptr);
glCopyBytes(0, num_bytes);
if (glGetError() != 0) {
   // fuck
}

rather than

memcpy(dst_ptr, src_ptr, size);
Open thread at this post

“client state? in 2023?” i hear you cry. ok ok. surely what we want to do then is

glDisable(GL_MASKING);
glEnableSourceDataArray();
glBindBuffer(GL_ARRAY_BUFFER, src_buf);
glSourceDataPointer(1, gl::UNSIGNED_BYTE, 1, (const GLvoid*)(uintptr_t)src_offset);
glEnableDestinationDataArray();
glBindBuffer(GL_ARRAY_BUFFER, dst_buf);
glDestinationDataPointer(1, gl::UNSIGNED_BYTE, 1, (const GLvoid*)(uintptr_t)dst_offset);
glCopyBytes(0, num_bytes);
if (glGetError() != 0) {
   // fuck
}
Open thread at this post
Richard Barrell , @0x2ba22e11@unstable.systems
(open profile)

@hikari
int strings[2];
strCreate(2, & strings);
strBindString(STR_DEST_STRING, string1);
strStringImage1D("hello, ");
strBindString(STR_DEST_STRING, string2);
strStringImage1D("world!");
strBindString (STR_DEST_STRING, string1);
strBindString(STR_SRC_STRING, string2);
strStrCat();
strBindString (STR_SRC_STRING, string1);
strBindFileDescriptor(STR_OUTPUT, 1);
strPutStrLn();
strFlush();

Open remote post (opens in a new window)
Rectus , @rectus@peoplemaking.games
(open profile)

@hikari it has asynchronous command recording and resource state barriers instead

copying stuff feels like having to do something like this:

VkCommandBufferBeginInfo beginInfo{ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;

vkBeginCommandBuffer(commandBuffer, &beginInfo);

vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 2, {src_barrier, dst_barrier});

vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, bufferLayout, 0, 1, &descriptorSets, 0, nullptr);

vkCopyBuffers(1, &dst_buffer, 1, &src_buffer, offset, size, nullptr);

vkEndCommandBuffer(commandBuffer);

VkSubmitInfo submitInfo{ VK_STRUCTURE_TYPE_SUBMIT_INFO };
submitInfo.commandBufferCount = 1;
submitInfo.pCommandBuffers = &commandBuffer;

vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
vkQueueWaitIdle(queue);

Open remote post (opens in a new window)