Rdc CLI
BANANASJIM/rdc-cli
A skill your agent uses when working with RenderDoc capture files (.rdc), analyzing GPU frames, tracing shaders, inspecting draw calls, or running CI assertions against GPU captures.
ALWAYS use when writing or modifying HLSL shaders for AGFX, or wiring the agfxShaderCompiler / agfxShaderModule / agfxRenderPipeline / agfxComputePipeline pipeline around them.
$ npx skills add AmelieHeinrich/agfx --skill agfx-writing-bindless-shaders -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-writing-bindless-shaders --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-writing-bindless-shaders .claude/skills/agfx-writing-bindless-shaders && 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-writing-bindless-shaders" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-writing-bindless-shaders into .claude/skills/agfx-writing-bindless-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-writing-bindless-shaders", 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-writing-bindless-shadersType 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-writing-bindless-shaders -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-writing-bindless-shaders --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-writing-bindless-shaders .agents/skills/agfx-writing-bindless-shaders && 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-writing-bindless-shaders" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-writing-bindless-shaders into .agents/skills/agfx-writing-bindless-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-writing-bindless-shaders", 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-writing-bindless-shaders -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-writing-bindless-shaders --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-writing-bindless-shaders .cursor/skills/agfx-writing-bindless-shaders && 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-writing-bindless-shaders" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-writing-bindless-shaders into .cursor/skills/agfx-writing-bindless-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-writing-bindless-shaders", 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-writing-bindless-shaders--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-writing-bindless-shaders -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AmelieHeinrich/agfx agfx-writing-bindless-shaders --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-writing-bindless-shaders .gemini/skills/agfx-writing-bindless-shaders && 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-writing-bindless-shaders" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-writing-bindless-shaders into .gemini/skills/agfx-writing-bindless-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-writing-bindless-shaders", 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-writing-bindless-shadersInstalls 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-writing-bindless-shaders -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-writing-bindless-shaders .github/skills/agfx-writing-bindless-shaders && 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-writing-bindless-shaders" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-writing-bindless-shaders into .github/skills/agfx-writing-bindless-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-writing-bindless-shaders", 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-writing-bindless-shaders -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-writing-bindless-shaders --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-writing-bindless-shaders .opencode/skills/agfx-writing-bindless-shaders && 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-writing-bindless-shaders" agent skill from https://github.com/AmelieHeinrich/agfx/tree/main/.claude/skills/agfx-writing-bindless-shaders into .opencode/skills/agfx-writing-bindless-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agfx-writing-bindless-shaders", 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-writing-bindless-shadersALWAYS use when writing or modifying HLSL shaders for AGFX, or wiring the agfxShaderCompiler / agfxShaderModule / agfxRenderPipeline / agfxComputePipeline pipeline around them.
Agfx Writing Bindless Shaders is an agent skill from AmelieHeinrich/agfx. ALWAYS use when writing or modifying HLSL shaders for AGFX, or wiring the agfxShaderCompiler / agfxShaderModule / agfxRenderPipeline / agfxComputePipeline pipeline around them. Trigger for AGFXPUSHCONSTANTS, ResourceHandle, AGFXTexture2D/AGFXRWTexture2D/AGFXStructuredBuffer/AGFXByteAddressBuffer/AGFXSampler, ResourceDescriptorHeap/SamplerDescriptorHeap, agfxCompileShader, agfxShaderCompilerOptions, agfxShaderModuleCreate, register(b0)/register(b1), "bindless", "push constants", writing a new .hlsl file for AGFX…
Its SKILL.md is about 3.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. It works with Linux. The licence is MIT.
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 hlsl and 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 Writing Bindless Shaders loads about 3.4k tokens when it runs. Until then it costs about 222 tokens; SKILL.md has 1,101 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,101 words, ~3,358 tokens.
.claude/skills/agfx-writing-bindless-shaders/SKILL.md (or your agent's skills folder).AGFX shaders are HLSL (SM 6.6), compiled with DXC to a per-platform target: DXIL on Windows (agfx_shader_compiler_windows.cpp); DXIL then translated to Metal IR via the Metal shader converter on macOS (agfx_shader_compiler_mac.mm, using IRRootSignatureFlagSamplerHeapDirectlyIndexed | IRRootSignatureFlagCBVSRVUAVHeapDirectlyIndexed); SPIR-V on Linux (agfx_shader_compiler_linux.cpp, DXC's -spirv target via a dlopen'd libdxcompiler.so — path settable through agfxShaderCompilerOptions::dxCompilerPath, defaulting to data/dlls/libdxcompiler.so). Every target is fully bindless, direct-indexed heaps. The compiler defines AGFX_METAL on macOS and AGFX_VULKAN on Linux automatically; data/shaders/agfx.h uses these to hide the per-backend differences (e.g. [[vk::push_constant]]), so shader authors never branch on them for ordinary resource access. There is no per-draw descriptor table, no register(t0, space0) binding model, and no Bind* API on the C side beyond push constants. Every resource a shader touches — textures, buffers, samplers — is accessed by a ResourceHandle (a plain uint index) pulled out of ResourceDescriptorHeap/SamplerDescriptorHeap and wrapped in one of the AGFX* helper classes declared in data/shaders/agfx.h.
The host side hands shaders these handles two ways: almost always via push constants (agfxRenderPassPushConstants/agfxComputePassPushConstants, bound at register(b0)), or, for structured scene/per-draw constant data, by putting the handle to a constant buffer inside the push constants and loading it as an AGFXStructuredBuffer in the shader (see sceneCB pattern below) rather than a second root CBV.
Owns:
ResourceHandle, AGFXTexture1D/2D/2DArray/3D/Cube<T>, AGFXRWTexture1D/2D/3D<T>, AGFXStructuredBuffer<T>/AGFXRWStructuredBuffer<T>, AGFXByteAddressBuffer/AGFXRWByteAddressBuffer, AGFXSampler/AGFXComparisonSampler, AGFXRaytracingAccelerationStructureAGFX_PUSH_CONSTANTS(type, name) at register(b0) (a [[vk::push_constant]] block on Vulkan — the macro hides it), and the optional per-draw ID (AGFX_DECLARE_DRAW_ID()/AGFX_DRAW_ID(): register(b1) on D3D12/Metal, the SPIR-V DrawIndex builtin on Vulkan), which is how a shader replayed from an indirect bundle recovers which draw it is — but note the value's meaning diverges on Vulkan, see agfx-mdimain_vs, main_ps, main_cs, main_ms, main_as) and matching agfxShaderModuleTypeagfxShaderCompilerOptions/agfxShaderCompilerResult and agfxCompileShader — the HLSL → DXIL (Windows) / Metal IR (macOS) / SPIR-V (Linux) pipelineagfxShaderModules into agfxRenderPipelineCreateInfo/agfxComputePipelineCreateInfoDoesn't own:
agfx-render-targets-and-passesagfx-synchronizationAGFXIndirectDraw*Bundle append helpers declared in the same header (Create/Draw/DrawIndexed/DrawMesh/Dispatch) and the GPU-driven submission model around them → agfx-mdiagfx-presentation-and-swapchainThe bindless helper header is a single shared file at data/shaders/agfx.h, included by every shader in the repo as #include "data/shaders/agfx.h" (a repo-root-relative path, not relative to the including shader) — always #include it first in a new shader and read it before inventing a new resource-access pattern; it is the complete list of what's available. Real shader examples: data/shaders/demo/gbuffer.hlsl (vertex+fragment, structured vertex pulling, textures+sampler), data/shaders/demo/gbuffer_indirect.hlsl (the GPU-driven variant, split into its own file for the Vulkan push-constant rule below), data/shaders/demo/ssao.hlsl (compute, RW texture output, scene CB), data/shaders/demo/mipgen.hlsl (minimal compute), data/shaders/demo/deferred_lighting.hlsl, data/shaders/demo/shadow_depth.hlsl, data/shaders/demo/tonemap.hlsl, data/shaders/demo/imgui.hlsl. Host-side compile+load pattern: agfx_demo/deferred_renderer.cpp's CompileShader helper, agfx_demo/ssao.cpp, agfx_demo/agfx_mipgen.cpp. Compiler internals: agfx_shader/agfx_shader_compiler.h and the per-platform agfx_shader_compiler_windows.cpp/_mac.mm/_linux.cpp.
#include "data/shaders/agfx.h" // one shared header for all shaders; path is repo-root-relative
struct MyPushConstants {
ResourceHandle someTex;
ResourceHandle someSampler;
ResourceHandle sceneCB;
float someScalar;
};
AGFX_PUSH_CONSTANTS(MyPushConstants, g_Constants);AGFX_PUSH_CONSTANTS expands to ConstantBuffer<type> name : register(b0) — this is the only resource binding declaration a shader normally needs. Everything else is created inline from a ResourceHandle field on that struct.
AGFXTexture2D<float4> albedoTex = AGFXTexture2D<float4>::Create(g_Constants.albedoTex);
AGFXSampler samp = AGFXSampler::Create(g_Constants.textureSampler);
float4 c = albedoTex.Sample(samp, uv);
AGFXRWTexture2D<float4> aoOut = AGFXRWTexture2D<float4>::Create(g_Constants.aoTex);
aoOut.Store(int2(id.xy), float4(ao, ao, ao, 1.0f));
AGFXStructuredBuffer<SceneVertex> vertices = AGFXStructuredBuffer<SceneVertex>::Create(g_Constants.vertexBuffer);
SceneVertex v = vertices.Load(vertexID);Pick the wrapper by both dimensionality and read/write need: AGFXTexture2D<T> (read-only, sampled) vs AGFXRWTexture2D<T> (read/write, Load/Store only, no filtering) — matching AGFX_TEXTURE_USAGE_SAMPLED vs AGFX_TEXTURE_USAGE_STORAGE on the host-side agfxTextureCreateInfo. Use AGFXStructuredBuffer<T> for typed per-element buffer reads (scene constants, vertex pulling) and AGFXByteAddressBuffer/AGFXRWByteAddressBuffer for raw/untyped access — matching AGFX_BUFFER_VIEW_TYPE_STRUCTURED vs AGFX_BUFFER_VIEW_TYPE_RAW host-side.
There is no root-level CBV beyond b0's push constants. To pass a larger, per-frame constant buffer, put its ResourceHandle as a field in the push-constant struct and load it as a one-element AGFXStructuredBuffer inside the shader:
struct GBufferSceneConstants { float4x4 viewProj; };
struct GBufferPushConstants {
float4x4 worldMatrix;
ResourceHandle sceneCB;
// ...
};
AGFX_PUSH_CONSTANTS(GBufferPushConstants, g_Constants);
vs_out main_vs(uint vertexID : SV_VertexID) {
AGFXStructuredBuffer<GBufferSceneConstants> sceneCB = AGFXStructuredBuffer<GBufferSceneConstants>::Create(g_Constants.sceneCB);
GBufferSceneConstants scene = sceneCB.Load(0);
// ...
}Host side, this sceneCB handle comes from agfxBufferViewGetHandle on an agfxBufferView created with AGFX_BUFFER_VIEW_TYPE_CONSTANT (or STRUCTURED, since the shader reads it as a structured buffer either way) over an upload-heap agfxBuffer.
AGFX vertex shaders don't use IA vertex attributes — they take SV_VertexID and manually pull from a structured buffer, since bindless makes an explicit vertex-buffer handle no more expensive than an IA binding and lets one pipeline draw meshes with arbitrary vertex layouts:
vs_out main_vs(uint vertexID : SV_VertexID) {
AGFXStructuredBuffer<SceneVertex> vertices = AGFXStructuredBuffer<SceneVertex>::Create(g_Constants.vertexBuffer);
SceneVertex v = vertices.Load(vertexID + g_Constants.vertexOffset);
// ...
}vertexOffset in push constants lets one shared vertex buffer serve multiple meshes/draws without rebinding.
struct MyPushConstants { ResourceHandle srcTex; ResourceHandle dstTex; uint dstWidth; uint dstHeight; };
AGFX_PUSH_CONSTANTS(MyPushConstants, g_Constants);
[numthreads(8, 8, 1)]
void main_cs(uint3 id : SV_DispatchThreadID)
{
if (id.x >= g_Constants.dstWidth || id.y >= g_Constants.dstHeight)
return;
// ...
}The [numthreads(x, y, z)] values must match the groupSizeX/Y/Z passed to agfxComputePipelineCreateInfo host-side (or, for mesh/task shaders, the reflected meshSizeX/Y/Z/taskSizeX/Y/Z the compiler extracts automatically — see below). Always bounds-check against actual target dimensions since dispatch group counts are typically rounded up.
Existing shaders use main_vs, main_ps, main_cs, and (for mesh pipelines) main_ms/main_as. Match this convention for new shaders and pass the matching agfxShaderStage/agfxShaderModuleType pair host-side — the DXC target profile (vs_6_6, ps_6_6, cs_6_6, ms_6_6, as_6_6) is derived from agfxShaderStage in each platform's agfx_shader_compiler_* file, so stage and entry point must agree.
// Typical helper (see deferred_renderer.cpp's CompileShader)
agfxShaderCompilerOptions options = {};
options.stage = AGFX_SHADER_STAGE_FRAGMENT;
strncpy(options.entryPoint, "main_ps", sizeof(options.entryPoint) - 1);
options.sourceCode = source.data();
options.sourceCodeSize = (uint32_t)source.size();
agfxShaderCompilerResult result = {};
agfxCompileShader(&options, &result);
agfxShaderModuleCreateInfo moduleInfo = {};
moduleInfo.code = result.compiledCode;
moduleInfo.codeSize = result.compiledSize;
moduleInfo.entryPoint = "main_ps";
moduleInfo.type = AGFX_SHADER_MODULE_TYPE_FRAGMENT;
agfxShaderModule* fragmentModule = agfxShaderModuleCreate(device, &moduleInfo);Compile vertex+fragment (or mesh[+task]) modules separately and attach both to agfxRenderPipelineCreateInfo::vertexShader/fragmentShader (or meshShader/taskShader); a single computeShader module goes into agfxComputePipelineCreateInfo. agfxShaderModuleDestroy is safe immediately after the pipeline(s) built from it are created — the module isn't referenced afterward.
For mesh/task shaders, read result.meshSizeX/Y/Z/taskSizeX/Y/Z (populated by compiler reflection — Metal shader converter on macOS, SPIRV-Reflect on Linux — not something you hand-specify) and feed them into agfxRenderPipelineCreateInfo::meshGroupSizeX/Y/Z/taskGroupSizeX/Y/Z — these must match what the shader actually declares or dispatch counts silently disagree between backends.
register(bN)/register(tN)/register(sN) resource binding instead of routing everything through push constants + ResourceDescriptorHeap/SamplerDescriptorHeap — AGFX's binding surface is exactly the push constants (b0), the draw ID (b1 on D3D12/Metal, a builtin on Vulkan), and direct-indexed heaps; anything else won't be bound.AGFX_PUSH_CONSTANTS block per translation unit. The SPIR-V backend rejects a file that declares more than one [[vk::push_constant]] block, even when only one entry point is selected for compilation — a file with multiple entry points that need different push-constant structs must be split into separate .hlsl files. This is why the demo's GPU-driven G-buffer path lives in gbuffer_indirect.hlsl, not in gbuffer.hlsl.AGFX_DRAW_ID() in a pixel shader. On Vulkan it resolves to the SPIR-V DrawIndex builtin, valid only in vertex/mesh/task stages — read it in the vertex shader and forward it through a nointerpolation interpolant (see gbuffer_indirect.hlsl).AGFXTexture2D (read-only) where the texture was created with AGFX_TEXTURE_USAGE_STORAGE and needs Store, or vice versa — pick the wrapper matching the host-side agfxTextureUsage/agfxTextureViewCreateInfo::writeable.AGFXRWTexture2D sized smaller than numthreads-rounded dispatch dimensions.agfxShaderStage/agfxShaderModuleType between the compile options and the module create info — the DXC profile is derived from the stage, and a mismatch will misdirect the compiler or produce a module that doesn't bind to the intended pipeline slot.© 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-writing-bindless-shaders of AmelieHeinrich/agfx.
Open the folder on GitHubat commit d8ad38b
Agfx Writing Bindless Shaders 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 Writing Bindless Shaders this skillAmelieHeinrich/agfx | 146 | — | ~3.4k | Automated safety check: Pass | MIT | |
| Rdc CLIBANANASJIM/rdc-cli | 182 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Sokol Netelix22/Sokol.NET | 154 | — | ~2.8k | 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 |
BANANASJIM/rdc-cli
A skill your agent uses when working with RenderDoc capture files (.rdc), analyzing GPU frames, tracing shaders, inspecting draw calls, or running CI assertions against GPU captures.
elix22/Sokol.NET
Sokol.NET framework development — use for ANY work in this repo: creating or debugging examples, building/running for desktop/Android/iOS/Web, writing or compiling shaders, adding a new C/C++…
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.
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 porting an existing Vulkan engine or renderer to AGFX — translating VkDevice/VkCommandBuffer/VkPipeline/VkDescriptorSet/VkRenderPass 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.
Works with
Categories
ALWAYS use when writing or modifying HLSL shaders for AGFX, or wiring the agfxShaderCompiler / agfxShaderModule / agfxRenderPipeline / agfxComputePipeline pipeline around them. Agfx Writing Bindless Shaders is an agent skill from AmelieHeinrich/agfx. ALWAYS use when writing or modifying HLSL shaders for AGFX, or wiring the agfxShaderCompiler / agfxShaderModule / agfxRenderPipeline / agfxComputePipeline pipeline around them.
Agfx Writing Bindless Shaders fits situations like: modifying HLSL shaders for AGFX; wiring the agfxShaderCompiler / agfxShaderModule / agfxRenderPipeline / agfxComputePipeline pipeline around them; AGFXPUSHCONSTANTS; AGFXTexture2D/AGFXRWTexture2D/AGFXStructuredBuffer/AGFXByteAddressBuffer/AGFXSampler.
Run `npx skills add AmelieHeinrich/agfx --skill agfx-writing-bindless-shaders -a claude-code`. Or copy the skill folder (.claude/skills/agfx-writing-bindless-shaders in AmelieHeinrich/agfx) into .claude/skills/agfx-writing-bindless-shaders in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AmelieHeinrich/agfx --skill agfx-writing-bindless-shaders -a codex`. Or copy the skill folder (.claude/skills/agfx-writing-bindless-shaders in AmelieHeinrich/agfx) into .agents/skills/agfx-writing-bindless-shaders 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-writing-bindless-shaders -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-writing-bindless-shaders, .gemini/skills/agfx-writing-bindless-shaders, .github/skills/agfx-writing-bindless-shaders and .opencode/skills/agfx-writing-bindless-shaders in your project.
SKILL.md names no scripts, command-line tools or credentials: Agfx Writing Bindless Shaders 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 Writing Bindless Shaders is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 13k 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 Writing Bindless Shaders: Rdc CLI (BANANASJIM/rdc-cli, 182 stars), Sokol Net (elix22/Sokol.NET, 154 stars), New Experiment (Tresjs/tres, 3.8k stars) and Anatomy (wheresryan22/anatomy, 500 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.