mesa/glspirv: Add struct gl_spirv_module

v2: * Make the SPIR-V module struct part of a larger gl_shader_spirv_data
    struct that will be introduced later, and don't reference it directly
    in gl_shader. (Eduardo Lima)
    * Readability improvements (Ian Romanick)

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Nicolai Hähnle 2017-06-10 20:14:44 +02:00 committed by Eduardo Lima Mitev
parent 46b21b8f90
commit 74f98ab76f
2 changed files with 33 additions and 0 deletions

View file

@ -25,6 +25,23 @@
#include "errors.h"
#include "util/u_atomic.h"
void
_mesa_spirv_module_reference(struct gl_spirv_module **dest,
struct gl_spirv_module *src)
{
struct gl_spirv_module *old = *dest;
if (old && p_atomic_dec_zero(&old->RefCount))
free(old);
*dest = src;
if (src)
p_atomic_inc(&src->RefCount);
}
void GLAPIENTRY
_mesa_SpecializeShaderARB(GLuint shader,
const GLchar *pEntryPoint,

View file

@ -30,6 +30,22 @@
extern "C" {
#endif
/**
* A SPIR-V module contains the raw SPIR-V binary as set by ShaderBinary.
*
* It is reference-counted, because the same module can be attached to multiple
* shader objects simultaneously.
*/
struct gl_spirv_module {
unsigned RefCount;
GLint Length;
char Binary[0];
};
void
_mesa_spirv_module_reference(struct gl_spirv_module **dest,
struct gl_spirv_module *src);
/**
* \name API functions
*/