Thanks for this. A couple of comments from an initial cursory look:
+typedef enum D3D12_PIPELINE_STATE_SUBOBJECT_TYPE +{ + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS = 24, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS = 25, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID, +} D3D12_PIPELINE_STATE_SUBOBJECT_TYPE;
In general we'd like these enum elements to have explicit values, in hexadecimal. That's mostly in order to make it easier to look them up when they show up in traces. There are also a couple of places in this series that either remove existing explicit values or change them to decimal.
+typedef enum D3D12_WAVE_MMA_TIER { + D3D12_WAVE_MMA_TIER_NOT_SUPPORTED = 0, + D3D12_WAVE_MMA_TIER_1_0 = 10, +} D3D12_WAVE_MMA_TIER; ... +typedef enum D3D12_TRI_STATE { + D3D12_TRI_STATE_UNKNOWN = -1, + D3D12_TRI_STATE_FALSE = 0, + D3D12_TRI_STATE_TRUE = 1, +} D3D12_TRI_STATE;
Brace placement.
Patch 3/3 is fairly large. Could you split that per interface? (In principle I'd prefer splitting the other two patches as well, but they're small enough that at least personally I'm not too bothered about it.) I'd also point out that most of these structures/enums/interfaces aren't so much missing as simply introduced by newer SDK/d3d12 versions. You could conceivably split things by the SDK version that first introduced them, although that's probably more work, and I'd expect the resulting patches to still be fairly large.