Change the batch if the color scale changes

The color scale is a shader constant so it can be applied in linear space
This commit is contained in:
Sam Lantinga
2025-11-09 15:01:37 -08:00
parent d29f368ca8
commit 4e5ba722fd
5 changed files with 28 additions and 8 deletions

View File

@@ -4096,6 +4096,7 @@ static bool VULKAN_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cm
// let's group non joined lines
SDL_RenderCommand *finalcmd = cmd;
SDL_RenderCommand *nextcmd;
float thiscolorscale = cmd->data.draw.color_scale;
SDL_BlendMode thisblend = cmd->data.draw.blend;
for (nextcmd = cmd->next; nextcmd; nextcmd = nextcmd->next) {
@@ -4108,7 +4109,8 @@ static bool VULKAN_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cm
break; // can't go any further on this draw call, different render command up next.
} else if (nextcmd->data.draw.count != 2) {
break; // can't go any further on this draw call, those are joined lines
} else if (nextcmd->data.draw.blend != thisblend) {
} else if (nextcmd->data.draw.blend != thisblend ||
nextcmd->data.draw.color_scale != thiscolorscale) {
break; // can't go any further on this draw call, different blendmode copy up next.
} else {
finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command.
@@ -4149,6 +4151,7 @@ static bool VULKAN_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cm
{
/* as long as we have the same copy command in a row, with the
same texture, we can combine them all into a single draw call. */
float thiscolorscale = cmd->data.draw.color_scale;
SDL_Texture *thistexture = cmd->data.draw.texture;
SDL_BlendMode thisblend = cmd->data.draw.blend;
SDL_ScaleMode thisscalemode = cmd->data.draw.texture_scale_mode;
@@ -4172,7 +4175,8 @@ static bool VULKAN_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cm
nextcmd->data.draw.texture_scale_mode != thisscalemode ||
nextcmd->data.draw.texture_address_mode_u != thisaddressmode_u ||
nextcmd->data.draw.texture_address_mode_v != thisaddressmode_v ||
nextcmd->data.draw.blend != thisblend) {
nextcmd->data.draw.blend != thisblend ||
nextcmd->data.draw.color_scale != thiscolorscale) {
break; // can't go any further on this draw call, different texture/blendmode copy up next.
} else {
finalcmd = nextcmd; // we can combine copy operations here. Mark this one as the furthest okay command.