|
@@ -54,9 +54,13 @@ RenderingDeviceVulkan::Buffer *RenderingDeviceVulkan::_get_buffer_from_owner(RID
|
|
|
r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT;
|
|
|
r_access_mask |= VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;
|
|
|
if (buffer->usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) {
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
r_access_mask |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
- r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
+ r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
|
|
|
+ }
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ r_access_mask |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
+ r_stage_mask |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
}
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_COMPUTE)) {
|
|
|
r_access_mask |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
@@ -68,8 +72,11 @@ RenderingDeviceVulkan::Buffer *RenderingDeviceVulkan::_get_buffer_from_owner(RID
|
|
|
r_access_mask |= VK_ACCESS_INDEX_READ_BIT;
|
|
|
buffer = index_buffer_owner.get_or_null(p_buffer);
|
|
|
} else if (uniform_buffer_owner.owns(p_buffer)) {
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
|
|
|
+ }
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ r_stage_mask |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
}
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_COMPUTE)) {
|
|
|
r_stage_mask |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
@@ -77,8 +84,12 @@ RenderingDeviceVulkan::Buffer *RenderingDeviceVulkan::_get_buffer_from_owner(RID
|
|
|
r_access_mask |= VK_ACCESS_UNIFORM_READ_BIT;
|
|
|
buffer = uniform_buffer_owner.get_or_null(p_buffer);
|
|
|
} else if (texture_buffer_owner.owns(p_buffer)) {
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
|
|
|
+ r_access_mask |= VK_ACCESS_SHADER_READ_BIT;
|
|
|
+ }
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ r_stage_mask |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
r_access_mask |= VK_ACCESS_SHADER_READ_BIT;
|
|
|
}
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_COMPUTE)) {
|
|
@@ -89,8 +100,12 @@ RenderingDeviceVulkan::Buffer *RenderingDeviceVulkan::_get_buffer_from_owner(RID
|
|
|
buffer = &texture_buffer_owner.get_or_null(p_buffer)->buffer;
|
|
|
} else if (storage_buffer_owner.owns(p_buffer)) {
|
|
|
buffer = storage_buffer_owner.get_or_null(p_buffer);
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ r_stage_mask |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
|
|
|
+ r_access_mask |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
+ }
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ r_stage_mask |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
r_access_mask |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_COMPUTE)) {
|
|
@@ -2625,8 +2640,12 @@ Error RenderingDeviceVulkan::_texture_update(RID p_texture, uint32_t p_layer, co
|
|
|
barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
|
|
|
+ access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
+ }
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_TRANSFER)) {
|
|
@@ -3020,8 +3039,12 @@ Error RenderingDeviceVulkan::texture_copy(RID p_from_texture, RID p_to_texture,
|
|
|
barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
|
|
|
+ access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
+ }
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_TRANSFER)) {
|
|
@@ -3198,8 +3221,12 @@ Error RenderingDeviceVulkan::texture_resolve_multisample(RID p_from_texture, RID
|
|
|
barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
|
|
|
+ access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
+ }
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_TRANSFER)) {
|
|
@@ -3334,8 +3361,12 @@ Error RenderingDeviceVulkan::texture_clear(RID p_texture, const Color &p_color,
|
|
|
barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
|
|
|
+ access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
+ }
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_TRANSFER)) {
|
|
@@ -7651,10 +7682,14 @@ void RenderingDeviceVulkan::draw_list_end(BitField<BarrierMask> p_post_barrier)
|
|
|
barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- barrier_flags |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT /*| VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT*/;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT /*| VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT*/;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT /*| VK_ACCESS_INDIRECT_COMMAND_READ_BIT*/;
|
|
|
}
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT /*| VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT*/;
|
|
|
+ access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT /*| VK_ACCESS_INDIRECT_COMMAND_READ_BIT*/;
|
|
|
+ }
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_TRANSFER)) {
|
|
|
barrier_flags |= VK_PIPELINE_STAGE_TRANSFER_BIT;
|
|
|
access_flags |= VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_TRANSFER_READ_BIT;
|
|
@@ -8199,10 +8234,14 @@ void RenderingDeviceVulkan::compute_list_end(BitField<BarrierMask> p_post_barrie
|
|
|
barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
- if (p_post_barrier.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- barrier_flags |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
|
|
|
access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
|
|
|
}
|
|
|
+ if (p_post_barrier.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ barrier_flags |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
|
|
|
+ access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
|
|
|
+ }
|
|
|
if (p_post_barrier.has_flag(BARRIER_MASK_TRANSFER)) {
|
|
|
barrier_flags |= VK_PIPELINE_STAGE_TRANSFER_BIT;
|
|
|
access_flags |= VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_TRANSFER_READ_BIT;
|
|
@@ -8227,7 +8266,7 @@ void RenderingDeviceVulkan::barrier(BitField<BarrierMask> p_from, BitField<Barri
|
|
|
src_barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
|
src_access_flags |= VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
- if (p_from.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
+ if (p_from.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
src_barrier_flags |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
|
|
|
src_access_flags |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
|
|
}
|
|
@@ -8247,10 +8286,14 @@ void RenderingDeviceVulkan::barrier(BitField<BarrierMask> p_from, BitField<Barri
|
|
|
dst_barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
|
|
|
dst_access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
|
|
|
}
|
|
|
- if (p_to.has_flag(BARRIER_MASK_RASTER)) {
|
|
|
- dst_barrier_flags |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
|
|
|
+ if (p_to.has_flag(BARRIER_MASK_VERTEX)) {
|
|
|
+ dst_barrier_flags |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
|
|
|
dst_access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
|
|
|
}
|
|
|
+ if (p_to.has_flag(BARRIER_MASK_FRAGMENT)) {
|
|
|
+ dst_barrier_flags |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
|
|
|
+ dst_access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
|
|
|
+ }
|
|
|
if (p_to.has_flag(BARRIER_MASK_TRANSFER)) {
|
|
|
dst_barrier_flags |= VK_PIPELINE_STAGE_TRANSFER_BIT;
|
|
|
dst_access_flags |= VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_TRANSFER_READ_BIT;
|