|
|
@@ -3157,9 +3157,24 @@ static bool VULKAN_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
|
|
|
|
|
|
VULKAN_EnsureCommandBuffer(rendererData);
|
|
|
|
|
|
- if (!texture) {
|
|
|
- if (rendererData->textureRenderTarget) {
|
|
|
+ if (texture) {
|
|
|
+ textureData = (VULKAN_TextureData *)texture->internal;
|
|
|
+
|
|
|
+ if (textureData->mainImage.imageView == VK_NULL_HANDLE) {
|
|
|
+ return SDL_SetError("specified texture is not a render target");
|
|
|
+ }
|
|
|
|
|
|
+ rendererData->textureRenderTarget = textureData;
|
|
|
+ VULKAN_RecordPipelineImageBarrier(rendererData,
|
|
|
+ VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
|
|
+ VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
|
|
+ VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
|
|
+ VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
|
|
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
|
|
+ rendererData->textureRenderTarget->mainImage.image,
|
|
|
+ &rendererData->textureRenderTarget->mainImage.imageLayout);
|
|
|
+ } else {
|
|
|
+ if (rendererData->textureRenderTarget) {
|
|
|
VULKAN_RecordPipelineImageBarrier(rendererData,
|
|
|
VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
|
|
VK_ACCESS_SHADER_READ_BIT,
|
|
|
@@ -3170,24 +3185,9 @@ static bool VULKAN_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
|
|
|
&rendererData->textureRenderTarget->mainImage.imageLayout);
|
|
|
}
|
|
|
rendererData->textureRenderTarget = NULL;
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
- textureData = (VULKAN_TextureData *)texture->internal;
|
|
|
-
|
|
|
- if (textureData->mainImage.imageView == VK_NULL_HANDLE) {
|
|
|
- return SDL_SetError("specified texture is not a render target");
|
|
|
- }
|
|
|
-
|
|
|
- rendererData->textureRenderTarget = textureData;
|
|
|
- VULKAN_RecordPipelineImageBarrier(rendererData,
|
|
|
- VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
|
|
- VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
|
|
- VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
|
|
- VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
|
|
- VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
|
|
- rendererData->textureRenderTarget->mainImage.image,
|
|
|
- &rendererData->textureRenderTarget->mainImage.imageLayout);
|
|
|
+ VULKAN_IssueBatch(rendererData);
|
|
|
|
|
|
return true;
|
|
|
}
|