mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-09-13 09:16:14 -07:00
412f91a14c
We need to distinguish between the data type of a resource and the data type of its components. These are usually the same except for 4.0 profiles where an array (or multi-dimensional array) of resources is still considered a single resource, so it is possible for it to hold more than one component. In the latter case, we often need to access the type of a single component (all components have the same type) instead of the type of the whole array which often doesn't contain the required information, such as sampler dimension. This patch replaces the extern_resource.data_type field with the extern_resource.component_type field, which points to the type of a single component in the resource. Using it relieves many other code paths from considering the possibility of the resource being an array. This fixes runtime errors reported by UBSan, such as this: vkd3d/libs/vkd3d-shader/tpf.c:6075:87: runtime error: load of value 7, which is not a valid value for type '_Bool' when trying to compile shaders that contain UAV arrays on 4.0 profiles. Before this commit, tpf.c accesses the hlsl_type->e.resource.rasteriser_ordered field, but on 4.0 and 4.1 profiles these code paths can also be reached by UAV arrays which are HLSL_CLASS_ARRAY and this field is not supposed to be accessed. By coincidence, the value of hlsl_type->e.array.elements_count was being read because these fields have the same offset in the hlsl_type.e union. |
||
---|---|---|
.. | ||
vkd3d | ||
vkd3d-common | ||
vkd3d-shader | ||
vkd3d-utils | ||
.gitignore |