mesa/main: prefer R8-textures instead of A8 for glBitmap in display lists

This allows drivers to communicate that they prefer R8 textures rather
than A8 for glBitmap usage.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Erik Faye-Lund 2019-07-15 12:03:43 +02:00
parent f92226931b
commit bbdbb02a5f
3 changed files with 16 additions and 3 deletions

View file

@ -941,9 +941,14 @@ build_bitmap_atlas(struct gl_context *ctx, struct gl_bitmap_atlas *atlas,
goto out_of_memory;
}
_mesa_init_teximage_fields(ctx, atlas->texImage,
atlas->texWidth, atlas->texHeight, 1, 0,
GL_ALPHA, MESA_FORMAT_A_UNORM8);
if (ctx->Const.BitmapUsesRed)
_mesa_init_teximage_fields(ctx, atlas->texImage,
atlas->texWidth, atlas->texHeight, 1, 0,
GL_RED, MESA_FORMAT_R_UNORM8);
else
_mesa_init_teximage_fields(ctx, atlas->texImage,
atlas->texWidth, atlas->texHeight, 1, 0,
GL_ALPHA, MESA_FORMAT_A_UNORM8);
/* alloc image storage */
if (!ctx->Driver.AllocTextureImageBuffer(ctx, atlas->texImage)) {

View file

@ -4130,6 +4130,9 @@ struct gl_constants
/** Is the drivers uniform storage packed or padded to 16 bytes. */
bool PackedDriverUniformStorage;
/** Wether or not glBitmap uses red textures rather than alpha */
bool BitmapUsesRed;
/** GL_ARB_gl_spirv */
struct spirv_supported_capabilities SpirVCapabilities;

View file

@ -621,6 +621,11 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
ctx->Const.PackedDriverUniformStorage =
screen->get_param(screen, PIPE_CAP_PACKED_UNIFORMS);
ctx->Const.BitmapUsesRed =
screen->is_format_supported(screen, PIPE_FORMAT_R8_UNORM,
PIPE_TEXTURE_2D, 0, 0,
PIPE_BIND_SAMPLER_VIEW);
st->has_stencil_export =
screen->get_param(screen, PIPE_CAP_SHADER_STENCIL_EXPORT);
st->has_etc1 = screen->is_format_supported(screen, PIPE_FORMAT_ETC1_RGB8,