Pixijs
RSamaium/CanvasEngine
Use this skill first for ANY PixiJS v8 task; it routes to the right specialized skill for the job.
ALWAYS use when porting an existing Vulkan engine or renderer to AGFX — translating VkDevice/VkCommandBuffer/VkPipeline/VkDescriptorSet/VkRenderPass code to…
$ npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-porting-from-vulkan --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/AmelieHeinrich/agfx.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/agfx-porting-from-vulkan .claude/skills/agfx-porting-from-vulkan && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "agfx-porting-from-vulkan" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-porting-from-vulkan into .claude/skills/agfx-porting-from-vulkan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-porting-from-vulkan", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-porting-from-vulkanType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-porting-from-vulkan --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AmelieHeinrich/agfx.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/agfx-porting-from-vulkan .agents/skills/agfx-porting-from-vulkan && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "agfx-porting-from-vulkan" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-porting-from-vulkan into .agents/skills/agfx-porting-from-vulkan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-porting-from-vulkan", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-porting-from-vulkan --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AmelieHeinrich/agfx.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/agfx-porting-from-vulkan .cursor/skills/agfx-porting-from-vulkan && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "agfx-porting-from-vulkan" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-porting-from-vulkan into .cursor/skills/agfx-porting-from-vulkan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-porting-from-vulkan", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/AmelieHeinrich/agfx.git --path .claude/skills/agfx-porting-from-vulkan--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-porting-from-vulkan --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AmelieHeinrich/agfx.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/agfx-porting-from-vulkan .gemini/skills/agfx-porting-from-vulkan && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "agfx-porting-from-vulkan" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-porting-from-vulkan into .gemini/skills/agfx-porting-from-vulkan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-porting-from-vulkan", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install AmelieHeinrich/agfx agfx-porting-from-vulkanInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AmelieHeinrich/agfx.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/agfx-porting-from-vulkan .github/skills/agfx-porting-from-vulkan && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "agfx-porting-from-vulkan" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-porting-from-vulkan into .github/skills/agfx-porting-from-vulkan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-porting-from-vulkan", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-porting-from-vulkan --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AmelieHeinrich/agfx.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/agfx-porting-from-vulkan .opencode/skills/agfx-porting-from-vulkan && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "agfx-porting-from-vulkan" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-porting-from-vulkan into .opencode/skills/agfx-porting-from-vulkan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-porting-from-vulkan", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
agfx-porting-from-vulkanALWAYS use when porting an existing Vulkan engine or renderer to AGFX — translating VkDevice/VkCommandBuffer/VkPipeline/VkDescriptorSet/VkRenderPass code to…
Agfx Porting From Vulkan is an agent skill from AmelieHeinrich/agfx. ALWAYS use when porting an existing Vulkan engine or renderer to AGFX — translating VkDevice/VkCommandBuffer/VkPipeline/VkDescriptorSet/VkRenderPass code to agfxDevice/agfxCommandBuffer/agfxRenderPipeline calls, converting GLSL/HLSL from Vulkan's descriptor-set binding model (or VKEXTdescriptorbuffer/bindless) to AGFX bindless HLSL, or mapping Vulkan concepts (descriptor sets/pools/layouts, image layouts, pipeline barriers, render passes/dynamic rendering, timeline semaphores) onto their AGFX equivalents. Trigger…
Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Game Development, covering Shaders and Translation. The licence is MIT.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d8ad38b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are cpp).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Agfx Porting From Vulkan loads about 4.4k tokens when it runs. Until then it costs about 256 tokens; SKILL.md has 1,736 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from AmelieHeinrich/agfx at commit d8ad38b, republished under its MIT licence (© AmelieHeinrich). 1,736 words, ~4,382 tokens.
.claude/skills/agfx-porting-from-vulkan/SKILL.md (or your agent's skills folder).Vulkan is, of all the source APIs, structurally the closest to AGFX: both use explicit command buffers, explicit resource-state/layout transitions, explicit GPU/CPU and GPU/GPU synchronization primitives, and (once the engine already uses descriptor indexing / VK_EXT_descriptor_buffer / bindless-style descriptor sets) a similar "handle-based" resource access story. Porting from Vulkan is mostly a simplification and renaming exercise rather than a structural rewrite: AGFX collapses descriptor sets, layouts, and pools into one implicit bindless heap, and folds VkRenderPass/VkFramebuffer (or dynamic rendering's vkCmdBeginRendering) into agfxRenderTarget/agfxRenderPassBegin. The parts that map almost 1:1 are command buffers, barriers/layout transitions, fences/semaphores, and pipeline creation.
If the source engine still uses classic per-material VkDescriptorSets (not already bindless/descriptor-indexed), expect the binding-model rewrite to be the most invasive part of the port — same shape of work as a D3D12-root-signature port, just starting from descriptor sets instead of root signatures.
AGFX also ships its own Vulkan backend (agfx/agfx_vulkan.cpp, used on Linux), so a ported Vulkan engine keeps running on Vulkan there while gaining D3D12 (Windows) and Metal 4 (macOS) for free. If the engine has Vulkan-native library integrations (VMA-adjacent tooling, upscalers, profilers), agfx_native.h with AGFX_EXPOSE_VULKAN exposes the backing VkInstance/VkDevice/VkQueue/VkImage/VkBuffer/VkDeviceMemory/VkSemaphore, so those can survive the port on Linux instead of being deleted.
Owns:
VkFramebuffer) vs. what maps closely (barriers, fences/semaphores, render pass shape)Doesn't own:
agfx-* subsystem skillsagfx-porting-from-* skillsagfx/agfx.h is the entire public API surface — read it top to bottom once before starting; it's short enough to hold in full context. agfx/agfx_vulkan.cpp is AGFX's own Vulkan backend — for a Vulkan port it is the single most useful reference, since it shows exactly which Vulkan construct each AGFX concept resolves to (e.g. agfxFence = timeline semaphore, agfxCommandBufferMemoryBarrier = global VkMemoryBarrier2); agfx_d3d12.cpp and agfx_metal4.mm are the sibling backends. agfx_demo/ (particularly deferred_renderer.cpp, agfx_demo_main.cpp) is a complete reference engine already written against AGFX — a good target shape for a ported Vulkan renderer.
| Vulkan | AGFX | Notes |
|---|---|---|
VkInstance + VkPhysicalDevice + VkDevice | agfxDevice* | agfxDeviceCreate collapses instance/physical-device selection/logical-device creation into one call; no separate instance/extension enumeration step |
VkQueue | agfxCommandQueue* | agfxCommandQueueCreate, typed via agfxCommandQueueType (graphics/compute/transfer), roughly matching queue family specialization |
VkCommandPool + VkCommandBuffer | agfxCommandBuffer* | agfxCommandBufferCreate/Begin/End/Reset — no separate pool object; allocation/reset is folded into the command buffer itself |
VkFence (CPU wait) / VkSemaphore (binary or timeline, GPU wait) | agfxFence* | one fence type unifies both roles — timeline-semaphore-style monotonically increasing values for both CPU↔GPU (agfxFenceWait) and GPU↔GPU (agfxCommandQueueSignal/Wait) sync; binary semaphores have no direct analog, model them as a timeline value instead — see agfx-synchronization |
vkQueueSubmit (with wait/signal semaphore arrays) | agfxCommandQueueSubmit + agfxCommandQueueSignal/agfxCommandQueueWait | submission and GPU-side signal/wait are separate calls in AGFX rather than one submit-info struct |
VkDescriptorSetLayout/VkDescriptorPool/VkDescriptorSet/vkUpdateDescriptorSets | deleted | AGFX is bindless-first; there is no descriptor set to allocate or update. Resources are accessed via ResourceHandle pulled from an implicit bindless heap — see agfx-writing-bindless-shaders. If the source engine already uses VK_EXT_descriptor_buffer/descriptor indexing with a bindless heap of its own, this step is mostly deleting bookkeeping that AGFX now does internally |
VkPipelineLayout (descriptor set layouts + push constant ranges) | implicit, push-constant range only | AGFX's only "pipeline layout" concept is the fixed push-constant block (register(b0), AGFX_PUSH_CONSTANTS) plus the optional draw-ID constant (register(b1)) — see agfx-writing-bindless-shaders |
vkCmdPushConstants | agfxRenderPassPushConstants/agfxComputePassPushConstants | same purpose, recorded on the pass object rather than the raw command buffer |
VkImage + vkAllocateMemory/VMA + VkImageView | agfxTexture* + agfxTextureView* | agfxTextureCreate folds allocation into creation (no separate memory-binding step to manage); agfxTextureUsage bitflags replace VkImageUsageFlags |
VkBuffer + vkAllocateMemory/VMA | agfxBuffer* | agfxBufferUsage replaces VkBufferUsageFlags; agfxBufferMemoryType replaces the memory-type/heap selection (DEVICE_LOCAL → GPU_ONLY, `HOST_VISIBLE |
vkMapMemory/vkUnmapMemory | agfxBufferMap/agfxBufferUnmap | only valid on CPU_TO_GPU/GPU_TO_CPU buffers, same map-write-unmap shape |
VkImageLayout (vkCmdPipelineBarrier/vkCmdPipelineBarrier2 image barriers) | agfxResourceState + agfxCommandBufferTextureBarrier | states map closely conceptually (AGFX_RESOURCE_STATE_RENDER_TARGET ≈ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, AGFX_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ≈ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, AGFX_RESOURCE_STATE_PRESENT ≈ VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); AGFX has an extra agglomerate flag with no Vulkan equivalent — see agfx-synchronization |
Buffer memory barriers (vkCmdPipelineBarrier2 buffer barriers) | agfxCommandBufferMemoryBarrier | closer to a global VkMemoryBarrier2 than a VkBufferMemoryBarrier2 — it takes no buffer argument at all (buffers have no layout to transition, so AGFX doesn't scope this to one resource); a single call orders all matching buffer/AS access, same as a Vulkan global memory barrier would |
VkMemoryBarrier/VK_ACCESS_SHADER_WRITE_BIT → VK_ACCESS_SHADER_READ_BIT between compute dispatches | agfxComputePassTextureUAVBarrier/agfxComputePassBufferUAVBarrier | scoped to within a compute pass, purpose-built for the read-after-write-same-resource case |
VkRenderPass+VkFramebuffer (classic) or vkCmdBeginRendering/VkRenderingInfo (dynamic rendering) | agfxRenderTarget + agfxRenderPassBegin/agfxRenderPassCreateInfo | AGFX's model is closest to dynamic rendering — attachments and load/store ops specified per-pass, no separate framebuffer-compatibility object to manage; VkAttachmentLoadOp/StoreOp map directly to agfxLoadOp/agfxStoreOp — see agfx-render-targets-and-passes |
VkPipeline (graphics) + VkGraphicsPipelineCreateInfo | agfxRenderPipelineCreate | blend/raster/depth-stencil state (minus stencil, which AGFX doesn't support) plus attachment formats folded into one agfxRenderPipelineCreateInfo, same as Vulkan's monolithic pipeline object |
VkPipeline (compute) | agfxComputePipelineCreate | straightforward 1:1 |
VkShaderModule + SPIR-V (from GLSL/HLSL via glslang/DXC) | agfxShaderModule* | AGFX shaders are HLSL compiled through agfxCompileShader — to DXIL on Windows, Metal IR on macOS, and SPIR-V on Linux (so the Linux output is still SPIR-V, just produced by AGFX's compiler) — if the source is GLSL, it needs rewriting to HLSL, not just recompiling; if already HLSL compiled to SPIR-V, the binding-model rewrite is still required (bindless push constants, no layout(set=,binding=)) — see agfx-writing-bindless-shaders |
layout(set=N, binding=M) (descriptor-set-bound) or layout(binding=M) uniform (bindless-heap-indexed, if already using descriptor indexing) | ResourceHandle fields on the push-constant struct + ResourceDescriptorHeap/SamplerDescriptorHeap | if the source shader is already bindless-style (indexing a big sampler2D descriptors[] array with a push-constant index), this is largely a rename; if it's classic per-set binding, it's a structural rewrite — see agfx-writing-bindless-shaders |
VkVertexInputBindingDescription/VkVertexInputAttributeDescription (vertex input state) | deleted — vertex pulling | AGFX shaders take SV_VertexID and manually load from an AGFXStructuredBuffer; there is no vertex input state to configure — see agfx-writing-bindless-shaders |
VkSwapchainKHR + vkAcquireNextImageKHR/vkQueuePresentKHR | agfxSwapChain* | agfxSwapChainCreate/AcquireNextTexture/Present/Resize; AGFX handles the acquire/present semaphore bookkeeping internally. On Linux the surface protocol (X11/XCB/Wayland) is chosen via agfxDeviceCreateInfo::displayServerProtocol and the window handle is an agfxLinuxWindowHandle — see agfx-presentation-and-swapchain |
VkSampler | agfxSampler* | agfxSamplerCreate, handle obtained the same way as texture/buffer views (bindless), not bound into a descriptor set |
NDC depth range [0, 1] (Vulkan already matches AGFX), clip-space Y sign flip conventions | matches AGFX directly | no depth-range fix needed (unlike GL/D3D11 ports); double-check any existing Y-flip workaround the engine has for swap chain vs. off-screen targets still makes sense under AGFX's own convention |
Because Vulkan and AGFX share the same broad shape (explicit command buffers, explicit barriers, explicit fences), porting shader-and-binding code before device/resource plumbing is somewhat less risky here than for other source APIs — but still validate incrementally rather than attempting the whole renderer at once.
agfxDeviceCreate/agfxCommandQueueCreate, and VkSwapchainKHR setup with agfxSwapChainCreate. Get a cleared back buffer presenting before porting rendering logic — validates the build/link setup (no more Vulkan loader/extension/validation-layer bootstrapping).agfxFence + per-slot command buffers (agfx-synchronization) — if the engine already uses timeline semaphores this is close to a rename; if it uses binary semaphores + per-frame fences, consolidate onto AGFX's single monotonic-value fence model.VkImage/VkBuffer (+ VMA/manual allocation) creation to agfxTextureCreate/agfxBufferCreate. Drop descriptor-set/descriptor-pool bookkeeping; keep the returned view/handle objects instead — see agfx-writing-bindless-shaders.vkCmdBeginRenderPass/vkCmdBeginRendering sequence (with its layout transitions) to agfxRenderPassBegin/draw/End (agfx-render-targets-and-passes), including barriers into the right states beforehand (agfx-synchronization) — this is where descriptor-set-to-bindless mistakes surface fastest if the source wasn't already bindless.layout(set=,binding=) descriptor declarations, replace with AGFX_PUSH_CONSTANTS + ResourceHandle fields and AGFXTexture2D/AGFXStructuredBuffer/AGFXSampler::Create(handle) calls, replace vertex-input-state fetch with vertex pulling from SV_VertexID (agfx-writing-bindless-shaders). Do this pass-by-pass alongside step 4 — a shader rewritten without its host-side push-constant struct updated in the same pass won't compile.agfx-presentation-and-swapchain).All three are supported as of AGFX v1.2.0 (ray tracing landed in v1.1.0, multi-draw indirect in v1.2.0). Each is capability-gated — query once and keep the fallback path alive, since none are universal (in practice: Apple M3+, NVIDIA RTX 20+, AMD RX 6000+, or Intel Arc):
agfxDeviceInfo info = {};
agfxDeviceGetInfo(device, &info);
// info.supportsRayTracing / info.supportsMeshShaders / info.supportsMultiDrawIndirect| Vulkan | AGFX | Notes |
|---|---|---|
vkCmdDrawMeshTasksEXT + VK_EXT_mesh_shader | agfxRenderPassDrawMesh + meshShader/taskShader | task shader → main_as, mesh shader → main_ms |
VkAccelerationStructureKHR, vkCmdBuildAccelerationStructuresKHR | agfxAccelerationStructureCreate + agfxComputePassBuildAccelerationStructure | scratch buffer sizing via agfxAccelerationStructureGetSizes |
VK_KHR_ray_query (rayQueryEXT in a compute shader) | RayQuery in HLSL | direct equivalent — this is the RT model AGFX supports |
vkCmdTraceRaysKHR + RT pipelines + SBT | no equivalent | see the mismatch note below |
vkCmdDrawIndirectCount / vkCmdDrawIndexedIndirectCount | agfxIndirectBundle + PrepareIndirectBundle/ExecuteIndirectBundle | AGFX's count buffer is the direct analogue of Vulkan's (the Linux backend literally calls vkCmdDraw*IndirectCount); the extra prepare step is a no-op on D3D12/Vulkan and builds a Metal ICB. If the engine relies on gl_DrawID, note AGFX_DRAW_ID's per-backend meaning — see agfx-mdi gotcha 6 |
The one structural mismatch to flag early: AGFX supports inline ray tracing only — RayQuery/TraceRayInline from a compute shader. There is no ray-generation/any-hit/closest-hit pipeline, no hit groups, and no shader binding table. A source engine built around a ray-tracing pipeline needs those passes restructured into compute dispatches that trace inline and shade at the hit point themselves; that is a redesign, not a translation, and is worth surfacing to the user before starting.
Delegate the actual work: agfx-raytracing (acceleration structures, inline tracing), agfx-mdi (indirect bundles, GPU culling), agfx-writing-bindless-shaders (main_ms/main_as entry points, reflected group sizes) with agfx-render-targets-and-passes for agfxRenderPassDrawMesh.
agfx-writing-bindless-shaders for the replacement pattern.agglomerate has a Vulkan equivalent. It doesn't — AGFX's own Vulkan backend ignores the flag entirely (barriers are always emitted via vkCmdPipelineBarrier2), so every AGFX barrier from a Vulkan port should generally pass agglomerate = true (ordinary transitions) to get Metal-side hazard tracking; see agfx-synchronization for the one exception (present-adjacent transitions).VK_KHR_ray_query map cleanly, but vkCmdTraceRaysKHR, RT pipeline stages, and the SBT have no AGFX equivalent — those passes must be restructured into inline-RayQuery compute dispatches. Surface this early. Indirect draws, by contrast, do port (see "Advanced features").VK_FORMAT_D24_UNORM_S8_UINT-based effects, stencil-buffer masking). AGFX's pipeline depth state has no stencil fields — flag it rather than silently dropping it.[0,1] and re-applying a GL-style depth-range fix that isn't needed, or missing a genuine Y-flip discrepancy between the source's off-screen-vs-swapchain convention and AGFX's own.© AmelieHeinrich, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/agfx-porting-from-vulkan of AmelieHeinrich/agfx.
Open the folder on GitHubat commit d8ad38b
Agfx Porting From Vulkan next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Agfx Porting From Vulkan this skillAmelieHeinrich/agfx | 146 | — | ~4.4k | Automated safety check: Pass | MIT | |
| PixijsRSamaium/CanvasEngine | 401 | 2 repos | ~1.6k | Automated safety check: Pass | MIT | |
| New ExperimentTresjs/tres | 3.8k | — | ~782 | Automated safety check: Pass | MIT | |
| Anatomywheresryan22/anatomy | 500 | — | ~7.7k | Automated safety check: Pass | MIT | |
| Assets Shader List AllIvanMurzak/Unity-MCP | 4.4k | — | ~435 | Automated safety check: Pass | Apache-2.0 | |
| Handle Sdr Tonemap Lutclshortfuse/renodx | 4.5k | — | ~7.3k | Automated safety check: Pass | MIT |
RSamaium/CanvasEngine
Use this skill first for ANY PixiJS v8 task; it routes to the right specialized skill for the job.
Tresjs/tres
Create a new experiment in TresJS Lab with all necessary files
wheresryan22/anatomy
Build crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object (a test rig, a dial gauge, a cabinet of drawers, a plotter, a lock), with…
IvanMurzak/Unity-MCP
List all shaders available in the project assets and packages, sorted by name.
clshortfuse/renodx
RenoDX HLSL/Slang shader workflow for proven shader-side SDR tonemap, hard clip, LUT, color grade, and HDR bridge changes.
flopperam/unreal-engine-mcp
Walks an Unreal Engine MCP agent through building materials, Niagara particle systems, Chaos destruction, and curve assets with inspect-then-edit steps.
AmelieHeinrich/agfx
ALWAYS use when porting an existing D3D11 engine or renderer to AGFX — translating ID3D11Device/DeviceContext/InputLayout/state-object code to agfxDevice/agfxCommandBuffer/agfxRenderPipeline calls…
AmelieHeinrich/agfx
ALWAYS use when porting an existing D3D12 engine or renderer to AGFX — translating ID3D12Device/CommandList/PipelineState/RootSignature/DescriptorHeap code to…
AmelieHeinrich/agfx
ALWAYS use when porting an existing OpenGL (or OpenGL ES) engine or renderer to AGFX — translating glGenTextures/glBindTexture/glBufferData/glUseProgram/FBO code to…
AmelieHeinrich/agfx
ALWAYS use when creating, resizing, or presenting through an agfxSwapChain in AGFX — window/layer handle setup, HDR toggling, vsync, resize handling, or back buffer acquire/present.
AmelieHeinrich/agfx
ALWAYS use when creating agfxRenderTarget or agfxRenderPass objects in AGFX, or wiring up color/depth attachments, load/store ops, viewport/scissor, or draw calls within a render pass.
AmelieHeinrich/agfx
ALWAYS use when working with AGFX fences, frames-in-flight pacing, queue signal/wait, resource-state barriers, or the barrier "agglomerate" flag.
Categories
ALWAYS use when porting an existing Vulkan engine or renderer to AGFX — translating VkDevice/VkCommandBuffer/VkPipeline/VkDescriptorSet/VkRenderPass code to…. Agfx Porting From Vulkan is an agent skill from AmelieHeinrich/agfx. ALWAYS use when porting an existing Vulkan engine or renderer to AGFX — translating VkDevice/VkCommandBuffer/VkPipeline/VkDescriptorSet/VkRenderPass code to agfxDevice/agfxCommandBuffer/agfxRenderPipeline calls, converting GLSL/HLSL from Vulkan's descriptor-set binding model (or VKEXTdescriptorbuffer/bindless) to AGFX bindless HLSL, or mapping Vulkan concepts (descriptor sets/pools/layouts, image layouts, pipeline barriers, render passes/dynamic rendering, timeline semaphores) onto their AGFX equivalents.
Agfx Porting From Vulkan fits situations like: porting an existing Vulkan engine; converting GLSL/HLSL from Vulkans descriptor-set binding model (or VKEXTdescriptorbuffer/bindless) to AGFX bindless HLSL; mapping Vulkan concepts (descriptor sets/pools/layouts; pipeline barriers.
Run `npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a claude-code`. Or copy the skill folder (.claude/skills/agfx-porting-from-vulkan in AmelieHeinrich/agfx) into .claude/skills/agfx-porting-from-vulkan in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a codex`. Or copy the skill folder (.claude/skills/agfx-porting-from-vulkan in AmelieHeinrich/agfx) into .agents/skills/agfx-porting-from-vulkan in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AmelieHeinrich/agfx --skill agfx-porting-from-vulkan -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/agfx-porting-from-vulkan, .gemini/skills/agfx-porting-from-vulkan, .github/skills/agfx-porting-from-vulkan and .opencode/skills/agfx-porting-from-vulkan in your project.
SKILL.md names no scripts, command-line tools or credentials: Agfx Porting From Vulkan is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Agfx Porting From Vulkan is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.4k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Agfx Porting From Vulkan: Pixijs (RSamaium/CanvasEngine, 401 stars), New Experiment (Tresjs/tres, 3.8k stars), Anatomy (wheresryan22/anatomy, 500 stars) and Assets Shader List All (IvanMurzak/Unity-MCP, 4.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AmelieHeinrich (a GitHub user) maintains it in AmelieHeinrich/agfx, which has 146 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on September 27, 2026.
Source: AmelieHeinrich/agfx on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.