From 82f0785caed36a268f861d516e4587e224f86d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Con=C3=A1l?= Date: Mon, 5 Feb 2024 13:21:25 -0500 Subject: [PATCH] Fixed uniform buffer padding issue, still dealing with tesselation error --- Renderer/Renderer.cpp | 2 ++ Renderer/Renderer.hpp | 2 +- Renderer/UniformBuffer.cpp | 14 ++++++++++++++ Renderer/UniformBuffer.hpp | 4 ++++ Scene/Terrain.cpp | 1 - assets/shaders/terrain.frag | 2 +- assets/shaders/terrain.tesc | 9 +++++++++ assets/shaders/terrain.tesc.spv | Bin 6032 -> 3728 bytes assets/shaders/terrain.tese | 2 +- assets/shaders/terrain.tese.spv | Bin 4500 -> 4536 bytes 10 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index 0729e0f..8e91a41 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -223,6 +223,8 @@ Renderer::Renderer(Window& win) : win(win) { terrain_pipeline = std::make_unique(dev, terrain_shaders, swapchain->extent, *render_pass, bindings, *terrain->vertex_buffer, GraphicsPipeline::eTERRAIN); + terrain_pipeline->update(1, textures[1]); + for (auto& shader : shaders) shader.cleanup(); for (auto& shader : terrain_shaders) diff --git a/Renderer/Renderer.hpp b/Renderer/Renderer.hpp index b884cc1..a979110 100644 --- a/Renderer/Renderer.hpp +++ b/Renderer/Renderer.hpp @@ -73,6 +73,6 @@ struct Renderer { float speed = 1.0; bool running = true; - float tess_factor = 5.0f; + float tess_factor = 1.0f; float tess_edge_size = 20.0f; }; diff --git a/Renderer/UniformBuffer.cpp b/Renderer/UniformBuffer.cpp index bf4a613..eb09353 100644 --- a/Renderer/UniformBuffer.cpp +++ b/Renderer/UniformBuffer.cpp @@ -1,10 +1,24 @@ #include +#include + UniformBuffer::UniformBuffer(vk::PhysicalDevice phys_dev, vk::Device dev) { buffer = std::make_unique(phys_dev, dev, sizeof(UniformData), vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostVisible ); + + Log::debug("Offset of view: %zu\n", offsetof(UniformData, view)); + Log::debug("Offset of proj: %zu\n", offsetof(UniformData, proj)); + Log::debug("Offset of time: %zu\n", offsetof(UniformData, time)); + Log::debug("Offset of pad0: %zu\n", offsetof(UniformData, pad0)); + Log::debug("Offset of pad1: %zu\n", offsetof(UniformData, pad1)); + Log::debug("Offset of pad2: %zu\n", offsetof(UniformData, pad2)); + Log::debug("Offset of cam_pos: %zu\n", offsetof(UniformData, cam_pos)); + Log::debug("Offset of viewport: %zu\n", offsetof(UniformData, viewport)); + Log::debug("Offset of tess_factor: %zu\n", offsetof(UniformData, tess_factor)); + Log::debug("Offset of tess_edge_size: %zu\n", offsetof(UniformData, tess_edge_size)); + } void UniformBuffer::upload(const UniformData& data) { diff --git a/Renderer/UniformBuffer.hpp b/Renderer/UniformBuffer.hpp index 1b5f69b..9b41513 100644 --- a/Renderer/UniformBuffer.hpp +++ b/Renderer/UniformBuffer.hpp @@ -13,7 +13,11 @@ struct UniformData { glm::mat4 view; glm::mat4 proj; float time; + float pad0; + float pad1; + float pad2; glm::vec3 cam_pos; + float pad3; glm::vec2 viewport; float tess_factor; float tess_edge_size; diff --git a/Scene/Terrain.cpp b/Scene/Terrain.cpp index 655f05b..ffede70 100644 --- a/Scene/Terrain.cpp +++ b/Scene/Terrain.cpp @@ -5,7 +5,6 @@ float Terrain::getHeight(int32_t x, int32_t y) { - Log::debug("Height queried at %d, %d\n", x, y); if (x < 0) x += 64; if (y < 0) diff --git a/assets/shaders/terrain.frag b/assets/shaders/terrain.frag index a0c74d2..c5bd585 100644 --- a/assets/shaders/terrain.frag +++ b/assets/shaders/terrain.frag @@ -19,4 +19,4 @@ layout (set = 0, binding = 1) uniform sampler2D tex; void main() { FragColor = vec4(1.0); -} \ No newline at end of file +} \ No newline at end of file diff --git a/assets/shaders/terrain.tesc b/assets/shaders/terrain.tesc index cf806ab..d70c88c 100644 --- a/assets/shaders/terrain.tesc +++ b/assets/shaders/terrain.tesc @@ -45,12 +45,21 @@ float screen_space_tess(vec4 p0, vec4 p1) { } void main() { + if(gl_InvocationID == 0) { + /* gl_TessLevelOuter[0] = screen_space_tess(gl_in[3].gl_Position, gl_in[0].gl_Position); gl_TessLevelOuter[1] = screen_space_tess(gl_in[0].gl_Position, gl_in[1].gl_Position); gl_TessLevelOuter[2] = screen_space_tess(gl_in[1].gl_Position, gl_in[2].gl_Position); gl_TessLevelOuter[3] = screen_space_tess(gl_in[2].gl_Position, gl_in[3].gl_Position); gl_TessLevelInner[0] = mix(gl_TessLevelOuter[0], gl_TessLevelOuter[3], 0.5); + gl_TessLevelInner[1] = mix(gl_TessLevelOuter[2], gl_TessLevelOuter[1], 0.5);*/ + + gl_TessLevelOuter[0] = tess_factor; + gl_TessLevelOuter[1] = tess_factor; + gl_TessLevelOuter[2] = tess_factor; + gl_TessLevelOuter[3] = tess_factor; + gl_TessLevelInner[0] = mix(gl_TessLevelOuter[0], gl_TessLevelOuter[3], 0.5); gl_TessLevelInner[1] = mix(gl_TessLevelOuter[2], gl_TessLevelOuter[1], 0.5); } diff --git a/assets/shaders/terrain.tesc.spv b/assets/shaders/terrain.tesc.spv index 541f227a55417bf84eda1def3ee791ef0ea8b3e0..d046df47394bce63db3420eb9ffc20000c937217 100644 GIT binary patch literal 3728 zcmZQ(Qf6mhU}WHC;AJRdfB-=TCI)5(1_o{hHU>rp1_pPZU?08Wk`z4?Qv;9+KCmoE z7Xt%7g8*0!3j+f~ZenI0NS=d%fkA|Ufx(c0fx(4=fx(M`fgzZIfgzlMfgyo`fgy!~ zfgu~Do`HcufPsYpq*sc80ZcP9Ff%YQFfbfq1o62T+VzG)xQ>ZUsg8S;%4_f0bnBrXq`h!Z|rHH@+ahn1PLf4QvM}JV53ZfYz%HV+yoNG<|dFh zE;oVXaJdO2hs#Z%beoC+Kw+tt#HoIF9M}; zP?`bJNJ0!Cb3kby9N}Pdm>EFkf#M&ezLbH1AtN<2J)h3!7+An*m79S9OuI8M zgVQKKR1TESKyo1L!N3Ae51{Y?r4xeGW+a zKw=1ekURkjTada2Bz2%L1&K{S5(A}ckk|qwF_3*Au@y*Sp!5t9TLbnZGuTfcJKPyq zz-d|u>K7Pa5zc1@r*l}?fXW|GxbQ&D2Blk&Qji#k289Jk4CE(}7>I_6f$Rf`f&2jz z1F=D3Ab)`30i+kC4kQmsM<6pn@*o-}1~L;Q2BKkNAUz;4ka;jM5E~>0GaFWDdwo0R{#J5F4ZnqzA+ogw_i(3@i*n450dkfdM22vQwCW0bCP-#6fm~_@Mj% z3QKVY76wtMdQg~3Ft9L)F))C|KzxwAI8+{{UINMog_9fuCpg`K^nftPognovH6T97 z4WN1pq#jf^fZPD$gUVfy7|0Kx@Q?xLbCBOy7-ShBVF=R?@-N7K5Fe%<6c@v zI0gm=P#S{S9}krWiG$1o@j>|+W`7b?Jp0F~7sF;H3Yoq?Hw z52TTSf#DYe3j;`wmw^E+1~Lc4c4S}$=P6Km2FiD!yaqBGI<Rl3rHN~H;_6| z8R7@(1AxmqHU?1H5&-SvfXoA_1KAA{1E~Y)0ofG-H5R*t4P??Yp?RSC1L25wd zK?bOe4fYEw1E`z;byh%S56CQ#9UwkP4M;u6jvO>QK%G699Uy`+gv^Kz4xmAT@s(7#S=W7#RR^#vS_r literal 6032 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 diff --git a/assets/shaders/terrain.tese b/assets/shaders/terrain.tese index c6ce865..614c8b3 100644 --- a/assets/shaders/terrain.tese +++ b/assets/shaders/terrain.tese @@ -39,7 +39,7 @@ void main() { vec4 pos2 = mix(gl_in[3].gl_Position, gl_in[2].gl_Position, gl_TessCoord.x); vec4 fpos = mix(pos1, pos2, gl_TessCoord.y); - fpos.y += textureLod(heightmap, _texCoord, 0.0).r; + fpos.y += 5.0 * textureLod(heightmap, _texCoord, 0.0).r; _pos = fpos.xyz; gl_Position = proj * view * fpos; diff --git a/assets/shaders/terrain.tese.spv b/assets/shaders/terrain.tese.spv index ab18d3a167c311a97e95bb01e2ad23c47fe44617..2c6ff04c0e8d3a86bfdc66f145c9e845892d7bc3 100644 GIT binary patch delta 1235 zcmbQDyhE9nnMs+Qfq{{Mn}L^M#zfwD&SnM%h7JY>hUptiUo$e6PflbK76ggK7vvW+ zFfcH%GO#hUO44i14BVkeimG8av-y?F31FC1_p-Y#9Xiw*cjNrrm`?FFn~-b z$S*2^=wM^$nmmzNoUv>2N@i)^9*`i|z03^LCtqaV?h3L@2`cK&z`_9HD>8sQ&%glU zgM2B+z`(%7z`)?az{=1DRm%;f!D5pgS%eweCO>2mt_R73Tn3T{xyGG=8LS7Qp9Snn zkXBZxc_5#F_{tyxO^ls^fk6N)2GIu!3uJvDK1iPfSPeJ~Cl|8{+Jejk*$0wqK*%wG z+yxSwfFuTTBS>rkOlddkOx|z^8O4Q4B`w746O_d3?Q+V z$rlBL>p?*c5&@Y83Wh!g1_n^jh%hiPfJ^`dNk0Pv14taE29)AJYCx$Ore-1o0|Q8W z5(6tZGA1!FFo5)d#6fC6E}0B<$wUTLa5zn2U@&9=DFjJ?344i14BVkeimG8av-y?F31FC1_p-Y#9Xiw*cjNrrm`?FFn~-b z$S*2^=wM^$m^_hLoUvo_N@i)^E|4JDz03?#CtqaV?pnscz@P*bb!T8<0Pz(WK%Qq{ z0P#V-lw)9EU}9ik@L*tNXo0HbhSFfM$&M_-j4hKNvIy6MGf&cMJR02YJj1BC^$J`f+I&jG9k9EOvNSp{uDW`gVk$u%J4 z7(ng#XBgh0c1_lO@%o+wzNHBw44l)%KDxh#g4mA)T6lx$( zfaIrc7G+CjVwGgzWGJ58%b^?#iVaX)D=@Gyl!8<-Fff3`tf72Ru!DrP8CV!V7FU8e z3=9k)^)(C(44|L@iG$R8F)%QIq6Op~IdH<`SnU2k8d!L7oD6803a-s60pqh(8%>8^}bE zdUH_b*u0lBo~<6_El?5$dC8W61?=<+1_lNl1_p)*26nI`su&m;Kx#nZAS*!L4Fu;R z28L<|1_qEkC8tl)&!644Sz|hRVzyJ~hVUPnrNetvbkX}%jgXBSG zgTkYSfq?-OMj}v0fx@Pjp`L*OBmq;@2UP@0#~@2ViuxHC7(n8a7+As40!oj)3=9k) zagZ92!zMx