#include "shared.h"
#include "renderer_types.h"
[vk::push_constant]
IdBlitPushConstants pc;
struct VsOut {
vec4 pos : SV_Position;
u32 id;
}
[shader("vertex")]
VsOut vtx_main(u32 vertexID: SV_VertexID, u32 drawID: SV_DrawIndex, u32 instanceID: SV_InstanceID) {
VsOut out;
FrameUBO frame = *pc.frame;
u32 item_idx = pc.visible_items[drawID].id;
RenderItemGPU item = frame.render_items[item_idx];
SubmeshGPU submesh = frame.submeshes[item.submesh_index];
TransformGPU xform = frame.transforms[item.instance_id];
Vertex v = pc.vertex[vertexID + submesh.base_vertex];
out.pos = (vec4(v.pos, 1.0) * xform.world) * frame.view * frame.proj;
out.id = item.entity_id;
return out;
}
[shader("fragment")]
u32 fs_main(VsOut input) : SV_Target {
f32 sd = pc.depth.Load(uvec3(u32(input.pos.x), u32(input.pos.y), 0)).r;
if (input.pos.z < sd - 1e-4f) {
discard;
}
return input.id;
};