On Wed, Mar 7, 2018 at 3:35 PM, Marek Olšák <mar...@gmail.com> wrote: > From: Marek Olšák <marek.ol...@amd.com> > > Tested by our OpenCL team. > > Fixes: 9c499e6759b26c5e "st/mesa: don't invoke st_finalize_texture & > st_convert_sampler for TBOs"
Acked-by: Alex Deucher <alexander.deuc...@amd.com> > --- > src/gallium/state_trackers/dri/dri2.c | 58 > ++++++++++++++++++++--------------- > 1 file changed, 34 insertions(+), 24 deletions(-) > > diff --git a/src/gallium/state_trackers/dri/dri2.c > b/src/gallium/state_trackers/dri/dri2.c > index 2a3a2a8..31d17d4 100644 > --- a/src/gallium/state_trackers/dri/dri2.c > +++ b/src/gallium/state_trackers/dri/dri2.c > @@ -1870,53 +1870,63 @@ dri2_interop_export_object(__DRIcontext *_ctx, > * miplevel is zero or if the GL texture object is incomplete." > */ > if (!obj || > obj->Target != target || > !obj->_BaseComplete || > (in->miplevel > 0 && !obj->_MipmapComplete)) { > simple_mtx_unlock(&ctx->Shared->Mutex); > return MESA_GLINTEROP_INVALID_OBJECT; > } > > - /* From OpenCL 2.0 SDK, clCreateFromGLTexture: > - * "CL_INVALID_MIP_LEVEL if miplevel is less than the value of > - * levelbase (for OpenGL implementations) or zero (for OpenGL ES > - * implementations); or greater than the value of q (for both OpenGL > - * and OpenGL ES). levelbase and q are defined for the texture in > - * section 3.8.10 (Texture Completeness) of the OpenGL 2.1 > - * specification and section 3.7.10 of the OpenGL ES 2.0." > - */ > - if (in->miplevel < obj->BaseLevel || in->miplevel > obj->_MaxLevel) { > - simple_mtx_unlock(&ctx->Shared->Mutex); > - return MESA_GLINTEROP_INVALID_MIP_LEVEL; > - } > - > - if (!st_finalize_texture(ctx, st->pipe, obj, 0)) { > - simple_mtx_unlock(&ctx->Shared->Mutex); > - return MESA_GLINTEROP_OUT_OF_RESOURCES; > - } > + if (target == GL_TEXTURE_BUFFER) { > + struct st_buffer_object *stBuf = > + st_buffer_object(obj->BufferObject); > > - res = st_get_texobj_resource(obj); > - if (!res) { > - /* Incomplete texture buffer object? This shouldn't really occur. */ > - simple_mtx_unlock(&ctx->Shared->Mutex); > - return MESA_GLINTEROP_INVALID_OBJECT; > - } > + if (!stBuf || !stBuf->buffer) { > + /* this shouldn't happen */ > + simple_mtx_unlock(&ctx->Shared->Mutex); > + return MESA_GLINTEROP_INVALID_OBJECT; > + } > + res = stBuf->buffer; > > - if (target == GL_TEXTURE_BUFFER) { > out->internal_format = obj->BufferObjectFormat; > out->buf_offset = obj->BufferOffset; > out->buf_size = obj->BufferSize == -1 ? obj->BufferObject->Size : > obj->BufferSize; > > obj->BufferObject->UsageHistory |= USAGE_DISABLE_MINMAX_CACHE; > } else { > + /* From OpenCL 2.0 SDK, clCreateFromGLTexture: > + * "CL_INVALID_MIP_LEVEL if miplevel is less than the value of > + * levelbase (for OpenGL implementations) or zero (for OpenGL ES > + * implementations); or greater than the value of q (for both > OpenGL > + * and OpenGL ES). levelbase and q are defined for the texture in > + * section 3.8.10 (Texture Completeness) of the OpenGL 2.1 > + * specification and section 3.7.10 of the OpenGL ES 2.0." > + */ > + if (in->miplevel < obj->BaseLevel || in->miplevel > obj->_MaxLevel) > { > + simple_mtx_unlock(&ctx->Shared->Mutex); > + return MESA_GLINTEROP_INVALID_MIP_LEVEL; > + } > + > + if (!st_finalize_texture(ctx, st->pipe, obj, 0)) { > + simple_mtx_unlock(&ctx->Shared->Mutex); > + return MESA_GLINTEROP_OUT_OF_RESOURCES; > + } > + > + res = st_get_texobj_resource(obj); > + if (!res) { > + /* Incomplete texture buffer object? This shouldn't really > occur. */ > + simple_mtx_unlock(&ctx->Shared->Mutex); > + return MESA_GLINTEROP_INVALID_OBJECT; > + } > + > out->internal_format = obj->Image[0][0]->InternalFormat; > out->view_minlevel = obj->MinLevel; > out->view_numlevels = obj->NumLevels; > out->view_minlayer = obj->MinLayer; > out->view_numlayers = obj->NumLayers; > } > } > > /* Get the handle. */ > switch (in->access) { > -- > 2.7.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev