Repository navigation
feat(agc): draw point lists on the vertex path with their point size - #6639
milescoviello wants to merge 6 commits into
Conversation
| const bool fromVertex = (result.paClVsOutCntl & (1u << 16u)) != 0; | ||
| Require(!fromVertex || (result.paClVsOutCntl & (1u << 21u)) != 0, "USE_VTX_POINT_SIZE without VS_OUT_MISC_VEC_ENA is unsupported"); | ||
| Require(fromVertex || (size & 0xffffu) == size >> 16u, "points whose PA_SU_POINT_SIZE width and height differ are unsupported"); | ||
| Require((limits & 0xffffu) <= limits >> 16u, "PA_SU_POINT_MINMAX with a minimum above its maximum is unsupported"); |
There was a problem hiding this comment.
Could this reject a zero endpoint (or otherwise ensure the emitted value is positive)? With , a 0/0 limit makes write to ; without that bit, a zero writes 0 as well. Vulkan requires the value written to to be greater than zero (spec). only governs sizes greater than 1. If zero has a special AGC meaning, could you document the mapping and cover it in the test?
There was a problem hiding this comment.
My previous inline comment was mangled by shell quoting; here is the intended review point. Could this reject a zero PA_SU_POINT_MINMAX endpoint, or otherwise ensure the emitted value is positive? With USE_VTX_POINT_SIZE, a 0/0 limit makes EmitAuxPositionExport write clamp(exportedSize, 0, 0) to PointSize; without that bit, a zero PA_SU_POINT_SIZE writes 0 as well. Vulkan requires the value written to PointSize to be greater than zero: https://docs.vulkan.org/spec/latest/chapters/primsrast.html#primsrast-points. largePoints only governs sizes greater than 1. If zero has a special AGC meaning, could you document the mapping and cover it in the test?
There was a problem hiding this comment.
Thanks, you're right on both paths. Fixed in 8694957:
- Without USE_VTX_POINT_SIZE: a
PA_SU_POINT_SIZEof 0 throws (points of size 0 (PA_SU_POINT_SIZE 0) are unsupported). - With it: a
PA_SU_POINT_MINMAXmaximum of 0 throws. The clamp's lower bound is at least the smallest positive float, so an exported size of 0 or less is still written as a positive value. A zero minimum alone stays accepted because radeonsi programs it for multisampled and sprite points (util_get_min_point_size). Refusing it would block those draws. The emitter also refuses a non-positive size if the request ever carries one.
I don't know of a special AGC meaning for zero. A zero-radius point probably covers nothing on the console, so the floor draws the device's smallest point where the console likely draws none. That's in the debt entry as inferred.
Tests: agc_driver_graphics covers both refusals and checks that a zero register size with the bit set, a zero minimum, and a zero clamp without the bit still decode. agc_driver_vertex_point_size draws exported sizes 0 and -3 with a [0, 4] clamp and requires at most one pixel per point. NVIDIA draws one pixel for both, so the GPU case checks coverage and validity, not the floor's exact value. The area suite is unchanged: 468 of 469, with the known agc_driver_store_over_untracked failure.
AI-assisted: yes
There was a problem hiding this comment.
Thanks for checking both sources and adding the validation plus regression coverage. The distinction for a zero minimum with a positive maximum makes sense, and the latest commit addresses the Vulkan requirement I flagged.
|
I checked the zero-size path again against the emitted SPIR-V. |
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
|
Cross-validation on Windows 11 Pro 26220, NVIDIA GeForce RTX 4070 (driver 596.21), WinLibs MinGW-w64 GCC 15.2. PR head
OliSe Player PPSA01153 (02.001.000),
On the default path the visualiser composite is black here: after Square the frame is the menu at half brightness (frame-dump mean 17 to 18, max 140) for the whole run. With Not checked: AMD and Intel GPUs, Linux, a console, a full build of the stacked trees (targeted builds only: libs and the PR, #6530 test targets), a run with a module playing. Written with Claude Code assistance (validation by a subagent, reviewed in this session). |
8694957 to
f282d4d
Compare
|
Thanks for the Windows run and the title table. You're right about Noted on #6470 and #6503: whichever of these lands second moves that check again. AI-assisted: yes |
5c1508d to
3ddbd21
Compare
|
AMD run with this head (3ddbd21) merged onto
AI-assisted: yes (Claude Code) |
3ddbd21 to
ea05b78
Compare
|
Rechecked on head What changed since my run on
Not checked: Ouboros this time, Written with Claude Code assistance (validation by a subagent, reviewed in this session). |
|
Thanks @screamm for rechecking the request-version change and the journal case on the current head. I added the run to the description. AI-assisted: yes (Claude Code) |
ea05b78 to
bcbcea8
Compare
bcbcea8 to
1d714dd
Compare
fb7eea8 to
3ccf38f
Compare
|
@JJenkx another restack note for #6801: #7869 merged and took journal format 6. So #6639 is rebased again, onto
The focused 8 tests pass 2 of 2. AI-assisted: yes (Claude Code) |
|
Rebased once more, onto
The 17 tests matching the serializer, journal, point-size, point and geometry-output names pass 2 of 2. The formats are unchanged: journal 7, request version 43, AI-assisted: yes (Claude Code) |
3ccf38f to
8562564
Compare
A point list routed through the vertex path was refused, and so was PA_CL_VS_OUT_CNTL.USE_VTX_POINT_SIZE on it. OliSe Player (PPSA01153) stops on the latter with two of its MilkDrop presets. The vertex path now draws point lists as Vulkan points. The vertex stage writes PointSize: the misc export's X clamped to PA_SU_POINT_MINMAX when USE_VTX_POINT_SIZE is set, and the PA_SU_POINT_SIZE height otherwise. The point state travels in the recompile request (version 31) and the cache and draw keys. Non-square register sizes, inverted clamps, point sprite texture coordinates and, without largePoints, sizes other than one pixel throw. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Vulkan needs PointSize above zero. A PA_SU_POINT_SIZE of 0 without USE_VTX_POINT_SIZE, and a PA_SU_POINT_MINMAX maximum of 0 with it, now throw. With USE_VTX_POINT_SIZE the clamp's lower bound is at least the smallest positive float, so an exported size of 0 or less, which a clamp minimum of 0 lets through, is written as a positive value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
main took request versions 33 to 42 for other fields, the last of them the pixel sample order, so requests of those versions from main have no point-list tail. The point fields now come with version 43, after them, and the tests expect 43 and reject 44. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pipeline creation and SPIR-V validation read State::vertexPoints and the three point sizes, so the pipeline journal's recipe codec and canonical state now carry them, the State layout guard names its new size and the journal format becomes 8 (main took 5 for the recipe codec change of boykopovar#5656, 6 for the polygon modes of boykopovar#7869 and 7 for the truncated coverage of boykopovar#8115). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ll and point state A tessellated vertex request with the merged hull flag and a point list serializes as version 43 with both. Without its point tail it reads as main's version 42, without the pixel sample order as version 41, and without the f32 denormal preserve flag as version 39, each keeping the merged hull flag and taking the default point state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The entry was twice the 1000-character limit, led with the behaviour rather than the gaps, and named a title. It now lists what throws and what is inferred first, and names no title. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8562564 to
0116102
Compare
|
@JJenkx @oneandonlydean #6639 is rebased onto
AI-assisted: yes (Claude Code) |
|
#6801 is merged (a701f9f), and it carried this PR's six commits, now on Thanks @JJenkx for carrying the commits with their authorship, and @oneandonlydean for the journal ordering. AI-assisted: yes (Claude Code) |
What
OliSe Player (PPSA01153) picks a random MilkDrop preset. With two of its own presets, Che - Escape and Stahlregen + Geiss + Martin - Ouboros (Metal Finish 2), it stops on
main19 s in:The draw is a point list (
VGT_PRIMITIVE_TYPE1) on the vertex path (VGT_SHADER_STAGES_EN0x2012010).PA_CL_VS_OUT_CNTL0x01210000 sets USE_VTX_POINT_SIZE, VS_OUT_MISC_VEC_ENA and VS_OUT_MISC_SIDE_BUS_ENA, so each point's size comes from the X of the misc position export.mainaccepts USE_VTX_POINT_SIZE only when nothing is drawn as points (#4715). Past that check it would also refuse the draw itself:point-list vertex rendering requires point-size output support. Point lists are drawn only through the geometry path onmain.How
PA_SU_POINT_SIZEandPA_SU_POINT_MINMAXare read as half sizes in 12.4 fixed point (a field of 8 is one pixel), the units radeonsi programs. The draw precheck accepts the same bit.PointSize. It starts as thePA_SU_POINT_SIZEheight. When USE_VTX_POINT_SIZE is set, the misc export's X replaces it, clamped toPA_SU_POINT_MINMAX. The recompiler already mapped that component togl_PointSize, but the driver never passed bit 16 through. The point state goes into the recompile request as four new vertex fields at the end of the request (version 33; feat(agc): draw line-strip output of NGG geometry programs as mesh lines #5884 took 31 and feat(recompiler): run single-wave wave64 compute programs at one lane per invocation on 32-lane hosts #5405 took 32 onmain), and into the cache key, the draw register key and the draw lookup. Shader validation accepts aPointSizeoutput for these draws.largePointsis enabled when available, and a point draw whose size can differ from one pixel requires it.Vulkan needs a
PointSizeabove zero, so a register size of 0 without USE_VTX_POINT_SIZE and a clamp maximum of 0 with it throw, and the clamp's lower bound is at least the smallest positive float. An exported size of 0 or less, which a clamp minimum of 0 lets through, draws as the device's smallest point. radeonsi programs that minimum for multisampled and sprite points.Also refused: a register size whose width and height differ, a clamp minimum above its maximum, USE_VTX_POINT_SIZE without VS_OUT_MISC_VEC_ENA, and point sprite texture coordinates (
SPI_PS_INPUT_CNTLPT_SPRITE_TEX or PT_SPRITE_TEX_ATTR1 whileSPI_INTERP_CONTROL_0.PNT_SPRITE_ENAis set). Nothing onmainchecks those coordinates, so a point draw that used them would otherwise render wrong silently. The geometry path is unchanged.Three choices are inferred, not measured. The clamp applies to the exported size but not to the register size, because radeonsi sets both clamps to the register size when the size isn't per vertex. Sizes outside the device's
pointSizeRangeare clamped by the device. On the console, a point whose size is 0 or less probably covers nothing; here it draws as the smallest point. Both are in the technical debt file.Tested
Linux (Ubuntu 24.04, GCC 13.3, Release), RTX 4070 Ti, NVIDIA 595.99.
agc_driver_vertex_point_size(new, GPU). It draws four points through the recompiler and checks that each one is an exact square of the expected side, in place: register sizes 1, 4 and 3 (the last ignoring a [6, 8] clamp), and exported sizes 2 inside [1, 8], 6 clamped to 4, 1 clamped up to 5, and 6 inside [1, 8] over a register size of 1. Exported sizes 0 and -3 with a clamp of [0, 4] cover at most one pixel (one on NVIDIA). Withmain'sSpirvModuleEmitter.cppandShaderInfoCollector.cpp, the size-4 case draws one-pixel points and fails.agc_driver_graphics: Che's registers decode as a vertex point list of one-pixel points, pass the precheck, and give the vertex stage bit 16. A register size decodes in diameters and doesn't turn on bit 16. A triangle draw gets no point size. The refusals above throw, including the two zero sizes. A zero register size with USE_VTX_POINT_SIZE, a zero clamp minimum, and a zero clamp without it still decode. PT_SPRITE_TEX passes with sprites off. The case of the existing inactive-point-size test that expected this point list to be refused now checks a point list on the geometry path instead, which is still refused. These tests use the new state fields, so they don't build onmain.request_serializer: the upgrade fixtures now expect version 37 and the new tail, and a point request round-trips and rejects a truncated tail.agc_driver_inactive_vertex_point_sizeandagc_driver_zero_position_vertexpass 3 of 3.maineb901bc (10-16, with fix(agc): journal the mesh output primitive size #6784). feat(agc): draw line-strip output of NGG geometry programs as mesh lines #5884 had taken request version 31, so the point fields moved to 32 (3069ed8):agc_shader_memoryexpects 32 for new requests and rejects 33. Pipeline creation and SPIR-V validation read the point state, so the pipeline journal now carriesvertexPointsand the three sizes, theStateguard names its new size and the journal format becomes 4 (3ddbd21). A point-list recipe must decode with its sizes inagc_pipeline_journal. ctest (^agc_driver_|^agc_vertex_barrier|recompiler|shader_cache|request_serializer|spirv|^agc_shader|bda|journal, 502 tests, with test(agc): keep the vertex terminate case's code in static storage #6789's one-line test fix applied soagc_driver_graphicsreaches this PR's cases): 501 pass.agc_driver_store_over_untrackedfails the same way onmain; test(agc): keep waiting for the neighbour copy case's result #6385 addresses it. My earlier regex left outagc_shader_memory, which this PR had broken; screamm found it.main1b1f848 (ea05b78), now with feat(recompiler): run single-wave wave64 compute programs at one lane per invocation on 32-lane hosts #5405, which took request version 32 for spanned waves. The point fields now come with version 33, after that flag (7a3f62e):agc_shader_memoryexpects 33 for new requests and rejects 34, and therequest_serializerfixtures append the spanned-wave byte before the point tail.agc_driver_vertex_point_size,request_serializerandagc_driver_graphicspass 3 of 3. Of the 898 area tests (the regex above plus^guest_|libc), all pass exceptmain'sagc_driver_store_over_untrackedandguest_kernel_fcntl; the latter aborted once underctest -j4and passes on its own.main895f47f (0116102). feat(agc): draw one-sample color targets beside a multisampled depth target with sample 0's coverage #8115 took journal format 7 andsizeof(State)808, so this PR's journal format moves to 8 and theStateguard to 824 (808 plus the 16 bytes of point state). 8 is the number feat(agc): rasterize geometry points with their point size #6801 has in the queue; feat(agc): rasterize geometry points with their point size #6801 carries these six commits and changes no other journal field, so both claim 8 for the same fields. Request version 43 is still free (mainwrites 42).Pipeline.cppkeeps feat(agc): draw one-sample color targets beside a multisampled depth target with sample 0's coverage #8115's truncated-coverage check next to this PR's point-size check. The 14 tests matching^request_serializer$|^agc_shader_memory$|point|journal|^agc_driver_graphics$pass 3 of 3; with the Khronos validation layer (1.4.363),mainpasses 11 of 11 and this head 12 of 12 with no VUID on either side. On Windows (Windows 11 VM, GeForce GT 1030 with NVIDIA R580, WinLibs GCC, Release,ANYPS5_REQUIRE_VULKAN=1), the 15 tests matching the same regex pass 3 of 3 on this head.main275e896 (3ccf38f). feat(agc): draw point and line polygon modes #7869 took journal format 6 for its polygon modes, so this PR's journal format moves to 7.sizeof(State)stays 800 with feat(agc): draw point and line polygon modes #7869's field. The debt file keeps feat(agc): draw point and line polygon modes #7869's "Point and line polygon modes" entry next to this PR's "Vertex-path point lists".request_serializer,agc_shader_memory,agc_driver_pipeline_journal,agc_pipeline_journal,agc_pipeline_journal_long_paths,agc_driver_graphicsand both point-size tests pass 2 of 2.mainb6fe513 (fb7eea8). fix(agc): keep the guest's sample order where pixel (0,0)'s locations stand in for a 2x2 grid #6683 took request version 42 for the pixel sample order, so the point fields move to 43, after it:if (version >= 43u), and 44 is rejected.agc_shader_memory's base64 prefixes for the new and the rejected version follow.mainhas no point tail and reads without point state.request_serializernow round-trips a version 43 request with point state. It cuts the 13-byte tail for version 42, then removes the 16-byte sample order of the pixel fixtures for version 41, then drops the denormal flag for version 39. The merged hull flag is kept, and point state reads as defaults, at each step.mainhad 5).request_serializer,agc_shader_memory,agc_driver_pipeline_journal,agc_driver_graphicsand both point-size tests pass 3 of 3.ctest -R '^agc_|^request_serializer$|^shader'passes 865 of 868. The 3 failures are fix(agc): keep the guest's sample order where pixel (0,0)'s locations stand in for a 2x2 grid #6683's newagc_driver_sample_order,agc_driver_sample_order_grid_referenceandagc_driver_sample_order_recipe_depth_locations. They fail the same way onmainb6fe513 on this RTX 4070 Ti, 2 of 2 each, with the same messages.main57fdffd (a31abee). feat(shader): request DenormPreserve 32 where the device preserves f32 denormals #8697 took request version 41 for its f32 denormal-preserve flag, so the point fields move to 42 and come after that flag: new requests write 42, the point tail is readif (version >= 42u)after the version 41 flag, and 43 is rejected. A version 41 vertex request frommainhas no point tail and reads without point state. The merged hull case inrequest_serializer(as @JJenkx asked) now round-trips a version 42 request with point state, cuts the 13-byte tail for version 41 (point fields read as defaults, merged hull kept), then drops the denormal flag for version 39.main's version 40 case for the denormal flag stays. The pipeline journal format is 6 (mainhas 5, from perf(agc): data-only draw hits compare only the user words a stage reads #5656).ctest -R '^(agc_|shader_|request_)'passes 853 of 853, andrequest_serializer,agc_shader_memory,agc_driver_pipeline_journalandagc_driver_graphicspass 3 of 3.main636aa09 (2134e93). feat(agc): run registered merged hull programs (binary type 3) #6679 took request version 39 for its merged hull flag, so the point fields move to 40: new requests write 40, the point tail is readif (version >= 40u), 41 is rejected, andmain's merged hull gate stays at 39. A newrequest_serializercase (as @JJenkx suggested) round-trips a version 40 request with either merged hull value and point state, then cuts the 13-byte point tail off and sets version 39: the merged hull flag survives and the point fields read as defaults.agc_shader_memory's merged hull test now drops the point tail before it checks older versions.ctest -R '^(agc_|shader_|request_)'passes 835 of 835, and the point, vertex, serializer, journal and tessellation tests pass 3 of 3. The debt entry now leads with its gaps, is under 1000 characters, and names no title.main3aa4448 (a255453). feat(shader): emulate barycentrics and per-vertex parameters on the mesh path #6941 took request version 38 for its mesh barycentric layout, so the point fields move to 39: readif (version >= 39u), the tests expect 39 and reject 40, and version 35 to 38 requests frommainread without a point tail. feat(shader): emulate barycentrics and per-vertex parameters on the mesh path #6941's field sits in the graphics section, so the vertex-only depth-remap fixture still truncates from the tail.ShaderValidation.cppconflicted only on neighbouringModulefields (feat(shader): emulate barycentrics and per-vertex parameters on the mesh path #6941's mesh ones and this PR's point ones), and both are kept.request_serializer,agc_shader_memory, the point tests andagc_driver_graphicspass, 10 of 10. Under the LunarG SDK's 1.4.363 layer,point|^agc_driver_graphics$gives no validation messages onmain(7 tests) or with this PR (8).main32004df (0111965).maintook request version 37 for the stencil operation value export (7563b4a), so the point fields move to 38. They're readif (version >= 38u), the tests expect 38 and reject 39, and version 35 to 37 requests frommainread without a point tail. Both sides had changed the same line to 37, so git merged it without a conflict. The 635 broad-set tests pass onmain, and 636 of 636 with this PR. The serializer, point, shader-memory and journal tests pass 3 of 3. Under the LunarG SDK's 1.4.363 layer there are no validation messages on either side.main7f596df (24d4689; it merges with 6b8228b cleanly). feat(agc): remap a viewport depth range the device cannot express into the vertex shader #4650 took request version 35 for its depth remap fields and perf(shader): flush f32 denormals in hardware when a startup probe matches the emulation #6503 took 36 for the f32 flush-to-zero flag, so the point fields now come with version 37, after the flush flag, and the tests expect 37 and reject 38. The vertex stage keepsmain's depth remap mode beside the point size (Draw.cpp,DrawRegisterKey.cpp, the cache key andShaderInputInfoBuilder.cpp).main's merged coverage and depth remap already use journal format 4, so the journal format becomes 6 (State800 bytes), since perf(agc): data-only draw hits compare only the user words a stage reads #5656 took 5 onmain. feat(agc): remap a viewport depth range the device cannot express into the vertex shader #4650's depth remap layout check inagc_shader_memorynow skips the 13-byte point tail of a vertex request. InState.cppthe point-list export mask sits next to feat(libSceAgcDriver): support quad-list primitive type #6529's quad-list primitive restart rule. On 9817d53 the AGC, shader, request, journal and point set passed 616 of 617, against 615 of 616 onmainalone; the one failure on both isagc_driver_bda_device(agc_driver_bda_device times out in vkWaitForFences since the BDA anchor lookup (#5859, d422c760c) #7584). On the final head the 15 point, serializer, journal, shader memory, graphics, quad and primitive tests pass 3 of 3.main7bc7905 (7944d73; it merges with c8e3fcb cleanly).maintook request version 34 for its pixel fields, so a version 34 request frommainhas no point tail. The point fields now come with version 35 (0ad8628):agc_shader_memoryexpects 35 for new requests and rejects 36, and therequest_serializerfixtures move to 35. InShaderRegistry.cpp,mainnow decodes the vertex stage after its deferral check and inside atry, soApplyPointSizemoved there. InState.cpp,main'sPixelSampleLocationsand this PR'sApplyPointSizeboth stay. The AGC, shader, request, journal and point set passes 610 of 611, against 609 of 610 onmain7bc7905 alone; the one failure on both isagc_driver_bda_device(agc_driver_bda_device times out in vkWaitForFences since the BDA anchor lookup (#5859, d422c760c) #7584). The 10 point, serializer, journal and shader memory tests pass 3 of 3.main9f25d0b (1d714dd), with feat(libSceAgcDriver): support polygon primitive type 21 #7175. Its newPolygonPrimitiveTestsintests/Graphics.cppsits next to this PR'svertexPointListTests; both stay. Request version 33 is still free onmain(32 is the newest). The 34 tests matchinggraphics|point|journal|vertexpass.OliSe Player, 60 s, scripted pad input, copies of the app whose preset folder holds only one of its own presets:
main5d9dcc4SPI_PS_INPUT_ENA/ADDR 0x4002(SAMPLE_COVERAGE), which #6530 accepts. With #6530 as well, it reaches the limit (2 of 2) and the visualiser rendersOn the Intel VM (Arrow Lake iGPU, Mesa 26.1.6 ANV, Debian 13):
agc_driver_vertex_point_sizefrom 8694957 passes 3 of 3, with the same squares as on NVIDIA in every case, including one pixel for exported sizes 0 and -3.main5d9dcc4 with the line above, and runs to the 60 s limit with this PR.@screamm cross-checked it on Windows 11 Pro (RTX 4070, driver 596.21, MinGW-w64 GCC 15.2) at 8694957.
request_serializer,agc_driver_graphics,agc_driver_inactive_vertex_point_size,agc_driver_vertex_point_sizeandagc_driver_zero_position_vertexpassed 3 of 3. Withmain'sSpirvModuleEmitter.cppandShaderInfoCollector.cpp,agc_driver_vertex_point_sizefailed withregister size 4: a point is not a 4x4 square. In OliSe Player (150 s) with #6530, both presets reached the limit 2 of 2, wheremain+ #6530 stopped on the0x207line. There the visualiser composite was black on the default path and rendered withAPS5_NO_RESIDENT_TARGETS=1.@johnmaia ran the full suite on AMD (Radeon RX 7600, RADV NAVI33, Mesa 25.2.8, Ubuntu 24.04) with 3ddbd21 on
main82ddae7. 1287 of 1288 tests pass, and the one failure ismain'sagc_driver_graphics(#6792).agc_driver_vertex_point_sizepasses, and with #6789 merged too,agc_driver_graphicspasses with and without this PR, so the newGraphics.cppcases run there.@screamm rechecked the current head on Windows (ea05b78, stacked with #6530 and #6669 on
main5f61879).agc_shader_memory,request_serializer, the point-size tests and both journal tests pass 3 of 3, including the new point-list journal case. WithRequestSerializer.cppset back to version 32,agc_shader_memoryfails on trailing data. OliSe Player (Che - Escape) reaches the 120 s limit 2 of 2, wheremainstops on register 0x207 2 of 2.#6530 (mine) also moves the pipeline journal format from 3 to 4, for
State::mergedCoverage. Its fields sit beforequadSampleMaskin the codec, so the two do not conflict there, but whichever merges second will move the format to 5.Not checked in a title on AMD, or on a console.
Other open PRs touch neighbouring lines: #6529 next to the same
0x207check, #6530 inPipeline.cpp, #5859 inSpirvModuleEmitter.cpp. #6470 and #6503 also took request version 31, which #5884 has since used onmain; whichever of these lands next takes the next free version. #6679 and #6801 also take version 37, so whichever of the three lands first keeps 37, and the others move to 38 and 39.VK_LAYER_PATH,VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ANYPS5_NO_SHADER_CACHE=1 ANYPS5_REQUIRE_VULKAN=1 ctest -V, RTX 4070 Ti, Linux. Neither log reportswas not found but was requested by env var VK_INSTANCE_LAYERS.^agc_driver_graphics$|vertex_point_size|^agc_shader_memory$: onmain7f596df it reportsVkDeviceCreateInfo-pNext-pNext×6 andVkGraphicsPipelineCreateInfo-pLibraries-06681×3. With this PR it reports the same two (×9 and ×30, mostly from the newagc_driver_vertex_point_size) and no other VUID. This older layer gives both onmainfor every device-creating test.main7f596df or with this PR.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)🤖 Generated with Claude Code