On Tue, 17 Aug 2021 at 16:02, Jan Sikorski jsikorski@codeweavers.com wrote:
@@ -1746,7 +1746,10 @@ static int wined3d_pipeline_layout_vk_compare(const void *key, const struct wine
if (a->binding_count != b->binding_count) return a->binding_count - b->binding_count;
- return memcmp(a->bindings, b->bindings, a->binding_count * sizeof(*a->bindings));
- if (a->push_constant_count != b->push_constant_count)
return a->push_constant_count - b->push_constant_count;
- return memcmp(a->bindings, b->bindings, a->binding_count * sizeof(*a->bindings)) ||
memcmp(a->push_constants, b->push_constants, a->push_constant_count * sizeof(*a->push_constants));
}
That doesn't do the right thing, the compare needs to be ordered.
memcpy(layout->key.bindings, key.bindings, sizeof(*layout->key.bindings) * key.binding_count); layout->key.binding_count = key.binding_count;
- layout->key.push_constants = (VkPushConstantRange *)(layout->key.bindings + key.binding_count);
By convention, we'd write that as "layout->key.push_constants = (VkPushConstantRange *)&layout->key.bindings[key.binding_count];"
Do we need push constants in the pipeline layout cache? I imagine we'd only use these for internal shaders, but we wouldn't need to go through the pipeline layout cache for those.