The existing code was missing GL_DEPTH_COMPONENT32, resulting in it wrongly returning the color buffer instead of the depth buffer. Fixes an issue in PlaneShift 0.5.7 when casting spells. The game calls CopyTexSubImage2D on buffers with a GL_DEPTH_COMPONENT32 internal format, which (prior to this patch) resulted in an attempt to copy ARGB8888 to X8_Z24. Instead of adding the missing enumeration directly, convert the code to use _mesa_is_depth_format() and _mesa_is_depthstencil_format() as these should catch any newly added depth formats in the future. NOTE: This is a candidate for the 7.10 and 7.11 branches. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>tags/mesa-8.0-rc1
DBG("%s %s\n", __FUNCTION__, | DBG("%s %s\n", __FUNCTION__, | ||||
_mesa_lookup_enum_by_nr(internalFormat)); | _mesa_lookup_enum_by_nr(internalFormat)); | ||||
switch (internalFormat) { | |||||
case GL_DEPTH_COMPONENT: | |||||
case GL_DEPTH_COMPONENT16: | |||||
case GL_DEPTH24_STENCIL8_EXT: | |||||
case GL_DEPTH_STENCIL_EXT: | |||||
if (_mesa_is_depth_format(internalFormat) || | |||||
_mesa_is_depthstencil_format(internalFormat)) | |||||
return intel_get_renderbuffer(intel->ctx.ReadBuffer, BUFFER_DEPTH); | return intel_get_renderbuffer(intel->ctx.ReadBuffer, BUFFER_DEPTH); | ||||
default: | |||||
return intel_renderbuffer(intel->ctx.ReadBuffer->_ColorReadBuffer); | |||||
} | |||||
return intel_renderbuffer(intel->ctx.ReadBuffer->_ColorReadBuffer); | |||||
} | } | ||||