add sdlgpu renderer
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
slangc src/basic.slang -target wgsl -D__wgsl__ -o wgsl/basic.wgsl
|
||||
slangc src/world.slang -target wgsl -D__wgsl__ -o wgsl/world.wgsl
|
||||
slangc src/grid.slang -target wgsl -D__wgsl__ -o wgsl/grid.wgsl
|
||||
|
||||
slangc src/basic.slang -target spirv -profile spirv_1_0 -o spirv/basic.spv
|
||||
slangc src/world.slang -target spirv -profile spirv_1_0 -o spirv/world.spv
|
||||
slangc src/grid.slang -target spirv -profile spirv_1_0 -o spirv/grid.spv
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
#language 2026
|
||||
|
||||
struct VertexShaderInput {
|
||||
uint32_t vertex_index : SV_VertexID;
|
||||
uint32_t vertex_index : SV_VulkanVertexID;
|
||||
|
||||
[vk::location(0)] float3 pos;
|
||||
[vk::location(1)] float2 uv;
|
||||
@@ -46,9 +46,20 @@ FragmentShaderOutput main_fragment(VertexShaderOutput input) {
|
||||
return output;
|
||||
}
|
||||
|
||||
void GetDimensions(Sampler2D<float4> texture, out float width, out float height) {
|
||||
__target_switch {
|
||||
case wgsl: {
|
||||
texture.__getTexture().GetDimensions(width, height);
|
||||
} break;
|
||||
default: {
|
||||
texture.GetDimensions(width, height);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
float4 pixel_art_sample(Sampler2D<float4> input_texture, float2 input_uv) {
|
||||
var dimensions: float2;
|
||||
input_texture.__getTexture().GetDimensions(dimensions.x, dimensions.y);
|
||||
var dimensions : float2;
|
||||
GetDimensions(input_texture, dimensions.x, dimensions.y);
|
||||
|
||||
let texture_uv = input_uv * dimensions.xy;
|
||||
let sample_uv = (floor(texture_uv) + min(fract(texture_uv) / fwidth(texture_uv), float2(1.0, 1.0)) - 0.5) / dimensions.xy;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#language 2026
|
||||
|
||||
struct VertexShaderInput {
|
||||
uint32_t vertex_index : SV_VertexID;
|
||||
uint32_t instance_index : SV_InstanceID;
|
||||
uint32_t vertex_index : SV_VulkanVertexID;
|
||||
uint32_t instance_index : SV_VulkanInstanceID;
|
||||
|
||||
[vk::location(0)] float3 pos;
|
||||
};
|
||||
@@ -26,7 +26,7 @@ struct Per_Frame_Data {
|
||||
};
|
||||
|
||||
[vk::binding(0, 1)] ConstantBuffer<float4x4> view_projection_matrix : register(b0, space1);
|
||||
[vk::binding(1, 1)] ConstantBuffer<Per_Frame_Data> per_frame : register(b1, space1);
|
||||
[vk::binding(1, 1)] ConstantBuffer<Per_Frame_Data> per_frame : register(b1, space1);
|
||||
|
||||
[shader("vertex")]
|
||||
VertexShaderOutput main_vertex(VertexShaderInput input) {
|
||||
@@ -50,7 +50,7 @@ static const float4 selected_color = float4(1.0, 0.0, 1.0, 1.0);
|
||||
FragmentShaderOutput main_fragment(VertexShaderOutput input) {
|
||||
var output: FragmentShaderOutput;
|
||||
|
||||
output.color = select(input.selected != 0, selected_color, color);
|
||||
output.color = input.selected != 0 ? selected_color : color;
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
struct CombinedTextureSampler {
|
||||
#if !defined(__wgsl__)
|
||||
private Sampler2D combined;
|
||||
#else
|
||||
private Texture2D texture;
|
||||
private SamplerState sampler;
|
||||
#endif
|
||||
|
||||
Texture2D getTexture() {
|
||||
#if !defined(__wgsl__)
|
||||
return combined.__getTexture();
|
||||
#else
|
||||
return texture;
|
||||
#endif
|
||||
}
|
||||
|
||||
float4 Sample(float2 location, constexpr int2 offset, float clamp, out uint status) {
|
||||
#if !defined(__wgsl__)
|
||||
return combined.Sample(location, offset, clamp, status);
|
||||
#else
|
||||
return texture.Sample(sampler, location, offset, clamp, status);
|
||||
#endif
|
||||
}
|
||||
|
||||
float4 Sample(float2 location, constexpr int2 offset, float clamp) {
|
||||
#if !defined(__wgsl__)
|
||||
return combined.Sample(location, offset, clamp);
|
||||
#else
|
||||
return texture.Sample(sampler, location, offset, clamp);
|
||||
#endif
|
||||
}
|
||||
|
||||
float4 Sample(float2 location, constexpr int2 offset) {
|
||||
#if !defined(__wgsl__)
|
||||
return combined.Sample(location, offset);
|
||||
#else
|
||||
return texture.Sample(sampler, location, offset);
|
||||
#endif
|
||||
}
|
||||
|
||||
float4 Sample(float2 location) {
|
||||
#if !defined(__wgsl__)
|
||||
return combined.Sample(location);
|
||||
#else
|
||||
return texture.Sample(sampler, location);
|
||||
#endif
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
+38
-23
@@ -1,8 +1,10 @@
|
||||
#language 2026
|
||||
|
||||
#include "wgsl_workaround.slang"
|
||||
|
||||
struct VertexShaderInput {
|
||||
uint32_t vertex_index : SV_VertexID;
|
||||
uint32_t instance_index : SV_InstanceID;
|
||||
uint32_t vertex_index : SV_VulkanVertexID;
|
||||
uint32_t instance_index : SV_VulkanInstanceID;
|
||||
};
|
||||
|
||||
struct VertexShaderOutput {
|
||||
@@ -24,51 +26,64 @@ struct Per_Frame_Data {
|
||||
uint32_t map_width;
|
||||
};
|
||||
|
||||
[vk::binding(0, 1)] ConstantBuffer<float4x4> view_projection_matrix : register(b0, space1);
|
||||
[vk::binding(1, 1)] ConstantBuffer<Per_Frame_Data> per_frame : register(b1, space1);
|
||||
struct Block0 {
|
||||
[format("r16ui")]
|
||||
Texture2D<uint32_t> map_texture;
|
||||
};
|
||||
|
||||
[vk::binding(0, 0)] Texture2D<uint32_t> map_texture : register(t0, space0);
|
||||
struct Block1 {
|
||||
ConstantBuffer<float4x4> view_projection_matrix;
|
||||
ConstantBuffer<Per_Frame_Data> per_frame;
|
||||
};
|
||||
|
||||
ParameterBlock<Block0> block0;
|
||||
ParameterBlock<Block1> block1;
|
||||
|
||||
[shader("vertex")]
|
||||
VertexShaderOutput main_vertex(VertexShaderInput input) {
|
||||
var output: VertexShaderOutput;
|
||||
|
||||
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));
|
||||
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));
|
||||
|
||||
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), 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;
|
||||
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;
|
||||
default: {}
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
[vk::binding(0, 2)] Sampler2D<float4> tile_atlas : register(t0, space2);
|
||||
[vk::binding(2, 2)] StructuredBuffer<float4> tile_uvs : register(t1, space2);
|
||||
struct Block2 {
|
||||
CombinedTextureSampler tile_atlas;
|
||||
StructuredBuffer<float4> tile_uvs;
|
||||
};
|
||||
|
||||
[vk::binding(0, 3)] ConstantBuffer<float3> tint : register(b0, space3);
|
||||
struct Block3 {
|
||||
ConstantBuffer<float3> tint;
|
||||
};
|
||||
|
||||
ParameterBlock<Block2> block2;
|
||||
ParameterBlock<Block3> block3;
|
||||
|
||||
[shader("pixel")]
|
||||
FragmentShaderOutput main_fragment(VertexShaderOutput input) {
|
||||
var output: FragmentShaderOutput;
|
||||
|
||||
output.color = pixel_art_sample(tile_atlas, input.uv, input.tile);
|
||||
output.color = float4(output.color.rgb * tint.rgb, output.color.a);
|
||||
output.color = pixel_art_sample(block2.tile_atlas, input.uv, block2.tile_uvs[input.tile]);
|
||||
output.color = float4(output.color.rgb * block3.tint.rgb, output.color.a);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
float4 pixel_art_sample(Sampler2D<float4> input_texture, float2 input_uv, uint32_t tile) {
|
||||
var dimensions: float2;
|
||||
input_texture.__getTexture().GetDimensions(dimensions.x, dimensions.y);
|
||||
|
||||
let tile_uv = tile_uvs[tile];
|
||||
float4 pixel_art_sample(CombinedTextureSampler input_texture, float2 input_uv, float4 tile_uv) {
|
||||
var dimensions : float2;
|
||||
input_texture.getTexture().GetDimensions(dimensions.x, dimensions.y);
|
||||
|
||||
let texture_uv = lerp(tile_uv.xy, tile_uv.zw, input_uv);
|
||||
let sample_uv = (floor(texture_uv) + saturate(fract(texture_uv) / fwidth(texture_uv)) - 0.5) / dimensions;
|
||||
|
||||
@@ -31,12 +31,18 @@ fn main_vertex( _S1 : vertexInput_0, @builtin(vertex_index) vertex_index_0 : u32
|
||||
return output_0;
|
||||
}
|
||||
|
||||
fn GetDimensions_0( texture_texture_0 : texture_2d<f32>, texture_sampler_0 : sampler, width_0 : ptr<function, f32>, height_0 : ptr<function, f32>)
|
||||
{
|
||||
{var dim = textureDimensions((texture_texture_0));(((*width_0))) = f32(dim.x);(((*height_0))) = f32(dim.y);};
|
||||
return;
|
||||
}
|
||||
|
||||
fn pixel_art_sample_0( input_texture_texture_0 : texture_2d<f32>, input_texture_sampler_0 : sampler, input_uv_0 : vec2<f32>) -> vec4<f32>
|
||||
{
|
||||
var dimensions_0 : vec2<f32>;
|
||||
var _S2 : f32 = dimensions_0[i32(0)];
|
||||
var _S3 : f32 = dimensions_0[i32(1)];
|
||||
{var dim = textureDimensions((input_texture_texture_0));((_S2)) = f32(dim.x);((_S3)) = f32(dim.y);};
|
||||
GetDimensions_0(input_texture_texture_0, input_texture_sampler_0, &(_S2), &(_S3));
|
||||
dimensions_0[i32(0)] = _S2;
|
||||
dimensions_0[i32(1)] = _S3;
|
||||
var _S4 : vec2<f32> = input_uv_0 * dimensions_0.xy;
|
||||
|
||||
@@ -63,7 +63,16 @@ struct pixelInput_0
|
||||
fn main_fragment( _S9 : pixelInput_0, @builtin(position) pos_2 : vec4<f32>) -> FragmentShaderOutput_0
|
||||
{
|
||||
var output_1 : FragmentShaderOutput_0;
|
||||
output_1.color_0 = select(vec4<f32>(1.0f, 1.0f, 1.0f, 0.10000000149011612f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), (_S9.selected_1) != i32(0));
|
||||
var _S10 : vec4<f32>;
|
||||
if((_S9.selected_1) != i32(0))
|
||||
{
|
||||
_S10 = vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
_S10 = vec4<f32>(1.0f, 1.0f, 1.0f, 0.10000000149011612f);
|
||||
}
|
||||
output_1.color_0 = _S10;
|
||||
return output_1;
|
||||
}
|
||||
|
||||
|
||||
+36
-34
@@ -1,3 +1,9 @@
|
||||
struct _MatrixStorage_float4x4_ColMajorstd140_0
|
||||
{
|
||||
@align(16) data_0 : array<vec4<f32>, i32(4)>,
|
||||
};
|
||||
|
||||
@binding(0) @group(1) var<uniform> block1_view_projection_matrix_0 : _MatrixStorage_float4x4_ColMajorstd140_0;
|
||||
struct Per_Frame_Data_std140_0
|
||||
{
|
||||
@align(16) drag_start_0 : vec2<i32>,
|
||||
@@ -7,22 +13,16 @@ struct Per_Frame_Data_std140_0
|
||||
@align(4) map_width_0 : u32,
|
||||
};
|
||||
|
||||
@binding(1) @group(1) var<uniform> per_frame_0 : Per_Frame_Data_std140_0;
|
||||
@binding(0) @group(0) var map_texture_0 : texture_2d<u32>;
|
||||
@binding(1) @group(1) var<uniform> block1_per_frame_0 : Per_Frame_Data_std140_0;
|
||||
@binding(0) @group(0) var block0_map_texture_0 : texture_2d<u32>;
|
||||
|
||||
struct _MatrixStorage_float4x4_ColMajorstd140_0
|
||||
{
|
||||
@align(16) data_0 : array<vec4<f32>, i32(4)>,
|
||||
};
|
||||
@binding(0) @group(2) var block2_tile_atlas_texture_0 : texture_2d<f32>;
|
||||
|
||||
@binding(0) @group(1) var<uniform> view_projection_matrix_0 : _MatrixStorage_float4x4_ColMajorstd140_0;
|
||||
@binding(2) @group(2) var<storage, read> tile_uvs_0 : array<vec4<f32>>;
|
||||
@binding(1) @group(2) var block2_tile_atlas_sampler_0 : sampler;
|
||||
|
||||
@binding(0) @group(2) var tile_atlas_texture_0 : texture_2d<f32>;
|
||||
@binding(2) @group(2) var<storage, read> block2_tile_uvs_0 : array<vec4<f32>>;
|
||||
|
||||
@binding(1) @group(2) var tile_atlas_sampler_0 : sampler;
|
||||
|
||||
@binding(0) @group(3) var<uniform> tint_0 : vec3<f32>;
|
||||
@binding(0) @group(3) var<uniform> block3_tint_0 : vec3<f32>;
|
||||
struct VertexShaderOutput_0
|
||||
{
|
||||
@builtin(position) pos_0 : vec4<f32>,
|
||||
@@ -33,48 +33,48 @@ 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 % per_frame_0.map_width_0;
|
||||
var _S2 : u32 = instance_index_0 / per_frame_0.map_width_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 _S3 : vec2<u32> = vec2<u32>(_S1, _S2);
|
||||
var output_0 : VertexShaderOutput_0;
|
||||
var _S4 : vec3<i32> = vec3<i32>(vec3<u32>(_S3, u32(0)));
|
||||
output_0.tile_0 = (textureLoad((map_texture_0), ((_S4)).xy, ((_S4)).z).x);
|
||||
output_0.tile_0 = (textureLoad((block0_map_texture_0), ((_S4)).xy, ((_S4)).z).x);
|
||||
switch(vertex_index_0)
|
||||
{
|
||||
case u32(0):
|
||||
{
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(-0.5f, 0.5f), 0.0f, 1.0f))));
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(-0.5f, 0.5f), 0.0f, 1.0f))));
|
||||
output_0.uv_0 = vec2<f32>(0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
case u32(1):
|
||||
{
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(-0.5f, -0.5f), 0.0f, 1.0f))));
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(-0.5f, -0.5f), 0.0f, 1.0f))));
|
||||
output_0.uv_0 = vec2<f32>(0.0f, 1.0f);
|
||||
break;
|
||||
}
|
||||
case u32(2):
|
||||
{
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(0.5f, -0.5f), 0.0f, 1.0f))));
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(0.5f, -0.5f), 0.0f, 1.0f))));
|
||||
output_0.uv_0 = vec2<f32>(1.0f, 1.0f);
|
||||
break;
|
||||
}
|
||||
case u32(3):
|
||||
{
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(-0.5f, 0.5f), 0.0f, 1.0f))));
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(-0.5f, 0.5f), 0.0f, 1.0f))));
|
||||
output_0.uv_0 = vec2<f32>(0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
case u32(4):
|
||||
{
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(0.5f, -0.5f), 0.0f, 1.0f))));
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - vec2<f32>(0.5f, 0.5f) + vec2<f32>(0.5f, -0.5f), 0.0f, 1.0f))));
|
||||
output_0.uv_0 = vec2<f32>(1.0f, 1.0f);
|
||||
break;
|
||||
}
|
||||
case u32(5):
|
||||
{
|
||||
const _S5 : vec2<f32> = vec2<f32>(0.5f, 0.5f);
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - _S5 + _S5, 0.0f, 1.0f))));
|
||||
output_0.pos_0 = (((mat4x4<f32>(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<f32>(vec2<f32>(_S3) - _S5 + _S5, 0.0f, 1.0f))));
|
||||
output_0.uv_0 = vec2<f32>(1.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
@@ -86,7 +86,12 @@ fn main_vertex(@builtin(vertex_index) vertex_index_0 : u32, @builtin(instance_in
|
||||
return output_0;
|
||||
}
|
||||
|
||||
fn pixel_art_sample_0( input_texture_texture_0 : texture_2d<f32>, input_texture_sampler_0 : sampler, input_uv_0 : vec2<f32>, tile_1 : u32) -> vec4<f32>
|
||||
fn CombinedTextureSampler_Sample_0( this_texture_0 : texture_2d<f32>, this_sampler_0 : sampler, location_0 : vec2<f32>) -> vec4<f32>
|
||||
{
|
||||
return (textureSample((this_texture_0), (this_sampler_0), (location_0)));
|
||||
}
|
||||
|
||||
fn pixel_art_sample_0( input_texture_texture_0 : texture_2d<f32>, input_texture_sampler_0 : sampler, input_uv_0 : vec2<f32>, tile_uv_0 : vec4<f32>) -> vec4<f32>
|
||||
{
|
||||
var dimensions_0 : vec2<f32>;
|
||||
var _S6 : f32 = dimensions_0[i32(0)];
|
||||
@@ -94,14 +99,11 @@ fn pixel_art_sample_0( input_texture_texture_0 : texture_2d<f32>, input_texture
|
||||
{var dim = textureDimensions((input_texture_texture_0));((_S6)) = f32(dim.x);((_S7)) = f32(dim.y);};
|
||||
dimensions_0[i32(0)] = _S6;
|
||||
dimensions_0[i32(1)] = _S7;
|
||||
var _S8 : vec4<f32> = tile_uvs_0[tile_1];
|
||||
var _S9 : vec2<f32> = _S8.xy;
|
||||
var _S10 : vec2<f32> = _S8.zw;
|
||||
var _S11 : vec2<f32> = mix(_S9, _S10, input_uv_0);
|
||||
var _S12 : vec2<f32> = vec2<f32>(0.5f);
|
||||
var _S13 : vec2<f32> = clamp((floor(_S11) + saturate(fract(_S11) / (fwidth((_S11)))) - _S12) / dimensions_0, (_S9 + _S12) / dimensions_0, (_S10 - _S12) / dimensions_0);
|
||||
;
|
||||
return (textureSample((input_texture_texture_0), (input_texture_sampler_0), (_S13)));
|
||||
var _S8 : vec2<f32> = tile_uv_0.xy;
|
||||
var _S9 : vec2<f32> = tile_uv_0.zw;
|
||||
var _S10 : vec2<f32> = mix(_S8, _S9, input_uv_0);
|
||||
var _S11 : vec2<f32> = vec2<f32>(0.5f);
|
||||
return CombinedTextureSampler_Sample_0(input_texture_texture_0, input_texture_sampler_0, clamp((floor(_S10) + saturate(fract(_S10) / (fwidth((_S10)))) - _S11) / dimensions_0, (_S8 + _S11) / dimensions_0, (_S9 - _S11) / dimensions_0));
|
||||
}
|
||||
|
||||
struct FragmentShaderOutput_0
|
||||
@@ -112,15 +114,15 @@ struct FragmentShaderOutput_0
|
||||
struct pixelInput_0
|
||||
{
|
||||
@location(0) uv_1 : vec2<f32>,
|
||||
@location(1) tile_2 : u32,
|
||||
@location(1) tile_1 : u32,
|
||||
};
|
||||
|
||||
@fragment
|
||||
fn main_fragment( _S14 : pixelInput_0, @builtin(position) pos_1 : vec4<f32>) -> FragmentShaderOutput_0
|
||||
fn main_fragment( _S12 : pixelInput_0, @builtin(position) pos_1 : vec4<f32>) -> FragmentShaderOutput_0
|
||||
{
|
||||
var output_1 : FragmentShaderOutput_0;
|
||||
var _S15 : vec4<f32> = pixel_art_sample_0(tile_atlas_texture_0, tile_atlas_sampler_0, _S14.uv_1, _S14.tile_2);
|
||||
output_1.color_0 = vec4<f32>(_S15.xyz * tint_0.xyz, _S15.w);
|
||||
var _S13 : vec4<f32> = pixel_art_sample_0(block2_tile_atlas_texture_0, block2_tile_atlas_sampler_0, _S12.uv_1, block2_tile_uvs_0[_S12.tile_1]);
|
||||
output_1.color_0 = vec4<f32>(_S13.xyz * block3_tint_0.xyz, _S13.w);
|
||||
return output_1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user