mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-06 03:18:13 +00:00
vulkan: Avoid redundant commands for dynamic states
This commit is contained in:
@@ -7440,6 +7440,7 @@ static void VULKAN_INTERNAL_SetCurrentViewport(
|
|||||||
const SDL_GPUViewport *viewport)
|
const SDL_GPUViewport *viewport)
|
||||||
{
|
{
|
||||||
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
||||||
|
VulkanRenderer *renderer = (VulkanRenderer *)vulkanCommandBuffer->renderer;
|
||||||
|
|
||||||
vulkanCommandBuffer->currentViewport.x = viewport->x;
|
vulkanCommandBuffer->currentViewport.x = viewport->x;
|
||||||
vulkanCommandBuffer->currentViewport.width = viewport->w;
|
vulkanCommandBuffer->currentViewport.width = viewport->w;
|
||||||
@@ -7450,18 +7451,6 @@ static void VULKAN_INTERNAL_SetCurrentViewport(
|
|||||||
// FIXME: need moltenVK hack
|
// FIXME: need moltenVK hack
|
||||||
vulkanCommandBuffer->currentViewport.y = viewport->y + viewport->h;
|
vulkanCommandBuffer->currentViewport.y = viewport->y + viewport->h;
|
||||||
vulkanCommandBuffer->currentViewport.height = -viewport->h;
|
vulkanCommandBuffer->currentViewport.height = -viewport->h;
|
||||||
}
|
|
||||||
|
|
||||||
static void VULKAN_SetViewport(
|
|
||||||
SDL_GPUCommandBuffer *commandBuffer,
|
|
||||||
const SDL_GPUViewport *viewport)
|
|
||||||
{
|
|
||||||
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
|
||||||
VulkanRenderer *renderer = (VulkanRenderer *)vulkanCommandBuffer->renderer;
|
|
||||||
|
|
||||||
VULKAN_INTERNAL_SetCurrentViewport(
|
|
||||||
vulkanCommandBuffer,
|
|
||||||
viewport);
|
|
||||||
|
|
||||||
renderer->vkCmdSetViewport(
|
renderer->vkCmdSetViewport(
|
||||||
vulkanCommandBuffer->commandBuffer,
|
vulkanCommandBuffer->commandBuffer,
|
||||||
@@ -7470,26 +7459,27 @@ static void VULKAN_SetViewport(
|
|||||||
&vulkanCommandBuffer->currentViewport);
|
&vulkanCommandBuffer->currentViewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void VULKAN_SetViewport(
|
||||||
|
SDL_GPUCommandBuffer *commandBuffer,
|
||||||
|
const SDL_GPUViewport *viewport)
|
||||||
|
{
|
||||||
|
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
||||||
|
|
||||||
|
VULKAN_INTERNAL_SetCurrentViewport(
|
||||||
|
vulkanCommandBuffer,
|
||||||
|
viewport);
|
||||||
|
}
|
||||||
|
|
||||||
static void VULKAN_INTERNAL_SetCurrentScissor(
|
static void VULKAN_INTERNAL_SetCurrentScissor(
|
||||||
VulkanCommandBuffer *vulkanCommandBuffer,
|
VulkanCommandBuffer *vulkanCommandBuffer,
|
||||||
const SDL_Rect *scissor)
|
const SDL_Rect *scissor)
|
||||||
{
|
{
|
||||||
|
VulkanRenderer *renderer = (VulkanRenderer *)vulkanCommandBuffer->renderer;
|
||||||
|
|
||||||
vulkanCommandBuffer->currentScissor.offset.x = scissor->x;
|
vulkanCommandBuffer->currentScissor.offset.x = scissor->x;
|
||||||
vulkanCommandBuffer->currentScissor.offset.y = scissor->y;
|
vulkanCommandBuffer->currentScissor.offset.y = scissor->y;
|
||||||
vulkanCommandBuffer->currentScissor.extent.width = scissor->w;
|
vulkanCommandBuffer->currentScissor.extent.width = scissor->w;
|
||||||
vulkanCommandBuffer->currentScissor.extent.height = scissor->h;
|
vulkanCommandBuffer->currentScissor.extent.height = scissor->h;
|
||||||
}
|
|
||||||
|
|
||||||
static void VULKAN_SetScissor(
|
|
||||||
SDL_GPUCommandBuffer *commandBuffer,
|
|
||||||
const SDL_Rect *scissor)
|
|
||||||
{
|
|
||||||
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
|
||||||
VulkanRenderer *renderer = (VulkanRenderer *)vulkanCommandBuffer->renderer;
|
|
||||||
|
|
||||||
VULKAN_INTERNAL_SetCurrentScissor(
|
|
||||||
vulkanCommandBuffer,
|
|
||||||
scissor);
|
|
||||||
|
|
||||||
renderer->vkCmdSetScissor(
|
renderer->vkCmdSetScissor(
|
||||||
vulkanCommandBuffer->commandBuffer,
|
vulkanCommandBuffer->commandBuffer,
|
||||||
@@ -7498,14 +7488,31 @@ static void VULKAN_SetScissor(
|
|||||||
&vulkanCommandBuffer->currentScissor);
|
&vulkanCommandBuffer->currentScissor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void VULKAN_SetScissor(
|
||||||
|
SDL_GPUCommandBuffer *commandBuffer,
|
||||||
|
const SDL_Rect *scissor)
|
||||||
|
{
|
||||||
|
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
||||||
|
|
||||||
|
VULKAN_INTERNAL_SetCurrentScissor(
|
||||||
|
vulkanCommandBuffer,
|
||||||
|
scissor);
|
||||||
|
}
|
||||||
|
|
||||||
static void VULKAN_INTERNAL_SetCurrentBlendConstants(
|
static void VULKAN_INTERNAL_SetCurrentBlendConstants(
|
||||||
VulkanCommandBuffer *vulkanCommandBuffer,
|
VulkanCommandBuffer *vulkanCommandBuffer,
|
||||||
SDL_FColor blendConstants)
|
SDL_FColor blendConstants)
|
||||||
{
|
{
|
||||||
|
VulkanRenderer *renderer = (VulkanRenderer *)vulkanCommandBuffer->renderer;
|
||||||
|
|
||||||
vulkanCommandBuffer->blendConstants[0] = blendConstants.r;
|
vulkanCommandBuffer->blendConstants[0] = blendConstants.r;
|
||||||
vulkanCommandBuffer->blendConstants[1] = blendConstants.g;
|
vulkanCommandBuffer->blendConstants[1] = blendConstants.g;
|
||||||
vulkanCommandBuffer->blendConstants[2] = blendConstants.b;
|
vulkanCommandBuffer->blendConstants[2] = blendConstants.b;
|
||||||
vulkanCommandBuffer->blendConstants[3] = blendConstants.a;
|
vulkanCommandBuffer->blendConstants[3] = blendConstants.a;
|
||||||
|
|
||||||
|
renderer->vkCmdSetBlendConstants(
|
||||||
|
vulkanCommandBuffer->commandBuffer,
|
||||||
|
vulkanCommandBuffer->blendConstants);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_SetBlendConstants(
|
static void VULKAN_SetBlendConstants(
|
||||||
@@ -7513,22 +7520,24 @@ static void VULKAN_SetBlendConstants(
|
|||||||
SDL_FColor blendConstants)
|
SDL_FColor blendConstants)
|
||||||
{
|
{
|
||||||
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
||||||
VulkanRenderer *renderer = (VulkanRenderer *)vulkanCommandBuffer->renderer;
|
|
||||||
|
|
||||||
VULKAN_INTERNAL_SetCurrentBlendConstants(
|
VULKAN_INTERNAL_SetCurrentBlendConstants(
|
||||||
vulkanCommandBuffer,
|
vulkanCommandBuffer,
|
||||||
blendConstants);
|
blendConstants);
|
||||||
|
|
||||||
renderer->vkCmdSetBlendConstants(
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
vulkanCommandBuffer->blendConstants);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_INTERNAL_SetCurrentStencilReference(
|
static void VULKAN_INTERNAL_SetCurrentStencilReference(
|
||||||
VulkanCommandBuffer *vulkanCommandBuffer,
|
VulkanCommandBuffer *vulkanCommandBuffer,
|
||||||
Uint8 reference)
|
Uint8 reference)
|
||||||
{
|
{
|
||||||
|
VulkanRenderer *renderer = (VulkanRenderer *)vulkanCommandBuffer->renderer;
|
||||||
|
|
||||||
vulkanCommandBuffer->stencilRef = reference;
|
vulkanCommandBuffer->stencilRef = reference;
|
||||||
|
|
||||||
|
renderer->vkCmdSetStencilReference(
|
||||||
|
vulkanCommandBuffer->commandBuffer,
|
||||||
|
VK_STENCIL_FACE_FRONT_AND_BACK,
|
||||||
|
vulkanCommandBuffer->stencilRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_SetStencilReference(
|
static void VULKAN_SetStencilReference(
|
||||||
@@ -7536,16 +7545,10 @@ static void VULKAN_SetStencilReference(
|
|||||||
Uint8 reference)
|
Uint8 reference)
|
||||||
{
|
{
|
||||||
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer *)commandBuffer;
|
||||||
VulkanRenderer *renderer = (VulkanRenderer *)vulkanCommandBuffer->renderer;
|
|
||||||
|
|
||||||
VULKAN_INTERNAL_SetCurrentStencilReference(
|
VULKAN_INTERNAL_SetCurrentStencilReference(
|
||||||
vulkanCommandBuffer,
|
vulkanCommandBuffer,
|
||||||
reference);
|
reference);
|
||||||
|
|
||||||
renderer->vkCmdSetStencilReference(
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
VK_STENCIL_FACE_FRONT_AND_BACK,
|
|
||||||
reference);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_BindVertexSamplers(
|
static void VULKAN_BindVertexSamplers(
|
||||||
@@ -8058,27 +8061,6 @@ static void VULKAN_BindGraphicsPipeline(
|
|||||||
|
|
||||||
VULKAN_INTERNAL_TrackGraphicsPipeline(vulkanCommandBuffer, pipeline);
|
VULKAN_INTERNAL_TrackGraphicsPipeline(vulkanCommandBuffer, pipeline);
|
||||||
|
|
||||||
renderer->vkCmdSetViewport(
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
&vulkanCommandBuffer->currentViewport);
|
|
||||||
|
|
||||||
renderer->vkCmdSetScissor(
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
&vulkanCommandBuffer->currentScissor);
|
|
||||||
|
|
||||||
renderer->vkCmdSetBlendConstants(
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
vulkanCommandBuffer->blendConstants);
|
|
||||||
|
|
||||||
renderer->vkCmdSetStencilReference(
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
VK_STENCIL_FACE_FRONT_AND_BACK,
|
|
||||||
vulkanCommandBuffer->stencilRef);
|
|
||||||
|
|
||||||
// Acquire uniform buffers if necessary
|
// Acquire uniform buffers if necessary
|
||||||
for (Uint32 i = 0; i < pipeline->resourceLayout.vertexUniformBufferCount; i += 1) {
|
for (Uint32 i = 0; i < pipeline->resourceLayout.vertexUniformBufferCount; i += 1) {
|
||||||
if (vulkanCommandBuffer->vertexUniformBuffers[i] == NULL) {
|
if (vulkanCommandBuffer->vertexUniformBuffers[i] == NULL) {
|
||||||
|
Reference in New Issue
Block a user