mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-05 19:08:12 +00:00
gpu: alpha-to-coverage support
This commit is contained in:

committed by
Sam Lantinga

parent
d6d2c958a4
commit
44710a248c
@@ -1767,7 +1767,7 @@ typedef struct SDL_GPUMultisampleState
|
||||
SDL_GPUSampleCount sample_count; /**< The number of samples to be used in rasterization. */
|
||||
Uint32 sample_mask; /**< Reserved for future use. Must be set to 0. */
|
||||
bool enable_mask; /**< Reserved for future use. Must be set to false. */
|
||||
Uint8 padding1;
|
||||
bool enable_alpha_to_coverage; /**< true enables the alpha-to-coverage feature. */
|
||||
Uint8 padding2;
|
||||
Uint8 padding3;
|
||||
} SDL_GPUMultisampleState;
|
||||
|
@@ -827,6 +827,12 @@ SDL_GPUGraphicsPipeline *SDL_CreateGPUGraphicsPipeline(
|
||||
SDL_assert_release(!"Format is not supported for color targets on this device!");
|
||||
return NULL;
|
||||
}
|
||||
if (graphicsPipelineCreateInfo->multisample_state.enable_alpha_to_coverage &&
|
||||
(IsIntegerFormat(graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].format)
|
||||
|| IsCompressedFormat(graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].format))) {
|
||||
SDL_assert_release(!"Format is not compatible with alpha-to-coverage!");
|
||||
return NULL;
|
||||
}
|
||||
if (graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].blend_state.enable_blend) {
|
||||
const SDL_GPUColorTargetBlendState *blend_state = &graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].blend_state;
|
||||
CHECK_BLENDFACTOR_ENUM_INVALID(blend_state->src_color_blendfactor, NULL)
|
||||
|
@@ -373,6 +373,71 @@ static inline bool IsIntegerFormat(
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool IsCompressedFormat(
|
||||
SDL_GPUTextureFormat format)
|
||||
{
|
||||
switch (format) {
|
||||
case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC4_R_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC5_RG_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_UFLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT:
|
||||
case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static inline Uint32 IndexSize(SDL_GPUIndexElementSize size)
|
||||
{
|
||||
return (size == SDL_GPU_INDEXELEMENTSIZE_16BIT) ? 2 : 4;
|
||||
|
@@ -2819,7 +2819,7 @@ static bool D3D12_INTERNAL_ConvertBlendState(
|
||||
}
|
||||
|
||||
SDL_zerop(blendDesc);
|
||||
blendDesc->AlphaToCoverageEnable = FALSE;
|
||||
blendDesc->AlphaToCoverageEnable = pipelineInfo->multisample_state.enable_alpha_to_coverage;
|
||||
blendDesc->IndependentBlendEnable = FALSE;
|
||||
|
||||
for (UINT i = 0; i < MAX_COLOR_TARGET_BINDINGS; i += 1) {
|
||||
|
@@ -1135,6 +1135,7 @@ static SDL_GPUGraphicsPipeline *METAL_CreateGraphicsPipeline(
|
||||
// Multisample
|
||||
|
||||
pipelineDescriptor.rasterSampleCount = SDLToMetal_SampleCount[createinfo->multisample_state.sample_count];
|
||||
pipelineDescriptor.alphaToCoverageEnabled = createinfo->multisample_state.enable_alpha_to_coverage;
|
||||
|
||||
// Depth Stencil
|
||||
|
||||
|
@@ -6355,7 +6355,7 @@ static SDL_GPUGraphicsPipeline *VULKAN_CreateGraphicsPipeline(
|
||||
multisampleStateCreateInfo.sampleShadingEnable = VK_FALSE;
|
||||
multisampleStateCreateInfo.minSampleShading = 1.0f;
|
||||
multisampleStateCreateInfo.pSampleMask = &sampleMask;
|
||||
multisampleStateCreateInfo.alphaToCoverageEnable = VK_FALSE;
|
||||
multisampleStateCreateInfo.alphaToCoverageEnable = createinfo->multisample_state.enable_alpha_to_coverage;
|
||||
multisampleStateCreateInfo.alphaToOneEnable = VK_FALSE;
|
||||
|
||||
// Depth Stencil State
|
||||
|
Reference in New Issue
Block a user