#include "glheader.h"
#include "context.h"
#include "enums.h"
-#include "imports.h"
+
#include "hash.h"
#include "mtypes.h"
#include "shaderimage.h"
#include "texturebindless.h"
#include "util/hash_table.h"
+#include "util/u_memory.h"
/**
* Return the gl_texture_handle_object for a given 64-bit handle.
} else {
imgObj.Layered = GL_FALSE;
imgObj.Layer = 0;
+ imgObj._Layer = 0;
}
/* Request a new image handle from the driver. */
void
_mesa_free_shared_handles(struct gl_shared_state *shared)
{
- _mesa_hash_table_u64_destroy(shared->TextureHandles, NULL);
- _mesa_hash_table_u64_destroy(shared->ImageHandles, NULL);
+ if (shared->TextureHandles)
+ _mesa_hash_table_u64_destroy(shared->TextureHandles, NULL);
+
+ if (shared->ImageHandles)
+ _mesa_hash_table_u64_destroy(shared->ImageHandles, NULL);
+
mtx_destroy(&shared->HandlesMutex);
}
return GL_FALSE;
}
+GLuint64 GLAPIENTRY
+_mesa_GetTextureHandleARB_no_error(GLuint texture)
+{
+ struct gl_texture_object *texObj;
+
+ GET_CURRENT_CONTEXT(ctx);
+
+ texObj = _mesa_lookup_texture(ctx, texture);
+ if (!_mesa_is_texture_complete(texObj, &texObj->Sampler,
+ ctx->Const.ForceIntegerTexNearest))
+ _mesa_test_texobj_completeness(ctx, texObj);
+
+ return get_texture_handle(ctx, texObj, &texObj->Sampler);
+}
+
GLuint64 GLAPIENTRY
_mesa_GetTextureHandleARB(GLuint texture)
{
* GetTextureSamplerHandleARB if the texture object specified by <texture>
* is not complete."
*/
- if (!_mesa_is_texture_complete(texObj, &texObj->Sampler)) {
+ if (!_mesa_is_texture_complete(texObj, &texObj->Sampler,
+ ctx->Const.ForceIntegerTexNearest)) {
_mesa_test_texobj_completeness(ctx, texObj);
- if (!_mesa_is_texture_complete(texObj, &texObj->Sampler)) {
+ if (!_mesa_is_texture_complete(texObj, &texObj->Sampler,
+ ctx->Const.ForceIntegerTexNearest)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glGetTextureHandleARB(incomplete texture)");
return 0;
return get_texture_handle(ctx, texObj, &texObj->Sampler);
}
+GLuint64 GLAPIENTRY
+_mesa_GetTextureSamplerHandleARB_no_error(GLuint texture, GLuint sampler)
+{
+ struct gl_texture_object *texObj;
+ struct gl_sampler_object *sampObj;
+
+ GET_CURRENT_CONTEXT(ctx);
+
+ texObj = _mesa_lookup_texture(ctx, texture);
+ sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+
+ if (!_mesa_is_texture_complete(texObj, sampObj,
+ ctx->Const.ForceIntegerTexNearest))
+ _mesa_test_texobj_completeness(ctx, texObj);
+
+ return get_texture_handle(ctx, texObj, sampObj);
+}
+
GLuint64 GLAPIENTRY
_mesa_GetTextureSamplerHandleARB(GLuint texture, GLuint sampler)
{
* GetTextureSamplerHandleARB if the texture object specified by <texture>
* is not complete."
*/
- if (!_mesa_is_texture_complete(texObj, sampObj)) {
+ if (!_mesa_is_texture_complete(texObj, sampObj,
+ ctx->Const.ForceIntegerTexNearest)) {
_mesa_test_texobj_completeness(ctx, texObj);
- if (!_mesa_is_texture_complete(texObj, sampObj)) {
+ if (!_mesa_is_texture_complete(texObj, sampObj,
+ ctx->Const.ForceIntegerTexNearest)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glGetTextureSamplerHandleARB(incomplete texture)");
return 0;
return get_texture_handle(ctx, texObj, sampObj);
}
+void GLAPIENTRY
+_mesa_MakeTextureHandleResidentARB_no_error(GLuint64 handle)
+{
+ struct gl_texture_handle_object *texHandleObj;
+
+ GET_CURRENT_CONTEXT(ctx);
+
+ texHandleObj = lookup_texture_handle(ctx, handle);
+ make_texture_handle_resident(ctx, texHandleObj, true);
+}
+
void GLAPIENTRY
_mesa_MakeTextureHandleResidentARB(GLuint64 handle)
{
make_texture_handle_resident(ctx, texHandleObj, true);
}
+void GLAPIENTRY
+_mesa_MakeTextureHandleNonResidentARB_no_error(GLuint64 handle)
+{
+ struct gl_texture_handle_object *texHandleObj;
+
+ GET_CURRENT_CONTEXT(ctx);
+
+ texHandleObj = lookup_texture_handle(ctx, handle);
+ make_texture_handle_resident(ctx, texHandleObj, false);
+}
+
void GLAPIENTRY
_mesa_MakeTextureHandleNonResidentARB(GLuint64 handle)
{
make_texture_handle_resident(ctx, texHandleObj, false);
}
+GLuint64 GLAPIENTRY
+_mesa_GetImageHandleARB_no_error(GLuint texture, GLint level, GLboolean layered,
+ GLint layer, GLenum format)
+{
+ struct gl_texture_object *texObj;
+
+ GET_CURRENT_CONTEXT(ctx);
+
+ texObj = _mesa_lookup_texture(ctx, texture);
+ if (!_mesa_is_texture_complete(texObj, &texObj->Sampler,
+ ctx->Const.ForceIntegerTexNearest))
+ _mesa_test_texobj_completeness(ctx, texObj);
+
+ return get_image_handle(ctx, texObj, level, layered, layer, format);
+}
+
GLuint64 GLAPIENTRY
_mesa_GetImageHandleARB(GLuint texture, GLint level, GLboolean layered,
GLint layer, GLenum format)
* <texture> is not a three-dimensional, one-dimensional array, two
* dimensional array, cube map, or cube map array texture."
*/
- if (!_mesa_is_texture_complete(texObj, &texObj->Sampler)) {
+ if (!_mesa_is_texture_complete(texObj, &texObj->Sampler,
+ ctx->Const.ForceIntegerTexNearest)) {
_mesa_test_texobj_completeness(ctx, texObj);
- if (!_mesa_is_texture_complete(texObj, &texObj->Sampler)) {
+ if (!_mesa_is_texture_complete(texObj, &texObj->Sampler,
+ ctx->Const.ForceIntegerTexNearest)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glGetImageHandleARB(incomplete texture)");
return 0;
return get_image_handle(ctx, texObj, level, layered, layer, format);
}
+void GLAPIENTRY
+_mesa_MakeImageHandleResidentARB_no_error(GLuint64 handle, GLenum access)
+{
+ struct gl_image_handle_object *imgHandleObj;
+
+ GET_CURRENT_CONTEXT(ctx);
+
+ imgHandleObj = lookup_image_handle(ctx, handle);
+ make_image_handle_resident(ctx, imgHandleObj, access, true);
+}
+
void GLAPIENTRY
_mesa_MakeImageHandleResidentARB(GLuint64 handle, GLenum access)
{
make_image_handle_resident(ctx, imgHandleObj, access, true);
}
+void GLAPIENTRY
+_mesa_MakeImageHandleNonResidentARB_no_error(GLuint64 handle)
+{
+ struct gl_image_handle_object *imgHandleObj;
+
+ GET_CURRENT_CONTEXT(ctx);
+
+ imgHandleObj = lookup_image_handle(ctx, handle);
+ make_image_handle_resident(ctx, imgHandleObj, GL_READ_ONLY, false);
+}
+
void GLAPIENTRY
_mesa_MakeImageHandleNonResidentARB(GLuint64 handle)
{
make_image_handle_resident(ctx, imgHandleObj, GL_READ_ONLY, false);
}
+GLboolean GLAPIENTRY
+_mesa_IsTextureHandleResidentARB_no_error(GLuint64 handle)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ return is_texture_handle_resident(ctx, handle);
+}
+
GLboolean GLAPIENTRY
_mesa_IsTextureHandleResidentARB(GLuint64 handle)
{
return is_texture_handle_resident(ctx, handle);
}
+GLboolean GLAPIENTRY
+_mesa_IsImageHandleResidentARB_no_error(GLuint64 handle)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ return is_image_handle_resident(ctx, handle);
+}
+
GLboolean GLAPIENTRY
_mesa_IsImageHandleResidentARB(GLuint64 handle)
{