From 3dfd6463d62e86ab490281d68064d445e3300d3c Mon Sep 17 00:00:00 2001 From: korenkonder Date: Tue, 27 Jan 2026 19:31:23 +0300 Subject: [PATCH] Vulkan: Fixed calc of stride in glVertexAttribPointer if stride is 0 --- src/CRE/Vulkan/gl_wrap.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/CRE/Vulkan/gl_wrap.cpp b/src/CRE/Vulkan/gl_wrap.cpp index 533e5d09..f37dde6e 100644 --- a/src/CRE/Vulkan/gl_wrap.cpp +++ b/src/CRE/Vulkan/gl_wrap.cpp @@ -7210,6 +7210,9 @@ namespace Vulkan { VkFormat format = VK_FORMAT_UNDEFINED; switch (type) { case GL_BYTE: + if (stride == 0) + stride = size * sizeof(int8_t); + switch (size) { case 1: format = VK_FORMAT_R8_SINT; @@ -7225,6 +7228,9 @@ namespace Vulkan { } break; case GL_UNSIGNED_BYTE: + if (stride == 0) + stride = size * sizeof(uint8_t); + switch (size) { case 1: format = VK_FORMAT_R8_UINT; @@ -7240,6 +7246,9 @@ namespace Vulkan { } break; case GL_SHORT: + if (stride == 0) + stride = size * sizeof(int16_t); + switch (size) { case 1: format = VK_FORMAT_R16_SINT; @@ -7256,6 +7265,9 @@ namespace Vulkan { } break; case GL_UNSIGNED_SHORT: + if (stride == 0) + stride = size * sizeof(uint16_t); + switch (size) { case 1: format = VK_FORMAT_R16_UINT; @@ -7300,6 +7312,9 @@ namespace Vulkan { VkFormat format = VK_FORMAT_UNDEFINED; switch (type) { case GL_BYTE: + if (stride == 0) + stride = size * sizeof(int8_t); + if (normalized) switch (size) { case 1: @@ -7331,6 +7346,9 @@ namespace Vulkan { } break; case GL_UNSIGNED_BYTE: + if (stride == 0) + stride = size * sizeof(uint8_t); + if (normalized) switch (size) { case 1: @@ -7362,6 +7380,9 @@ namespace Vulkan { } break; case GL_SHORT: + if (stride == 0) + stride = size * sizeof(int16_t); + if (normalized) switch (size) { case 1: @@ -7394,6 +7415,9 @@ namespace Vulkan { } break; case GL_UNSIGNED_SHORT: + if (stride == 0) + stride = size * sizeof(uint16_t); + if (normalized) switch (size) { case 1: @@ -7426,6 +7450,9 @@ namespace Vulkan { } break; case GL_FLOAT: + if (stride == 0) + stride = size * sizeof(float_t); + switch (size) { case 1: format = VK_FORMAT_R32_SFLOAT; @@ -7442,6 +7469,9 @@ namespace Vulkan { } break; case GL_HALF_FLOAT: + if (stride == 0) + stride = size * sizeof(half_t); + switch (size) { case 1: format = VK_FORMAT_R16_SFLOAT; @@ -7458,10 +7488,16 @@ namespace Vulkan { } break; case GL_UNSIGNED_INT_2_10_10_10_REV: + if (stride == 0) + stride = sizeof(uint32_t); + if (size == 4) format = VK_FORMAT_A2B10G10R10_UNORM_PACK32; break; case GL_INT_2_10_10_10_REV: + if (stride == 0) + stride = sizeof(uint32_t); + if (size == 4) format = VK_FORMAT_A2B10G10R10_SNORM_PACK32; break;