mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-02 11:00:27 +01:00
mesa: Add _mesa_uniform_{attach,detach_all}_driver_storage functions
These functions are used to create and destroy the connections between a uniform and the storage used by the driver to hold its value. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Tested-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
parent
9516182e80
commit
70650d08fa
3 changed files with 59 additions and 0 deletions
|
|
@ -25,6 +25,7 @@
|
|||
#include "main/core.h"
|
||||
#include "main/context.h"
|
||||
#include "ir.h"
|
||||
#include "ir_uniform.h"
|
||||
#include "../glsl/program.h"
|
||||
#include "../glsl/ir_uniform.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,53 @@ _mesa_update_shader_textures_used(struct gl_program *prog)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect a piece of driver storage with a part of a uniform
|
||||
*
|
||||
* \param uni The uniform with which the storage will be associated
|
||||
* \param element_stride Byte-stride between array elements.
|
||||
* \sa gl_uniform_driver_storage::element_stride.
|
||||
* \param vector_stride Byte-stride between vectors (in a matrix).
|
||||
* \sa gl_uniform_driver_storage::vector_stride.
|
||||
* \param format Conversion from native format to driver format
|
||||
* required by the driver.
|
||||
* \param data Location to dump the data.
|
||||
*/
|
||||
void
|
||||
_mesa_uniform_attach_driver_storage(struct gl_uniform_storage *uni,
|
||||
unsigned element_stride,
|
||||
unsigned vector_stride,
|
||||
enum gl_uniform_driver_format format,
|
||||
void *data)
|
||||
{
|
||||
uni->driver_storage = (struct gl_uniform_driver_storage*)
|
||||
realloc(uni->driver_storage,
|
||||
sizeof(struct gl_uniform_driver_storage)
|
||||
* (uni->num_driver_storage + 1));
|
||||
|
||||
uni->driver_storage[uni->num_driver_storage].element_stride = element_stride;
|
||||
uni->driver_storage[uni->num_driver_storage].vector_stride = vector_stride;
|
||||
uni->driver_storage[uni->num_driver_storage].format = (uint8_t) format;
|
||||
uni->driver_storage[uni->num_driver_storage].data = data;
|
||||
|
||||
uni->num_driver_storage++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sever all connections with all pieces of driver storage for all uniforms
|
||||
*
|
||||
* \warning
|
||||
* This function does \b not release any of the \c data pointers
|
||||
* previously passed in to \c _mesa_uniform_attach_driver_stoarge.
|
||||
*/
|
||||
void
|
||||
_mesa_uniform_detach_all_driver_storage(struct gl_uniform_storage *uni)
|
||||
{
|
||||
free(uni->driver_storage);
|
||||
uni->driver_storage = NULL;
|
||||
uni->num_driver_storage = 0;
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_Uniform1fARB(GLint location, GLfloat v0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "glheader.h"
|
||||
#include "program/prog_parameter.h"
|
||||
#include "../glsl/ir_uniform.h"
|
||||
|
||||
struct gl_program;
|
||||
struct _glapi_table;
|
||||
|
|
@ -188,6 +189,16 @@ void
|
|||
_mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location,
|
||||
GLsizei bufSize, GLenum returnType, GLvoid *paramsOut);
|
||||
|
||||
extern void
|
||||
_mesa_uniform_attach_driver_storage(struct gl_uniform_storage *,
|
||||
unsigned element_stride,
|
||||
unsigned vector_stride,
|
||||
enum gl_uniform_driver_format format,
|
||||
void *data);
|
||||
|
||||
extern void
|
||||
_mesa_uniform_detach_all_driver_storage(struct gl_uniform_storage *uni);
|
||||
|
||||
extern void
|
||||
_mesa_propagate_uniforms_to_driver_storage(struct gl_uniform_storage *uni,
|
||||
unsigned array_index,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue