Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1d5fc70

Browse files
committed
Remove shader bytecode alignment logic (thanks Stefan Lickl)
1 parent 2c52578 commit 1d5fc70

20 files changed

Lines changed: 25 additions & 101 deletions

03_Drawing_a_triangle/02_Graphics_pipeline_basics/01_Shader_modules.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -362,17 +362,17 @@ Creating a shader module is simple, we only need to specify a pointer to the
362362
buffer with the bytecode and the length of it. This information is specified in
363363
a `VkShaderModuleCreateInfo` structure. The one catch is that the size of the
364364
bytecode is specified in bytes, but the bytecode pointer is a `uint32_t` pointer
365-
rather than a `char` pointer. Therefore we need to temporarily copy the bytecode
366-
to a container that has the right alignment for `uint32_t`:
365+
rather than a `char` pointer. Therefore we will need to cast the pointer with
366+
`reinterpret_cast` as shown below. When you perform a cast like this, you also
367+
need to ensure that the data satisfies the alignment requirements of `uint32_t`.
368+
Lucky for us, the data is stored in an `std::vector` where the default allocator
369+
already ensures that the data satisfies the worst case alignment requirements.
367370
368371
```c++
369372
VkShaderModuleCreateInfo createInfo = {};
370373
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
371374
createInfo.codeSize = code.size();
372-
373-
std::vector<uint32_t> codeAligned(code.size() / sizeof(uint32_t) + 1);
374-
memcpy(codeAligned.data(), code.data(), code.size());
375-
createInfo.pCode = codeAligned.data();
375+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
376376
```
377377

378378
The `VkShaderModule` can then be created with a call to `vkCreateShaderModule`:

code/command_buffers.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -574,11 +574,7 @@ class HelloTriangleApplication {
574574
VkShaderModuleCreateInfo createInfo = {};
575575
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
576576
createInfo.codeSize = code.size();
577-
578-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
579-
memcpy(codeAligned.data(), code.data(), code.size());
580-
581-
createInfo.pCode = codeAligned.data();
577+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
582578

583579
VkShaderModule shaderModule;
584580
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

code/depth_buffering.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,11 +1291,7 @@ class HelloTriangleApplication {
12911291
VkShaderModuleCreateInfo createInfo = {};
12921292
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
12931293
createInfo.codeSize = code.size();
1294-
1295-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
1296-
memcpy(codeAligned.data(), code.data(), code.size());
1297-
1298-
createInfo.pCode = codeAligned.data();
1294+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
12991295

13001296
VkShaderModule shaderModule;
13011297
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

code/descriptor_layout.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -930,11 +930,7 @@ class HelloTriangleApplication {
930930
VkShaderModuleCreateInfo createInfo = {};
931931
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
932932
createInfo.codeSize = code.size();
933-
934-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
935-
memcpy(codeAligned.data(), code.data(), code.size());
936-
937-
createInfo.pCode = codeAligned.data();
933+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
938934

939935
VkShaderModule shaderModule;
940936
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

code/descriptor_set.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -984,11 +984,7 @@ class HelloTriangleApplication {
984984
VkShaderModuleCreateInfo createInfo = {};
985985
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
986986
createInfo.codeSize = code.size();
987-
988-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
989-
memcpy(codeAligned.data(), code.data(), code.size());
990-
991-
createInfo.pCode = codeAligned.data();
987+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
992988

993989
VkShaderModule shaderModule;
994990
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

code/fixed_functions.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -425,11 +425,7 @@ class HelloTriangleApplication {
425425
VkShaderModuleCreateInfo createInfo = {};
426426
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
427427
createInfo.codeSize = code.size();
428-
429-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
430-
memcpy(codeAligned.data(), code.data(), code.size());
431-
432-
createInfo.pCode = codeAligned.data();
428+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
433429

434430
VkShaderModule shaderModule;
435431
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

code/framebuffers.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,7 @@ class HelloTriangleApplication {
510510
VkShaderModuleCreateInfo createInfo = {};
511511
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
512512
createInfo.codeSize = code.size();
513-
514-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
515-
memcpy(codeAligned.data(), code.data(), code.size());
516-
517-
createInfo.pCode = codeAligned.data();
513+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
518514

519515
VkShaderModule shaderModule;
520516
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

code/graphics_pipeline_complete.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -481,11 +481,7 @@ class HelloTriangleApplication {
481481
VkShaderModuleCreateInfo createInfo = {};
482482
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
483483
createInfo.codeSize = code.size();
484-
485-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
486-
memcpy(codeAligned.data(), code.data(), code.size());
487-
488-
createInfo.pCode = codeAligned.data();
484+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
489485

490486
VkShaderModule shaderModule;
491487
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

code/hello_triangle.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -646,11 +646,7 @@ class HelloTriangleApplication {
646646
VkShaderModuleCreateInfo createInfo = {};
647647
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
648648
createInfo.codeSize = code.size();
649-
650-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
651-
memcpy(codeAligned.data(), code.data(), code.size());
652-
653-
createInfo.pCode = codeAligned.data();
649+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
654650

655651
VkShaderModule shaderModule;
656652
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

code/index_buffer.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -868,11 +868,7 @@ class HelloTriangleApplication {
868868
VkShaderModuleCreateInfo createInfo = {};
869869
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
870870
createInfo.codeSize = code.size();
871-
872-
std::vector<uint32_t> codeAligned(code.size() / 4 + 1);
873-
memcpy(codeAligned.data(), code.data(), code.size());
874-
875-
createInfo.pCode = codeAligned.data();
871+
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
876872

877873
VkShaderModule shaderModule;
878874
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {

0 commit comments

Comments
 (0)