Repository navigation
feat(agc): implement 10_11_11 unorm color targets through 32-bit uint attachments - #1485
Conversation
48f4ab5 to
56b02cb
Compare
56b02cb to
b09b30e
Compare
b09b30e to
c89538f
Compare
c89538f to
d41f24f
Compare
|
Checked on current Unmodelled cases still throw and the CB-rounding assumption is recorded in TechnicalDebt. Merging once CI is green on the rebased head. |
d41f24f to
1e92722
Compare
… attachments CB_COLOR_INFO format 6 (COLOR_10_11_11) with NUMBER_UNORM threw in DecodeColorFormat: Vulkan has only the B10G11R11 float format. Such a target now renders into an R32_UINT attachment in the layout of format-30 images (unorm11 R and G in bits 0-21, unorm10 B in bits 22-31), so later image loads of the surface read the same words. The target format is draw state, so the packing is a specialization of the registered pixel shader: every float MRT export also computes the packed word (EmitFormatStoreComponent) behind specialization constant ExportPackingBase + target, and the specialized module turns a packed target's output into a uint4 that ValidateShaders expects. The new request field targetExportPacking is in the module key, the result memo, the draw key and the serialized request (version 14). Blending, partial RGB writes, UNORM16/SNORM16/UINT16 exports, DCC and ROUND_MODE throw.
1e92722 to
c4b7a74
Compare
|
Checked on current |
…unorm-color-targets feat(agc): implement 10_11_11 unorm color targets through 32-bit uint attachments
What
Color targets with CB_COLOR_INFO format 6 (
COLOR_10_11_11) andNUMBER_UNORMthrowunsupported color format 6 number type 0 component swap 0; Vulkan has no unorm 11_11_10 format.EmitFormatStoreComponent: nearest even, NaN and negatives to 0) behind spec constantExportPackingBase + target;SpecializeFragmentOutputsmakes a packed target's output the uint4ValidateShadersrequires. TechnicalDebt: the CB is assumed to round alike.targetExportPackingis draw state: outside the static ABI key, inside the module key, the result memo, the draw key and the serialized request (version 14, after feat(shader): carry the shader float mode into the recompile request #1816's 13). Specialization failures are now rethrown instead of terminating insidestd::call_onceon MinGW.ROUND_MODE, component swaps, other number types.ValidateShaderscheck; feat(agc): vertex clip and cull distances #423, feat(agc): single-sample sample masks as a per-quad-pixel discard #448 and test(shader): cover stage-specific float modes and legacy captures #1442 change the request version lines; fix(agc): support alternate channel order in 16-bit color targets #1349 editsDecodeColorFormatandDecodeState, with no conflict beyond its own withmain.Tested
mainf145139: configure-DBUILD_TESTING=ON, full build,--target libs,ctest:ctest --output-on-failure)mainf145139: 498/498 passagc_driver_packed_unorm_color_targetdraws through the registered pixel shader (tiled and linear; 32_ABGR and FP16_ABGR; ties, NaN, infinities) and checks exact words. It fails with the packing in the static key (unregistered program is not a compute shader) or out of the module key.unorm10_11_11TargetTests(agc_driver_graphics): one artifact, two specializations.agc_shader_memory: version 1-13 requests decode unpacked. None of the three builds onmain.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repository (attach them to this PR)