Tenho duas filas, Fila A e Fila B, de famílias de filas diferentes. A fila A atualmente possui a propriedade de uma imagem no modo de compartilhamento exclusivo. Quero liberar a propriedade da imagem para a Fila B antecipadamente, pois sei que será a próxima a utilizá-la. No entanto, não sei em que layout a Fila B precisará que a imagem esteja.
O problema é que tanto a barreira de liberação (na Fila A) quanto a barreira de aquisição (na Fila B) precisam especificar os layouts das imagens de origem e destino. Como posso liberar a imagem para a Fila B sem conhecer previamente o layout?
Eu acho que a melhor abordagem seria usar duas barreiras de memória de imagem ao gravar na Fila B: a primeira para adquirir a imagem da Fila A (sem alterar o layout) e a segunda para realizar a transição de layout. O problema é que não sei como criar uma dependência para garantir que a transição do layout ocorra após a aquisição da imagem. Existe uma maneira de criar essa dependência entre as duas barreiras de memória de imagem sequencial?
Ou a fila A precisa saber qual layout a fila B deseja, ou a fila B precisa saber em qual layout a fila A está deixando a imagem. Ou seja, uma das filas precisa saber qual layout a outra está usando; ambos não podem ser ignorantes um do outro.
Quando você faz um par liberação/aquisição, a máscara de acesso de destino da liberação é ignorada e a máscara de acesso de origem do destino é ignorada. Essencialmente, a máscara de acesso de origem do par é a máscara de acesso de origem da liberação, e a máscara de acesso de destino do par é a máscara de acesso de destino da aquisição.
Dessa forma, se você deseja que a fila B faça uma transição de layout após a aquisição, essa barreira precisa ser sincronizada adequadamente com o escopo de destino e a máscara de acesso da barreira de aquisição.