imgui.slang

cross platform rendering playground

src/passes/imgui/imgui.slang

734 B
#include "shared.h"
#include "renderer_types.h"

struct VsIn {
    [[vk::location(0)]]
    vec2 pos;
    [[vk::location(1)]]
    vec2 uv;
    [[vk::location(2)]]
    vec4 col;
};

struct VsOut {
    vec4 clip_pos : SV_Position;
    vec4 col : TEXCOORD0;
    vec2 uv : TEXCOORD1;
};

[[vk::push_constant]]
ImGuiPushConstants pc;

[shader("vertex")]
VsOut vsMain(VsIn input) {
    VsOut o;
    vec2 fb = input.pos * pc.scale + pc.translate;
    o.clip_pos = vec4(2.0f * fb.x / pc.display_size.x - 1.0f, 1.0f - 2.0f * fb.y / pc.display_size.y, 0.0f, 1.0f);
    o.col = input.col;
    o.uv = input.uv;
    return o;
}

[shader("fragment")]
vec4 fsMain(VsOut input) : SV_Target {
    return pc.tex.Sample(pc.samp, input.uv) * input.col;
}