radv: copy the number of viewports/scissors at pipeline bind time
The number of viewports/scissors can only be specified at pipeline creation time, so make sure to copy them when binding a new one because the dynamic state is cleared in BeginCommandBuffer(). Fixes:dcf46e995d
("radv: do not update the number of scissors in vkCmdSetScissor()") Fixes:60878dd00c
("radv: do not update the number of viewports in vkCmdSetViewport()") Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
3a1b7efce8
commit
8e9e339c53
|
@ -83,14 +83,18 @@ radv_dynamic_state_copy(struct radv_dynamic_state *dest,
|
||||||
const struct radv_dynamic_state *src,
|
const struct radv_dynamic_state *src,
|
||||||
uint32_t copy_mask)
|
uint32_t copy_mask)
|
||||||
{
|
{
|
||||||
|
/* Make sure to copy the number of viewports/scissors because they can
|
||||||
|
* only be specified at pipeline creation time.
|
||||||
|
*/
|
||||||
|
dest->viewport.count = src->viewport.count;
|
||||||
|
dest->scissor.count = src->scissor.count;
|
||||||
|
|
||||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_VIEWPORT)) {
|
if (copy_mask & (1 << VK_DYNAMIC_STATE_VIEWPORT)) {
|
||||||
dest->viewport.count = src->viewport.count;
|
|
||||||
typed_memcpy(dest->viewport.viewports, src->viewport.viewports,
|
typed_memcpy(dest->viewport.viewports, src->viewport.viewports,
|
||||||
src->viewport.count);
|
src->viewport.count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_SCISSOR)) {
|
if (copy_mask & (1 << VK_DYNAMIC_STATE_SCISSOR)) {
|
||||||
dest->scissor.count = src->scissor.count;
|
|
||||||
typed_memcpy(dest->scissor.scissors, src->scissor.scissors,
|
typed_memcpy(dest->scissor.scissors, src->scissor.scissors,
|
||||||
src->scissor.count);
|
src->scissor.count);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue