mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-13 02:40:28 +01:00
mesa: add EXT_shader_image_load_store glBindImageTextureEXT function
The implementation is almost identical to glBindImageTexture except for error checking. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
71e619a825
commit
5db28b0cf7
5 changed files with 48 additions and 11 deletions
|
|
@ -61,7 +61,6 @@
|
|||
<enum name="MAX_IMAGE_SAMPLES_EXT" value="0x906D"/>
|
||||
<enum name="IMAGE_BINDING_FORMAT_EXT" value="0x906E"/>
|
||||
|
||||
<!--
|
||||
<function name="BindImageTextureEXT">
|
||||
<param name="index" type="GLuint"/>
|
||||
<param name="texture" type="GLuint"/>
|
||||
|
|
@ -71,7 +70,6 @@
|
|||
<param name="access" type="GLenum"/>
|
||||
<param name="format" type="GLint"/>
|
||||
</function>
|
||||
-->
|
||||
|
||||
<function name="MemoryBarrierEXT" alias="MemoryBarrier" >
|
||||
<param name="barriers" type="GLbitfield"/>
|
||||
|
|
|
|||
|
|
@ -1551,6 +1551,7 @@ offsets = {
|
|||
"GetMultiTexGenfvEXT": 1515,
|
||||
"GetMultiTexGenivEXT": 1516,
|
||||
"MultiTexCoordPointerEXT": 1517,
|
||||
"BindImageTextureEXT": 1518,
|
||||
}
|
||||
|
||||
functions = [
|
||||
|
|
|
|||
|
|
@ -541,7 +541,7 @@ _mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u)
|
|||
static GLboolean
|
||||
validate_bind_image_texture(struct gl_context *ctx, GLuint unit,
|
||||
GLuint texture, GLint level, GLint layer,
|
||||
GLenum access, GLenum format)
|
||||
GLenum access, GLenum format, bool check_level_layer)
|
||||
{
|
||||
assert(ctx->Const.MaxImageUnits <= MAX_IMAGE_UNITS);
|
||||
|
||||
|
|
@ -550,14 +550,19 @@ validate_bind_image_texture(struct gl_context *ctx, GLuint unit,
|
|||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (level < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glBindImageTexture(level)");
|
||||
return GL_FALSE;
|
||||
}
|
||||
if (check_level_layer) {
|
||||
/* EXT_shader_image_load_store doesn't throw an error if level or
|
||||
* layer is negative.
|
||||
*/
|
||||
if (level < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glBindImageTexture(level)");
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (layer < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glBindImageTexture(layer)");
|
||||
return GL_FALSE;
|
||||
if (layer < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glBindImageTexture(layer)");
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (access != GL_READ_ONLY &&
|
||||
|
|
@ -637,7 +642,7 @@ _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
|
|||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!validate_bind_image_texture(ctx, unit, texture, level, layer, access,
|
||||
format))
|
||||
format, true))
|
||||
return;
|
||||
|
||||
if (texture) {
|
||||
|
|
@ -669,6 +674,31 @@ _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
|
|||
bind_image_texture(ctx, texObj, unit, level, layered, layer, access, format);
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindImageTextureEXT(GLuint index, GLuint texture, GLint level,
|
||||
GLboolean layered, GLint layer, GLenum access,
|
||||
GLint format)
|
||||
{
|
||||
struct gl_texture_object *texObj = NULL;
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!validate_bind_image_texture(ctx, index, texture, level, layer, access,
|
||||
format, false))
|
||||
return;
|
||||
|
||||
if (texture) {
|
||||
texObj = _mesa_lookup_texture(ctx, texture);
|
||||
|
||||
if (!texObj) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glBindImageTextureEXT(texture)");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bind_image_texture(ctx, texObj, index, level, layered, layer, access, format);
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE void
|
||||
bind_image_textures(struct gl_context *ctx, GLuint first, GLuint count,
|
||||
const GLuint *textures, bool no_error)
|
||||
|
|
|
|||
|
|
@ -92,6 +92,11 @@ _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
|
|||
GLboolean layered, GLint layer, GLenum access,
|
||||
GLenum format);
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindImageTextureEXT(GLuint unit, GLuint texture, GLint level,
|
||||
GLboolean layered, GLint layer, GLenum access,
|
||||
GLint format);
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindImageTextures_no_error(GLuint first, GLsizei count,
|
||||
const GLuint *textures);
|
||||
|
|
|
|||
|
|
@ -1409,6 +1409,9 @@ const struct function common_desktop_functions_possible[] = {
|
|||
|
||||
{ "glMaxShaderCompilerThreadsKHR", 11, -1 },
|
||||
|
||||
/* GL_EXT_shader_image_load_store */
|
||||
{ "glBindImageTextureEXT", 30, -1 },
|
||||
|
||||
{ NULL, 0, -1 }
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue