diff --git a/.vscode/launch.json b/.vscode/launch.json index 9552433..d523901 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,7 +8,7 @@ "preLaunchTask": "Build", "expressions": "native", "cwd": "${workspaceFolder}", - "program": "${workspaceFolder}/build/evk" + "program": "${workspaceFolder}/build/samples/descriptor_heap/descriptor_heap" } ] -} +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 97dd860..64de242 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -23,7 +23,7 @@ { "label": "Run", "type": "shell", - "command": "./build/evk", + "command": "./build/samples/descriptor_heap/descriptor_heap", "windows": { "command": "build/evk.exe" }, @@ -37,4 +37,4 @@ "dependsOrder": "sequence" } ] -} +} \ No newline at end of file diff --git a/evk/evkBuffer.c b/evk/evkBuffer.c index f61c834..644a297 100644 --- a/evk/evkBuffer.c +++ b/evk/evkBuffer.c @@ -18,11 +18,11 @@ evkBuffer evkCreateBuffer(evkDevice* device, evkBufferCreateInfo createInfo) if(buffer.vk != VK_NULL_HANDLE) { - buffer.sizeInBytes = createInfo.sizeInBytes; - buffer.address = vkGetBufferDeviceAddressKHR(device->vk, &(VkBufferDeviceAddressInfo){ - .sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + buffer.addressRange.address = vkGetBufferDeviceAddressKHR(device->vk, &(VkBufferDeviceAddressInfo){ + .sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, .buffer = buffer.vk }); + buffer.addressRange.size = createInfo.sizeInBytes; } return buffer; @@ -31,4 +31,4 @@ evkBuffer evkCreateBuffer(evkDevice* device, evkBufferCreateInfo createInfo) void evkDestroyBuffer(evkBuffer buf) { evkGPUDestroyBuffer(buf); -} +} \ No newline at end of file diff --git a/evk/evkDescriptor.c b/evk/evkDescriptor.c index f91a782..08d27a0 100644 --- a/evk/evkDescriptor.c +++ b/evk/evkDescriptor.c @@ -137,8 +137,8 @@ void evkSetDescriptor(evkDescriptorSet* set, evstring name, evkBuffer* buf) VkDescriptorAddressInfoEXT addressInfo = { VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT, - .address = buf->address, - .range = buf->sizeInBytes, + .address = buf->addressRange.address, + .range = buf->addressRange.size, .format = VK_FORMAT_UNDEFINED, }; @@ -168,7 +168,7 @@ void evkCmdBindDescriptorSets(evkCommandBuffer* cmdbuf, evkPipeline* pipeline, v { bindingInfos[i] = (VkDescriptorBufferBindingInfoEXT) { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT, - .address = sets[setIndices[i]].buffer.address, + .address = sets[setIndices[i]].buffer.addressRange.address, .usage = sets[setIndices[i]].buffer.usage, }; setOffsets[i] = offset; @@ -177,10 +177,10 @@ void evkCmdBindDescriptorSets(evkCommandBuffer* cmdbuf, evkPipeline* pipeline, v vkCmdBindDescriptorBuffersEXT(cmdbuf->vk, bindingCount, bindingInfos); - vkCmdSetDescriptorBufferOffsetsEXT(cmdbuf->vk, - (VkPipelineBindPoint)pipeline->type, - pipeline->layout.vk, - 0, bindingCount, - actualSetIndices, + vkCmdSetDescriptorBufferOffsetsEXT(cmdbuf->vk, + (VkPipelineBindPoint)pipeline->type, + pipeline->layout.vk, + 0, bindingCount, + actualSetIndices, setOffsets); -} +} \ No newline at end of file diff --git a/evk/evkDevice.c b/evk/evkDevice.c index 3a07d6e..5c2e8e8 100644 --- a/evk/evkDevice.c +++ b/evk/evkDevice.c @@ -27,6 +27,25 @@ VkPhysicalDeviceDescriptorBufferFeaturesEXT descriptorBufFeature = { // ) }; +VkPhysicalDeviceDescriptorHeapFeaturesEXT descriptorHeapFeature = { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT, + .descriptorHeap = VK_TRUE, + + EV_DEBUG( + .descriptorHeapCaptureReplay = VK_TRUE, + ) +}; + +VkPhysicalDeviceShaderUntypedPointersFeaturesKHR shaderUntypedPointersFeature = { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR, + .shaderUntypedPointers = VK_TRUE, +}; + +VkPhysicalDeviceShaderObjectFeaturesEXT shaderObjectFeature = { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT, + .shaderObject = VK_TRUE, +}; + typedef struct { evstring name; void* data; @@ -34,7 +53,10 @@ typedef struct { } evkDeviceExtension; const evkDeviceExtension evkSupportedExtensions[] = { - { evstr(VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME) , &descriptorBufFeature , &descriptorBufFeature.pNext }, + { evstr(VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME) , &descriptorBufFeature , &descriptorBufFeature.pNext }, + { evstr(VK_EXT_DESCRIPTOR_HEAP_EXTENSION_NAME) , &descriptorHeapFeature , &descriptorHeapFeature.pNext }, + { evstr(VK_KHR_SHADER_UNTYPED_POINTERS_EXTENSION_NAME), &shaderUntypedPointersFeature, &shaderUntypedPointersFeature.pNext }, + { evstr(VK_EXT_SHADER_OBJECT_EXTENSION_NAME) , &shaderObjectFeature , &shaderObjectFeature.pNext }, }; const u32 evkSupportedExtensionsCount = EV_ARRSIZE(evkSupportedExtensions); diff --git a/evk/evkPipeline.c b/evk/evkPipeline.c index 9764c49..210515c 100644 --- a/evk/evkPipeline.c +++ b/evk/evkPipeline.c @@ -59,8 +59,14 @@ evkPipeline evkCreateGraphicsPipeline(evkDevice device, evkPipelineCreateInfo cr for(int i = 0; i < colorAttachmentCount; i++) colorAttachmentFormats[i] = createInfo.colorAttachments[i].format; + VkPipelineCreateFlags2CreateInfo pipelineCreateFlags2CreateInfo = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO, + .flags = VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT, + }; + VkPipelineRenderingCreateInfoKHR pipelineRenderingCreateInfo = { .sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR, + .pNext = &pipelineCreateFlags2CreateInfo, .colorAttachmentCount = colorAttachmentCount, .pColorAttachmentFormats = colorAttachmentFormats, .depthAttachmentFormat = createInfo.depthAttachmentFormat, @@ -191,13 +197,13 @@ evkPipeline evkCreateGraphicsPipeline(evkDevice device, evkPipelineCreateInfo cr } else { - assert(!"Set Layout construction through shader reflection not implemented yet."); + // assert(!"Set Layout construction through shader reflection not implemented yet."); } VkGraphicsPipelineCreateInfo graphicsPipelineCreateInfo = { .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, .pNext = &pipelineRenderingCreateInfo, - .flags = VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, + .flags = 0, .stageCount = shaderStageCount, .pStages = shaderStageCreateInfos, .pVertexInputState = &vertexInputStateCreateInfo, @@ -210,6 +216,8 @@ evkPipeline evkCreateGraphicsPipeline(evkDevice device, evkPipelineCreateInfo cr .layout = res.layout.vk, }; + + EVK_CHECK(vkCreateGraphicsPipelines(device.vk, VK_NULL_HANDLE, 1, &graphicsPipelineCreateInfo, NULL, &res.vk)); res._device = device; diff --git a/evk/evkShader.c b/evk/evkShader.c index f5f7a42..9b28968 100644 --- a/evk/evkShader.c +++ b/evk/evkShader.c @@ -13,7 +13,7 @@ evkShader evkInitShaderFromBytes(evkDevice device, const u8* shaderBytes, u32 sh }; vkCreateShaderModule(device.vk, &createInfo, NULL, &shader.vk); - shader.reflect = evkGenerateShaderReflectionData(shaderBytes, shaderLen); + // shader.reflect = evkGenerateShaderReflectionData(shaderBytes, shaderLen); return shader; } @@ -96,6 +96,7 @@ evkShaderCompiler evkCreateShaderCompiler() evkShaderCompiler compiler; compiler.sc = shaderc_compiler_initialize(); compiler.scopt = shaderc_compile_options_initialize(); + shaderc_compile_options_set_target_spirv(compiler.scopt, shaderc_spirv_version_1_3); shaderc_compile_options_set_include_callbacks(compiler.scopt, _shader_include_resolve, _shader_include_release, NULL); shaderc_compile_options_set_generate_debug_info(compiler.scopt); return compiler; @@ -107,7 +108,7 @@ void evkDestroyShaderCompiler(evkShaderCompiler compiler) shaderc_compiler_release(compiler.sc); } -evkShader evkInitShaderFromString(evkDevice device, evkShaderCompiler compiler,evstring shaderName, evstring shaderText) +evkShader evkInitShaderFromString(evkDevice device, evkShaderCompiler compiler,evstring shaderName, evstring shaderText, VkShaderStageFlags stage) { shaderc_compilation_result_t compilation_result = shaderc_compile_into_spv(compiler.sc, shaderText, evstring_getLength(shaderText), shaderc_glsl_infer_from_source, shaderName, "main", compiler.scopt); @@ -121,12 +122,14 @@ evkShader evkInitShaderFromString(evkDevice device, evkShaderCompiler compiler,e ev_log_error("Errors:\n%s", shaderc_result_get_error_message(compilation_result)); } - return evkInitShaderFromBytes(device, (u8*)shaderc_result_get_bytes(compilation_result), shaderc_result_get_length(compilation_result)); + evkShader res = evkInitShaderFromBytes(device, (u8*)shaderc_result_get_bytes(compilation_result), shaderc_result_get_length(compilation_result)); + res.reflect.stage = stage; + return res; } evkShader evkInitShaderFromFile(evkDevice device, evkShaderCompiler compiler, evstring shaderPath) { evstring shaderText = evstring_readFile(shaderPath); - return evkInitShaderFromString(device, compiler, shaderPath, shaderText); + return evkInitShaderFromString(device, compiler, shaderPath, shaderText, 0); } VkPipelineShaderStageCreateInfo evkGetShaderStageCreateInfo(evkShader shader) diff --git a/evk/evkShader.h b/evk/evkShader.h index 26141e4..03909f1 100644 --- a/evk/evkShader.h +++ b/evk/evkShader.h @@ -5,7 +5,7 @@ [[nodiscard("Leaking VkShaderModule")]] evkShader evkInitShaderFromBytes(evkDevice device, const u8* shaderBytes, u32 shaderLen); [[nodiscard("Leaking VkShaderModule")]] -evkShader evkInitShaderFromString(evkDevice device, evkShaderCompiler compiler, evstring shaderName, evstring shaderText); +evkShader evkInitShaderFromString(evkDevice device, evkShaderCompiler compiler, evstring shaderName, evstring shaderText, VkShaderStageFlags stage); [[nodiscard("Leaking VkShaderModule")]] evkShader evkInitShaderFromFile(evkDevice device, evkShaderCompiler compiler, evstring shaderPath); void evkDestroyShader(evkDevice device, evkShader shader); diff --git a/evk/evkTypes.h b/evk/evkTypes.h index 6d60bf7..c2c65f4 100644 --- a/evk/evkTypes.h +++ b/evk/evkTypes.h @@ -26,7 +26,7 @@ TYPEDATA_GEN(VkRenderingAttachmentInfoKHR, .clearValue = (VkClearValue){{{0.f, 0.f, 0.f, 1.f}}}, ) ); -TYPEDATA_GEN(VkViewport, +TYPEDATA_GEN(VkViewport, DEFAULT( .x = 0, .y = 0, @@ -65,11 +65,11 @@ TYPEDATA_GEN(VkImageMemoryBarrier, ) ) -TYPEDATA_GEN(VkRect2D, +TYPEDATA_GEN(VkRect2D, DEFAULT(0) ) -TYPEDATA_GEN(VkRenderingInfo, +TYPEDATA_GEN(VkRenderingInfo, DEFAULT( .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, .flags = 0, @@ -365,9 +365,8 @@ typedef struct { typedef struct { VkBuffer vk; evkGPUAllocationData allocData; - u32 sizeInBytes; VkBufferUsageFlags usage; - VkDeviceAddress address; + VkDeviceAddressRangeEXT addressRange; } evkBuffer; typedef struct { @@ -522,7 +521,7 @@ typedef struct { evkPipeline* boundPipeline; } evkCommandBuffer; -TYPEDATA_GEN(evkInstance, +TYPEDATA_GEN(evkInstance, INVALID( .vk = VK_NULL_HANDLE, ) @@ -561,7 +560,7 @@ TYPEDATA_GEN(evkImageViewCreateInfo, TYPEDATA_GEN(evkAllocationUserData, INVALID(__EV_VEC_EMPTY_ARRAY)); TYPEDATA_GEN(evkDeviceQueueRequirement); -TYPEDATA_GEN(evkViewport, +TYPEDATA_GEN(evkViewport, DEFAULT( .x = 0, .y = 0, @@ -578,7 +577,7 @@ TYPEDATA_GEN(evkViewport, TYPEDATA_GEN(evkColorAttachment); -TYPEDATA_GEN(evkPipelineCreateInfo, +TYPEDATA_GEN(evkPipelineCreateInfo, DEFAULT( .type = EVK_PIPELINE_TYPE_GRAPHICS, .dynamicStates = EV_VEC_EMPTY, @@ -598,4 +597,4 @@ TYPEDATA_GEN(evkDescriptorBinding); TYPEDATA_GEN(evkDescriptorSetLayout); TYPEDATA_GEN(evkDescriptorSet); -TYPEDATA_GEN(evkCommandBuffer); +TYPEDATA_GEN(evkCommandBuffer); \ No newline at end of file diff --git a/meson.build b/meson.build index c79e537..e6a9077 100644 --- a/meson.build +++ b/meson.build @@ -31,8 +31,8 @@ disabled_warnings = { } subproject('evol-headers', default_options: {'build_tests': false}) -subproject('volk') -subproject('shaderc') +# subproject('volk') +# subproject('shaderc') evk_c_args = [] diff --git a/samples/descriptor_heap/descriptor_heap.c b/samples/descriptor_heap/descriptor_heap.c index 5695019..4a337be 100644 --- a/samples/descriptor_heap/descriptor_heap.c +++ b/samples/descriptor_heap/descriptor_heap.c @@ -62,7 +62,10 @@ int main(void) evstr("VK_KHR_synchronization2"), evstr("VK_KHR_buffer_device_address"), evstr("VK_EXT_descriptor_indexing"), - evstr("VK_EXT_descriptor_buffer"), + evstr("VK_KHR_maintenance5"), + evstr("VK_EXT_descriptor_heap"), + evstr(VK_EXT_SHADER_OBJECT_EXTENSION_NAME), + evstr(VK_KHR_SHADER_UNTYPED_POINTERS_EXTENSION_NAME), }), }); @@ -121,8 +124,8 @@ int main(void) evstring vertexShaderText = evstring_new(vertexShaderBytes); evstring fragmentShaderText = evstring_new(fragmentShaderBytes); - evkShader vertShader = evkInitShaderFromString(device, compiler, evstr("heap_triangle.vert"),vertexShaderText); - evkShader fragShader = evkInitShaderFromString(device, compiler, evstr("heap_triangle.frag"), fragmentShaderText); + evkShader vertShader = evkInitShaderFromString(device, compiler, evstr("heap_triangle.vert"),vertexShaderText, VK_SHADER_STAGE_VERTEX_BIT); + evkShader fragShader = evkInitShaderFromString(device, compiler, evstr("heap_triangle.frag"), fragmentShaderText, VK_SHADER_STAGE_FRAGMENT_BIT); evstring_free(vertexShaderText); evstring_free(fragmentShaderText); @@ -148,7 +151,7 @@ int main(void) // ); // evkDescriptorSetLayout setLayout_0 = evkCreateDescriptorSetLayoutFromBindings(&device, vertShader.reflect.bindings); - evkDescriptorSetLayout setLayout_0 = evkCreateDescriptorSetLayoutFromShaders(&device, svec_init(evkShader, {vertShader, fragShader})); + // evkDescriptorSetLayout setLayout_0 = evkCreateDescriptorSetLayoutFromShaders(&device, svec_init(evkShader, {vertShader, fragShader})); evkPipelineCreateInfo pipelineCreateInfo = EV_DEFAULT(evkPipelineCreateInfo, dynamicStates = svec_init(VkDynamicState, { @@ -170,35 +173,20 @@ int main(void) }}, }), - setLayouts = svec_init(evkDescriptorSetLayout, {setLayout_0}), + // setLayouts = svec_init(evkDescriptorSetLayout, {setLayout_0}), ); - evkDescriptorSet set_0 = evkCreateDescriptorSet(&(evkDescriptorSetCreateInfo){ - .device = &device, - .allocator = &allocator, - .layout = &setLayout_0 - }); - - - // // if stageflags is 0, it's all graphics - // // if descriptor count is 0, it's 1 - // // if - // evkDescriptorSetLayout set_0 = evkCreateDescriptorSetLayout(&device, svec_init(evkDescriptorBinding, { - // { "positions", VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER }, - // }) - // ); - - evkBuffer vertBuf = evkCreateBuffer(&device, (evkBufferCreateInfo) { - .queueFamilyIndices = svec_init(u32, {device.queueFamilies[VK_QUEUE_GRAPHICS_BIT].familyIndex}), - .sizeInBytes = 6 * 4, - .usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, - .allocationCreateInfo = { - .allocationFlags = EVK_GPU_ALLOCATION_CREATE_MAPPED_BIT | EVK_GPU_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT, - .allocator = allocator, - }, + evkBuffer resourceDescriptorHeap = evkCreateBuffer(&device, (evkBufferCreateInfo) { + .sizeInBytes = 16 * 4, // bufferDescriptorSize is 16 on my current device + .usage = VK_BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, .exclusive = true, + .allocationCreateInfo = { + .allocationFlags = EVK_GPU_ALLOCATION_CREATE_MAPPED_BIT | EVK_GPU_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT, + .allocator = allocator, + } }); + evkBuffer uniBuf = evkCreateBuffer(&device, (evkBufferCreateInfo) { .sizeInBytes = 12 * 4, .usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, @@ -209,17 +197,25 @@ int main(void) .exclusive = true, }); - float* vert_arr = (float*)vertBuf.allocData.allocationInfo.vma.pMappedData; - vert_arr[0] = 0.0f; vert_arr[1] = -0.5f; - vert_arr[2] = 0.5f; vert_arr[3] = 0.5f; - vert_arr[4] = -0.5f; vert_arr[5] = 0.5f; - float* uni_arr = (float*)uniBuf.allocData.allocationInfo.vma.pMappedData; uni_arr[0] = 0.0f; uni_arr[1] = -0.5f; uni_arr[2] = 0.0f; uni_arr[3] = 1.0f; uni_arr[4] = 0.5f; uni_arr[5] = 0.5f; uni_arr[6] = 0.0f; uni_arr[7] = 1.0f; uni_arr[8] = -0.5f; uni_arr[9] = 0.5f; uni_arr[10] = 0.0f; uni_arr[11] = 1.0f; - evkSetDescriptor(&set_0, evstr("vertexData"), &uniBuf); + // evkSetDescriptor(&set_0, evstr("vertexData"), &uniBuf); + + VkResourceDescriptorInfoEXT resource = { + .sType = VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT, + .type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + .data.pAddressRange = &uniBuf.addressRange + }; + + VkHostAddressRangeEXT descriptor = { + .address = resourceDescriptorHeap.allocData.allocationInfo.vma.pMappedData, + .size = 16 + }; + + vkWriteResourceDescriptorsEXT(device.vk, 1, &resource, &descriptor); VkViewport viewport = EV_DEFAULT(VkViewport, width=width, height=height); VkRect2D scissor = EV_DEFAULT(VkRect2D,extent.width=width, extent.height=height); @@ -268,14 +264,19 @@ int main(void) subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT )); - VkDeviceSize offset = 0; - vkCmdBindVertexBuffers(cmdbuf.vk, 0, 1, &vertBuf.vk, &offset); + // VkDeviceSize offset = 0; + // vkCmdBindVertexBuffers(cmdbuf.vk, 0, 1, &vertBuf.vk, &offset); - evkCmdBindDescriptorSets(&cmdbuf, &graphicsPipeline, svec_init(evkDescriptorSet, { set_0 }), svec_init(u32, { 0 })); + // evkCmdBindDescriptorSets(&cmdbuf, &graphicsPipeline, svec_init(evkDescriptorSet, { set_0 }), svec_init(u32, { 0 })); vkCmdSetScissor(cmdbuf.vk, 0, 1, &scissor); vkCmdSetViewport(cmdbuf.vk, 0, 1, &viewport); + vkCmdBindResourceHeapEXT(cmdbuf.vk, &(VkBindHeapInfoEXT) { + .sType = VK_STRUCTURE_TYPE_BIND_HEAP_INFO_EXT, + .heapRange = resourceDescriptorHeap.addressRange, + }); + vkCmdBeginRenderingKHR(cmdbuf.vk, &renderingInfo); evkCmdBindPipeline(&cmdbuf, &graphicsPipeline); @@ -338,11 +339,11 @@ int main(void) evkDestroyPipeline(graphicsPipeline); - evkDestroyBuffer(vertBuf); + // evkDestroyBuffer(vertBuf); evkDestroyBuffer(uniBuf); - evkDestroyDescriptorSet(&device, &set_0); - evkDestroyDescriptorSetLayout(&device, &setLayout_0); + // evkDestroyDescriptorSet(&device, &set_0); + // evkDestroyDescriptorSetLayout(&device, &setLayout_0); evkDestroyShader(device, vertShader); evkDestroyShader(device, fragShader); diff --git a/samples/descriptor_heap/shaders/heap_triangle.frag b/samples/descriptor_heap/shaders/heap_triangle.frag index 4407c21..7e97017 100644 --- a/samples/descriptor_heap/shaders/heap_triangle.frag +++ b/samples/descriptor_heap/shaders/heap_triangle.frag @@ -1,9 +1,10 @@ #version 450 - #pragma shader_stage(fragment) +#extension GL_EXT_descriptor_heap: require + layout(location = 0) out vec4 outColor; void main() { outColor = vec4(0.f, 1.f, 0.f, 1.f); -} +} \ No newline at end of file diff --git a/samples/descriptor_heap/shaders/heap_triangle.vert b/samples/descriptor_heap/shaders/heap_triangle.vert index 725a2c1..8a1ad24 100644 --- a/samples/descriptor_heap/shaders/heap_triangle.vert +++ b/samples/descriptor_heap/shaders/heap_triangle.vert @@ -1,16 +1,12 @@ #version 450 #pragma shader_stage(vertex) -in layout(location=0) vec2 position; +#extension GL_EXT_descriptor_heap: require -layout(set=0, binding=0) uniform data { +layout(descriptor_heap) uniform data { vec4 positions[3]; -} vertexData; +} vertexData[]; void main() { - // gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); - // gl_Position = vec4(position, 0.0, 1.0); - // gl_Position = vec4(inputData.positions[gl_VertexIndex], 0.0, 1.0); - gl_Position = vertexData.positions[gl_VertexIndex]; - // gl_Position = vec4(position, 0.0, 1.0); + gl_Position = vertexData[0].positions[gl_VertexIndex]; } \ No newline at end of file diff --git a/samples/meson.build b/samples/meson.build index 5bd627f..cf252dd 100644 --- a/samples/meson.build +++ b/samples/meson.build @@ -1,2 +1,2 @@ -subdir('basic_triangle') +# subdir('basic_triangle') subdir('descriptor_heap') \ No newline at end of file diff --git a/subprojects/packagefiles/shaderc/fixes.diff b/subprojects/packagefiles/shaderc/fixes.diff index cfc1f04..bbe7409 100644 --- a/subprojects/packagefiles/shaderc/fixes.diff +++ b/subprojects/packagefiles/shaderc/fixes.diff @@ -14,14 +14,4 @@ index d44f62a..16bad95 100644 + endif() add_subdirectory(${SHADERC_GLSLANG_DIR} glslang) endif() - if (NOT TARGET glslang) -diff --git a/utils/git-sync-deps b/utils/git-sync-deps -index eecfbe9..73df6e5 100755 ---- a/utils/git-sync-deps -+++ b/utils/git-sync-deps -@@ -279,4 +279,4 @@ def main(argv): - - - if __name__ == '__main__': -- exit(main(sys.argv[1:])) -+ sys.exit(main(sys.argv[1:])) + if (NOT TARGET glslang) \ No newline at end of file diff --git a/subprojects/packagefiles/shaderc/meson.build b/subprojects/packagefiles/shaderc/meson.build index 01e75e8..a446dbf 100644 --- a/subprojects/packagefiles/shaderc/meson.build +++ b/subprojects/packagefiles/shaderc/meson.build @@ -2,6 +2,7 @@ project('libshaderc', 'cpp') python = find_program('python3') run_command(python, './utils/git-sync-deps', check: true) +run_command(python, './utils/update_build_version.py', check: true) cmake = import('cmake') opts = cmake.subproject_options() @@ -24,4 +25,4 @@ shaderc_dep = declare_dependency(dependencies: [ shaderc_proj.dependency('GenericCodeGen'), shaderc_proj.dependency('MachineIndependent'), ]) -meson.override_dependency('shaderc', shaderc_dep) +meson.override_dependency('shaderc', shaderc_dep) \ No newline at end of file