mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
mesa: compute _PipeFormat and _ElementSize after checking if the format changed
Split _mesa_set_vertex_format into 2 functions and set the derived fields after we know that the format is different. This skips _PipeFormat and _ElementSize recomputation every time we get gl*Pointer with the same format. Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20287>
This commit is contained in:
parent
6a8c1d5043
commit
8e89f07fc8
1 changed files with 39 additions and 17 deletions
|
|
@ -644,19 +644,27 @@ vertex_format_to_pipe_format(GLubyte size, GLenum16 type, GLenum16 format,
|
|||
return pipe_format;
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_set_vertex_format(struct gl_vertex_format *vertex_format,
|
||||
GLubyte size, GLenum16 type, GLenum16 format,
|
||||
GLboolean normalized, GLboolean integer,
|
||||
GLboolean doubles)
|
||||
static void
|
||||
set_vertex_format_user(union gl_vertex_format_user *vertex_format,
|
||||
GLubyte size, GLenum16 type, GLenum16 format,
|
||||
GLboolean normalized, GLboolean integer,
|
||||
GLboolean doubles)
|
||||
{
|
||||
assert(size <= 4);
|
||||
vertex_format->User.Type = type;
|
||||
vertex_format->User.Bgra = format == GL_BGRA;
|
||||
vertex_format->User.Size = size;
|
||||
vertex_format->User.Normalized = normalized;
|
||||
vertex_format->User.Integer = integer;
|
||||
vertex_format->User.Doubles = doubles;
|
||||
vertex_format->Type = type;
|
||||
vertex_format->Bgra = format == GL_BGRA;
|
||||
vertex_format->Size = size;
|
||||
vertex_format->Normalized = normalized;
|
||||
vertex_format->Integer = integer;
|
||||
vertex_format->Doubles = doubles;
|
||||
}
|
||||
|
||||
static void
|
||||
recompute_vertex_format_fields(struct gl_vertex_format *vertex_format,
|
||||
GLubyte size, GLenum16 type, GLenum16 format,
|
||||
GLboolean normalized, GLboolean integer,
|
||||
GLboolean doubles)
|
||||
{
|
||||
vertex_format->_ElementSize = _mesa_bytes_per_vertex_attrib(size, type);
|
||||
assert(vertex_format->_ElementSize <= 4*sizeof(double));
|
||||
vertex_format->_PipeFormat =
|
||||
|
|
@ -666,6 +674,18 @@ _mesa_set_vertex_format(struct gl_vertex_format *vertex_format,
|
|||
assert(vertex_format->_PipeFormat <= 255);
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_set_vertex_format(struct gl_vertex_format *vertex_format,
|
||||
GLubyte size, GLenum16 type, GLenum16 format,
|
||||
GLboolean normalized, GLboolean integer,
|
||||
GLboolean doubles)
|
||||
{
|
||||
set_vertex_format_user(&vertex_format->User, size, type, format,
|
||||
normalized, integer, doubles);
|
||||
recompute_vertex_format_fields(vertex_format, size, type, format,
|
||||
normalized, integer, doubles);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Examine the API profile and extensions to determine which types are legal
|
||||
|
|
@ -754,20 +774,22 @@ _mesa_update_array_format(struct gl_context *ctx,
|
|||
GLuint relativeOffset)
|
||||
{
|
||||
struct gl_array_attributes *const array = &vao->VertexAttrib[attrib];
|
||||
struct gl_vertex_format new_format;
|
||||
union gl_vertex_format_user new_format;
|
||||
|
||||
assert(!vao->SharedAndImmutable);
|
||||
assert(size <= 4);
|
||||
|
||||
_mesa_set_vertex_format(&new_format, size, type, format,
|
||||
normalized, integer, doubles);
|
||||
set_vertex_format_user(&new_format, size, type, format,
|
||||
normalized, integer, doubles);
|
||||
|
||||
if ((array->RelativeOffset == relativeOffset) &&
|
||||
!memcmp(&new_format, &array->Format, sizeof(new_format)))
|
||||
if (array->RelativeOffset == relativeOffset &&
|
||||
array->Format.User.All == new_format.All)
|
||||
return;
|
||||
|
||||
array->RelativeOffset = relativeOffset;
|
||||
array->Format = new_format;
|
||||
array->Format.User = new_format;
|
||||
recompute_vertex_format_fields(&array->Format, size, type, format,
|
||||
normalized, integer, doubles);
|
||||
|
||||
if (vao->Enabled & VERT_BIT(attrib)) {
|
||||
ctx->NewDriverState |= ST_NEW_VERTEX_ARRAYS;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue