From d2b472548f730966d0fdce8ed93314e89f135520 Mon Sep 17 00:00:00 2001 From: Sven Balzer <4653051+Kyuusokuna@users.noreply.github.com> Date: Sat, 1 Aug 2026 13:36:30 +0200 Subject: [PATCH] move per_frame and view_projection matrix into shared file --- src/shaders/spirv/world.spv | Bin 5228 -> 5252 bytes src/shaders/src/basic.slang | 4 ++-- src/shaders/src/grid.slang | 14 ++----------- src/shaders/src/shared.slang | 11 ++++++++++ src/shaders/src/world.slang | 39 ++++++++++------------------------- src/shaders/wgsl/world.wgsl | 35 ++++++++++++++++--------------- 6 files changed, 44 insertions(+), 59 deletions(-) create mode 100644 src/shaders/src/shared.slang diff --git a/src/shaders/spirv/world.spv b/src/shaders/spirv/world.spv index 1654d35d62bf427945a66a2ed44d51884e76a669..b00713863484bac4437956bbeb26491385babadc 100644 GIT binary patch delta 157 zcmaE((W1E_fYF|ffsH|ufq{V)h|`NQQ{ppHGt)ClfP7X48K77}YEgVzQDSZ?SPd(K zDUi-hEQl{jttcriN}b%!7%aoV;13in%SR~8}p delta 135 zcmZqCe50`;fYF?lft^8yfq@|@CqFscP_H1hC_b$yF*g+`!~l{rg~=J{LcBv{{2Cj)|Y0 RK@zB33W_;4&t!Ye3jnZhBl`dV diff --git a/src/shaders/src/basic.slang b/src/shaders/src/basic.slang index d39c65b..9389277 100644 --- a/src/shaders/src/basic.slang +++ b/src/shaders/src/basic.slang @@ -1,5 +1,7 @@ #language 2026 +#include "shared.slang" + struct VertexShaderInput { uint32_t vertex_index : SV_VulkanVertexID; @@ -20,8 +22,6 @@ struct FragmentShaderOutput { float4 color : SV_Target; }; -[vk::binding(0, 1)] ConstantBuffer view_projection_matrix : register(b0, space1); - [shader("vertex")] VertexShaderOutput main_vertex(VertexShaderInput input) { var output: VertexShaderOutput; diff --git a/src/shaders/src/grid.slang b/src/shaders/src/grid.slang index 487b283..d02659a 100644 --- a/src/shaders/src/grid.slang +++ b/src/shaders/src/grid.slang @@ -1,5 +1,7 @@ #language 2026 +#include "shared.slang" + struct VertexShaderInput { uint32_t vertex_index : SV_VulkanVertexID; }; @@ -17,18 +19,6 @@ struct FragmentShaderOutput { float4 color : SV_Target; }; -struct Per_Frame_Data { - int2 drag_start; - int2 mouse; - float2 grid_offset; - uint32_t grid_width; - uint32_t map_width; - uint32_t grid_height; -}; - -[vk::binding(0, 1)] ConstantBuffer view_projection_matrix : register(b0, space1); -[vk::binding(1, 1)] ConstantBuffer per_frame : register(b1, space1); - [shader("vertex")] VertexShaderOutput main_vertex(VertexShaderInput input) { var output: VertexShaderOutput; diff --git a/src/shaders/src/shared.slang b/src/shaders/src/shared.slang new file mode 100644 index 0000000..0fc8dbf --- /dev/null +++ b/src/shaders/src/shared.slang @@ -0,0 +1,11 @@ +struct Per_Frame_Data { + int2 drag_start; + int2 mouse; + float2 grid_offset; + uint32_t grid_width; + uint32_t map_width; + uint32_t grid_height; +}; + +[vk::binding(0, 1)] ConstantBuffer view_projection_matrix : register(b0, space1); +[vk::binding(1, 1)] ConstantBuffer per_frame : register(b1, space1); diff --git a/src/shaders/src/world.slang b/src/shaders/src/world.slang index 6bb9cea..0e69d83 100644 --- a/src/shaders/src/world.slang +++ b/src/shaders/src/world.slang @@ -1,5 +1,6 @@ #language 2026 +#include "shared.slang" #include "wgsl_workaround.slang" struct VertexShaderInput { @@ -18,41 +19,23 @@ struct FragmentShaderOutput { float4 color : SV_Target; }; -struct Per_Frame_Data { - int2 drag_start; - int2 mouse; - float2 grid_offset; - uint32_t grid_width; - uint32_t map_width; -}; - -struct Block0 { - [format("r16ui")] - Texture2D map_texture; -}; - -struct Block1 { - ConstantBuffer view_projection_matrix; - ConstantBuffer per_frame; -}; - -ParameterBlock block0; -ParameterBlock block1; +[format("r16ui")] +[vk::binding(0, 0)] Texture2D map_texture; [shader("vertex")] VertexShaderOutput main_vertex(VertexShaderInput input) { var output: VertexShaderOutput; - let tile_pos = uint32_t2(input.instance_index % block1.per_frame.map_width, input.instance_index / block1.per_frame.map_width); - output.tile = block0.map_texture.Load(uint32_t3(tile_pos, 0)); + let tile_pos = uint32_t2(input.instance_index % per_frame.map_width, input.instance_index / per_frame.map_width); + output.tile = map_texture.Load(uint32_t3(tile_pos, 0)); switch (input.vertex_index) { - case 0: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2(-0.5, 0.5), 0, 1), block1.view_projection_matrix); output.uv = float2(0, 0); } break; - case 1: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2(-0.5, -0.5), 0, 1), block1.view_projection_matrix); output.uv = float2(0, 1); } break; - case 2: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2( 0.5, -0.5), 0, 1), block1.view_projection_matrix); output.uv = float2(1, 1); } break; - case 3: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2(-0.5, 0.5), 0, 1), block1.view_projection_matrix); output.uv = float2(0, 0); } break; - case 4: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2( 0.5, -0.5), 0, 1), block1.view_projection_matrix); output.uv = float2(1, 1); } break; - case 5: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2( 0.5, 0.5), 0, 1), block1.view_projection_matrix); output.uv = float2(1, 0); } break; + case 0: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2(-0.5, 0.5), 0, 1), view_projection_matrix); output.uv = float2(0, 0); } break; + case 1: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2(-0.5, -0.5), 0, 1), view_projection_matrix); output.uv = float2(0, 1); } break; + case 2: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2( 0.5, -0.5), 0, 1), view_projection_matrix); output.uv = float2(1, 1); } break; + case 3: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2(-0.5, 0.5), 0, 1), view_projection_matrix); output.uv = float2(0, 0); } break; + case 4: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2( 0.5, -0.5), 0, 1), view_projection_matrix); output.uv = float2(1, 1); } break; + case 5: { output.pos = mul(float4(float2(tile_pos) - float2(0.5, 0.5) + float2( 0.5, 0.5), 0, 1), view_projection_matrix); output.uv = float2(1, 0); } break; default: {} } diff --git a/src/shaders/wgsl/world.wgsl b/src/shaders/wgsl/world.wgsl index 7c54294..0287dfb 100644 --- a/src/shaders/wgsl/world.wgsl +++ b/src/shaders/wgsl/world.wgsl @@ -1,9 +1,3 @@ -struct _MatrixStorage_float4x4_ColMajorstd140_0 -{ - @align(16) data_0 : array, i32(4)>, -}; - -@binding(0) @group(1) var block1_view_projection_matrix_0 : _MatrixStorage_float4x4_ColMajorstd140_0; struct Per_Frame_Data_std140_0 { @align(16) drag_start_0 : vec2, @@ -11,11 +5,18 @@ struct Per_Frame_Data_std140_0 @align(16) grid_offset_0 : vec2, @align(8) grid_width_0 : u32, @align(4) map_width_0 : u32, + @align(16) grid_height_0 : u32, }; -@binding(1) @group(1) var block1_per_frame_0 : Per_Frame_Data_std140_0; -@binding(0) @group(0) var block0_map_texture_0 : texture_2d; +@binding(1) @group(1) var per_frame_0 : Per_Frame_Data_std140_0; +@binding(0) @group(0) var map_texture_0 : texture_2d; +struct _MatrixStorage_float4x4_ColMajorstd140_0 +{ + @align(16) data_0 : array, i32(4)>, +}; + +@binding(0) @group(1) var view_projection_matrix_0 : _MatrixStorage_float4x4_ColMajorstd140_0; @binding(0) @group(2) var block2_tile_atlas_texture_0 : texture_2d; @binding(1) @group(2) var block2_tile_atlas_sampler_0 : sampler; @@ -33,43 +34,43 @@ struct VertexShaderOutput_0 @vertex fn main_vertex(@builtin(vertex_index) vertex_index_0 : u32, @builtin(instance_index) instance_index_0 : u32) -> VertexShaderOutput_0 { - var _S1 : u32 = instance_index_0 % block1_per_frame_0.map_width_0; - var _S2 : u32 = instance_index_0 / block1_per_frame_0.map_width_0; + var _S1 : u32 = instance_index_0 % per_frame_0.map_width_0; + var _S2 : u32 = instance_index_0 / per_frame_0.map_width_0; var _S3 : vec2 = vec2(_S1, _S2); var output_0 : VertexShaderOutput_0; var _S4 : vec3 = vec3(vec3(_S3, u32(0))); - output_0.tile_0 = (textureLoad((block0_map_texture_0), ((_S4)).xy, ((_S4)).z).x); + output_0.tile_0 = (textureLoad((map_texture_0), ((_S4)).xy, ((_S4)).z).x); switch(vertex_index_0) { case u32(0): { - output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, 0.5f), 0.0f, 1.0f)))); + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, 0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(0.0f, 0.0f); } case u32(1): { - output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, -0.5f), 0.0f, 1.0f)))); + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, -0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(0.0f, 1.0f); } case u32(2): { - output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(0.5f, -0.5f), 0.0f, 1.0f)))); + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(0.5f, -0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(1.0f, 1.0f); } case u32(3): { - output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, 0.5f), 0.0f, 1.0f)))); + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, 0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(0.0f, 0.0f); } case u32(4): { - output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(0.5f, -0.5f), 0.0f, 1.0f)))); + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(0.5f, -0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(1.0f, 1.0f); } case u32(5): { const _S5 : vec2 = vec2(0.5f, 0.5f); - output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - _S5 + _S5, 0.0f, 1.0f)))); + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - _S5 + _S5, 0.0f, 1.0f)))); output_0.uv_0 = vec2(1.0f, 0.0f); } default :