[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:game-dev\u002Fgfx-gpu-pipeline-stages":4,"config":232},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":130,"samples":147},"game-dev","Game Development","","gfx-gpu-pipeline-stages","Gfx Gpu Pipeline Stages","en",75,2850,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127],{"key":19,"name":20,"count":11},"game-ai-pathfinding","Game Ai Pathfinding",{"key":22,"name":23,"count":11},"game-input-audio","Game Input Audio",{"key":25,"name":26,"count":11},"game-loop-fundamentals","Game Loop Fundamentals",{"key":28,"name":29,"count":11},"game-networking-multiplayer","Game Networking Multiplayer",{"key":31,"name":32,"count":11},"game-performance-optimization","Game Performance Optimization",{"key":34,"name":35,"count":11},"game-physics-collision","Game Physics Collision",{"key":37,"name":38,"count":11},"game-rendering-pipeline","Game Rendering Pipeline",{"key":40,"name":41,"count":11},"game-state-management","Game State Management",{"key":43,"name":44,"count":11},"gfx-forward-deferred-architectures","Gfx Forward Deferred Architectures",{"key":8,"name":9,"count":11},{"key":47,"name":48,"count":11},"gfx-post-processing-aa-hdr","Gfx Post Processing Aa Hdr",{"key":50,"name":51,"count":11},"gfx-shading-lighting-pbr","Gfx Shading Lighting Pbr",{"key":53,"name":54,"count":11},"gfx-shadows-depth-precision","Gfx Shadows Depth Precision",{"key":56,"name":57,"count":11},"gfx-textures-sampling-compression","Gfx Textures Sampling Compression",{"key":59,"name":60,"count":11},"gp-ability-cooldown-damage","Gp Ability Cooldown Damage",{"key":62,"name":63,"count":11},"gp-animation-state-locomotion","Gp Animation State Locomotion",{"key":65,"name":66,"count":11},"gp-camera-follow-targeting","Gp Camera Follow Targeting",{"key":68,"name":69,"count":11},"gp-character-controller-movement","Gp Character Controller Movement",{"key":71,"name":72,"count":11},"gp-frame-windows-game-feel","Gp Frame Windows Game Feel",{"key":74,"name":75,"count":11},"gp-interaction-detection-triggers","Gp Interaction Detection Triggers",{"key":77,"name":78,"count":11},"nc-rollback-determinism","Nc Rollback Determinism",{"key":80,"name":81,"count":11},"nc-security-protocol","Nc Security Protocol",{"key":83,"name":84,"count":11},"nc-serialization-bandwidth","Nc Serialization Bandwidth",{"key":86,"name":87,"count":11},"nc-time-sync-tick","Nc Time Sync Tick",{"key":89,"name":90,"count":11},"nc-topology-nat-relay","Nc Topology Nat Relay",{"key":92,"name":93,"count":11},"nc-transport-reliability","Nc Transport Reliability",{"key":95,"name":96,"count":11},"ue-actor-component-lifecycle","Ue Actor Component Lifecycle",{"key":98,"name":99,"count":11},"ue-blueprint-cpp-interop","Ue Blueprint Cpp Interop",{"key":101,"name":102,"count":11},"ue-containers-strings-memory","Ue Containers Strings Memory",{"key":104,"name":105,"count":11},"ue-gameplay-framework-classes","Ue Gameplay Framework Classes",{"key":107,"name":108,"count":11},"ue-modules-build-packaging","Ue Modules Build Packaging",{"key":110,"name":111,"count":11},"ue-uobject-reflection-gc","Ue Uobject Reflection Gc",{"key":113,"name":114,"count":11},"un-csharp-memory-gc-performance","Un Csharp Memory Gc Performance",{"key":116,"name":117,"count":11},"un-gameobject-component-transform","Un Gameobject Component Transform",{"key":119,"name":120,"count":11},"un-jobs-burst-dots-basics","Un Jobs Burst Dots Basics",{"key":122,"name":123,"count":11},"un-monobehaviour-lifecycle-execution-order","Un Monobehaviour Lifecycle Execution Order",{"key":125,"name":126,"count":11},"un-prefabs-instantiate-pooling-addressables","Un Prefabs Instantiate Pooling Addressables",{"key":128,"name":129,"count":11},"un-scriptableobject-serialization","Un Scriptableobject Serialization",[131,135,138,141,144],{"key":132,"name":133,"count":134},"gameplay","Gameplay",450,{"key":136,"name":137,"count":134},"graphics-rendering","Graphics \u002F Rendering",{"key":139,"name":140,"count":134},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":142,"name":143,"count":134},"unity-csharp","Unity (C#)",{"key":145,"name":146,"count":134},"unreal-cpp","Unreal (C++)",[148,166,179,193,206,219],{"id":149,"topic":9,"difficulty":150,"body":151,"options":152,"correct_key":160,"explanation":165},"01a01705-1f35-7671-add6-5b469c4a360c",1,"In the graphics pipeline, what is the primary job of the input assembly stage?",[153,156,159,162],{"key":154,"text":155},"a","It samples textures and filters color values for each fragment",{"key":157,"text":158},"b","It blends the fragment shader output with the existing color buffer",{"key":160,"text":161},"c","It reads vertex\u002Findex buffer data and assembles primitives such as triangles",{"key":163,"text":164},"d","It converts normalized device coordinates into pixel coordinates on screen","Input assembly is the stage that reads vertex\u002Findex buffer data and groups vertices into primitives (points, lines, triangles) according to the draw call's topology, before any vertex shader work happens. Texture filtering, blending, and the NDC-to-pixel conversion belong to later stages.",{"id":167,"topic":9,"difficulty":150,"body":168,"options":169,"correct_key":154,"explanation":178},"01a01705-1f37-7558-8b96-618d054d828a","How does a vertex shader execute relative to the mesh being drawn?",[170,172,174,176],{"key":154,"text":171},"It runs once per vertex, independently transforming each vertex's attributes",{"key":157,"text":173},"It runs once per pixel, computing the final color for each covered fragment",{"key":160,"text":175},"It runs once per draw call, transforming the whole mesh in a single invocation",{"key":163,"text":177},"It runs once per triangle, after the triangle's three vertices are already assembled","A vertex shader is invoked once for every vertex fed into the pipeline, typically transforming position (usually into clip space) and other per-vertex attributes independently of its neighbors. Per-pixel color computation is the fragment shader's job, not the vertex shader's.",{"id":180,"topic":9,"difficulty":181,"body":182,"options":183,"correct_key":157,"explanation":192},"01a01705-1f38-7419-b3d2-5a61475c0d9f",2,"Where do the optional tessellation and geometry shader stages sit in the pipeline order, when present?",[184,186,188,190],{"key":154,"text":185},"Both run after rasterization, operating on the already-generated fragments",{"key":157,"text":187},"Both run after the vertex shader and before rasterization, on vertex\u002Fprimitive data",{"key":160,"text":189},"Tessellation runs before input assembly, geometry runs after the output merger",{"key":163,"text":191},"Both run inside the fragment shader as callable sub-programs invoked per pixel","When enabled, tessellation and geometry stages are positioned after the vertex shader and before rasterization: they still operate on vertex\u002Fprimitive-level data (subdividing patches or emitting new primitives), not on per-pixel fragments. Fragment-stage work only begins once rasterization has produced fragments.",{"id":194,"topic":9,"difficulty":150,"body":195,"options":196,"correct_key":163,"explanation":205},"01a01705-1f39-72c4-a003-3e0efcc27a67","What operation is the perspective divide, and when does it happen in the pipeline?",[197,199,201,203],{"key":154,"text":198},"Multiplying screen-space x and y by the depth value, performed inside the fragment shader",{"key":157,"text":200},"Adding the camera's near and far plane distances, performed during input assembly",{"key":160,"text":202},"Subtracting the viewport origin from window coordinates, performed during the output merger",{"key":163,"text":204},"Dividing clip-space x, y and z by clip-space w to produce normalized device coordinates","The perspective divide takes clip-space coordinates and divides x, y and z by the w component, producing normalized device coordinates (NDC). This happens after clipping and before the viewport transform converts NDC into window\u002Fpixel coordinates.",{"id":207,"topic":9,"difficulty":181,"body":208,"options":209,"correct_key":157,"explanation":218},"01a01705-1f3b-7125-9992-29887ec9ea0b","What does the viewport transform convert, and into what space?",[210,212,214,216],{"key":154,"text":211},"It converts world-space positions directly into clip-space positions",{"key":157,"text":213},"It converts normalized device coordinates into window\u002Fpixel coordinates",{"key":160,"text":215},"It converts fragment shader color output into the framebuffer's storage format",{"key":163,"text":217},"It converts vertex attributes into the varyings passed to the fragment shader","The viewport transform maps normalized device coordinates (the −1..1 range after the perspective divide) into the actual window\u002Fpixel coordinates of the configured viewport rectangle, which rasterization then uses to generate fragments at specific pixel locations.",{"id":220,"topic":9,"difficulty":181,"body":221,"options":222,"correct_key":154,"explanation":231},"01a01705-1f3c-7a0e-b8d9-8e5e28c87cc2","Relative to the perspective divide, in which space does primitive clipping against the view volume happen?",[223,225,227,229],{"key":154,"text":224},"In clip space, before the perspective divide, using bounds expressed in terms of w",{"key":157,"text":226},"In window space, after the viewport transform has produced pixel coordinates",{"key":160,"text":228},"In normalized device coordinate space, strictly after the perspective divide",{"key":163,"text":230},"In tangent space, computed alongside normal mapping in the fragment shader","Clipping is defined against the clip-space view volume, where the bounds are expressed relative to w (for example −w ≤ x ≤ w), and this happens before the perspective divide converts coordinates into NDC. Clipping in window space or after the divide would need a different, non-clip-space formulation.",{"fields":233,"seniorities":446,"interview_shapes":447,"locales":452,"oauth":454,"question_count":457,"coach_enabled":458,"jd_match_enabled":458},[234,259,279,296,320,333,352,371,393,412,427,437],{"key":235,"name_tr":236,"name_en":236,"sort":150,"specializations":237},"backend","Backend",[238,241,244,247,250,253,256],{"key":239,"name":240,"field":235},"general","Genel",{"key":242,"name":243,"field":235},"go","Go",{"key":245,"name":246,"field":235},"python","Python",{"key":248,"name":249,"field":235},"java","Java",{"key":251,"name":252,"field":235},"csharp","C#\u002F.NET",{"key":254,"name":255,"field":235},"nodejs","Node.js",{"key":257,"name":258,"field":235},"php","PHP",{"key":260,"name_tr":261,"name_en":261,"sort":181,"specializations":262},"frontend","Frontend",[263,264,267,270,273,276],{"key":239,"name":240,"field":260},{"key":265,"name":266,"field":260},"javascript","JavaScript",{"key":268,"name":269,"field":260},"typescript","TypeScript",{"key":271,"name":272,"field":260},"react","React",{"key":274,"name":275,"field":260},"vue","Vue",{"key":277,"name":278,"field":260},"angular","Angular",{"key":280,"name_tr":281,"name_en":281,"sort":282,"specializations":283},"fullstack","Fullstack",3,[284,285,286,287,288,289,290,291,292,293,294,295],{"key":239,"name":240,"field":280},{"key":242,"name":243,"field":235},{"key":245,"name":246,"field":235},{"key":248,"name":249,"field":235},{"key":251,"name":252,"field":235},{"key":254,"name":255,"field":235},{"key":257,"name":258,"field":235},{"key":265,"name":266,"field":260},{"key":268,"name":269,"field":260},{"key":271,"name":272,"field":260},{"key":274,"name":275,"field":260},{"key":277,"name":278,"field":260},{"key":297,"name_tr":298,"name_en":298,"sort":299,"specializations":300},"devops-cloud","DevOps \u002F Cloud",4,[301,302,305,308,311,314,317],{"key":239,"name":240,"field":297},{"key":303,"name":304,"field":297},"aws","AWS",{"key":306,"name":307,"field":297},"gcp","GCP",{"key":309,"name":310,"field":297},"azure","Azure",{"key":312,"name":313,"field":297},"kubernetes","Kubernetes",{"key":315,"name":316,"field":297},"terraform","Terraform",{"key":318,"name":319,"field":297},"linux","Linux",{"key":321,"name_tr":322,"name_en":322,"sort":323,"specializations":324},"ai-engineer","AI Engineer",5,[325,326,327,330],{"key":239,"name":240,"field":321},{"key":245,"name":246,"field":321},{"key":328,"name":329,"field":321},"llm-rag","LLM\u002FRAG",{"key":331,"name":332,"field":321},"mlops","MLOps",{"key":334,"name_tr":335,"name_en":336,"sort":337,"specializations":338},"database","Veritabanı","Database",6,[339,340,343,346,349],{"key":239,"name":240,"field":334},{"key":341,"name":342,"field":334},"postgresql","PostgreSQL",{"key":344,"name":345,"field":334},"mysql","MySQL",{"key":347,"name":348,"field":334},"mongodb","MongoDB",{"key":350,"name":351,"field":334},"redis","Redis",{"key":353,"name_tr":354,"name_en":355,"sort":356,"specializations":357},"mobile","Mobil","Mobile",7,[358,359,362,365,368],{"key":239,"name":240,"field":353},{"key":360,"name":361,"field":353},"ios-swift","iOS (Swift)",{"key":363,"name":364,"field":353},"android-kotlin","Android (Kotlin)",{"key":366,"name":367,"field":353},"flutter","Flutter",{"key":369,"name":370,"field":353},"react-native","React Native",{"key":372,"name_tr":373,"name_en":374,"sort":375,"specializations":376},"security","Güvenlik","Security",8,[377,378,381,384,387,390],{"key":239,"name":240,"field":372},{"key":379,"name":380,"field":372},"appsec","AppSec",{"key":382,"name":383,"field":372},"offensive-pentest","Offensive \u002F Pentest",{"key":385,"name":386,"field":372},"cloud-security","Cloud Security",{"key":388,"name":389,"field":372},"devsecops","DevSecOps",{"key":391,"name":392,"field":372},"blue-team-incident","Blue Team \u002F Incident",{"key":394,"name_tr":395,"name_en":396,"sort":397,"specializations":398},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[399,400,403,406,409],{"key":239,"name":240,"field":394},{"key":401,"name":402,"field":394},"test-automation","Test Automation",{"key":404,"name":405,"field":394},"sdet","SDET",{"key":407,"name":408,"field":394},"performance-testing","Performance Testing",{"key":410,"name":411,"field":394},"mobile-qa","Mobile QA",{"key":413,"name_tr":414,"name_en":414,"sort":415,"specializations":416},"data-engineer","Data Engineer",10,[417,418,421,424],{"key":239,"name":240,"field":413},{"key":419,"name":420,"field":413},"pipelines-etl","Pipelines \u002F ETL",{"key":422,"name":423,"field":413},"streaming","Streaming",{"key":425,"name":426,"field":413},"warehousing","Warehousing",{"key":5,"name_tr":428,"name_en":6,"sort":429,"specializations":430},"Oyun Geliştirme",11,[431,432,433,434,435,436],{"key":239,"name":240,"field":5},{"key":142,"name":143,"field":5},{"key":145,"name":146,"field":5},{"key":132,"name":133,"field":5},{"key":136,"name":137,"field":5},{"key":139,"name":140,"field":5},{"key":438,"name_tr":439,"name_en":439,"sort":440,"specializations":441},"ml-engineer","ML Engineer",12,[442,443],{"key":239,"name":240,"field":438},{"key":444,"name":445,"field":438},"classical-ml","Classical ML",[14,15,16],{"junior":448,"mid":450,"senior":451},{"questions":449,"median_sec":3},20,{"questions":449,"median_sec":3},{"questions":449,"median_sec":3},[453,10],"tr",[455,456],"google","github",27600,true]