radv: Detect if all immutable samplers for a binding are equal.
We can then use constants for indexed loads. Signed-off-by: Bas Nieuwenhuizen <basni@google.com> Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -132,10 +132,15 @@ VkResult radv_CreateDescriptorSetLayout(
|
||||
|
||||
if (binding->pImmutableSamplers) {
|
||||
set_layout->binding[b].immutable_samplers = samplers;
|
||||
set_layout->binding[b].immutable_samplers_equal = true;
|
||||
samplers += 4 * binding->descriptorCount;
|
||||
|
||||
for (uint32_t i = 0; i < binding->descriptorCount; i++)
|
||||
memcpy(set_layout->binding[b].immutable_samplers + 4 * i, &radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16);
|
||||
for (uint32_t i = 1; i < binding->descriptorCount; i++)
|
||||
if (memcmp(set_layout->binding[b].immutable_samplers + 4 * i,
|
||||
set_layout->binding[b].immutable_samplers, 16) != 0)
|
||||
set_layout->binding[b].immutable_samplers_equal = false;
|
||||
} else {
|
||||
set_layout->binding[b].immutable_samplers = NULL;
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ struct radv_descriptor_set_binding_layout {
|
||||
|
||||
/* Immutable samplers (or NULL if no immutable samplers) */
|
||||
uint32_t *immutable_samplers;
|
||||
bool immutable_samplers_equal;
|
||||
};
|
||||
|
||||
struct radv_descriptor_set_layout {
|
||||
|
||||
Reference in New Issue
Block a user