mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 20:00:10 +01:00
i965: Use GL_RED for DEPTH_TEXTURE_MODE in ES 3.0 for unsized formats.
Khronos has apparently decided that depth textures with sized formats (allowed with ARB_internalformat_query or ES 3.0) should be treated as GL_RED, while unsized formats (an existing feature) should be treated as GL_INTENSITY for compatibility with ES 2.0. Ian is proposing changes to ARB_internalformat_query which will make this actually legal and consistent. A similar problem exists with GL 4.2, but we're going to ignore that for the time being. Tested on Ivybridge: no Piglit regressions; fixes 4 es3conform tests: - depth_texture_fbo - depth_texture_fbo_clear - depth_texture_teximage - depth_texture_texsubimage Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
7638ede4ce
commit
9db2098d18
4 changed files with 21 additions and 7 deletions
|
|
@ -202,7 +202,8 @@ GLuint translate_tex_format(gl_format mesa_format,
|
|||
GLenum depth_mode,
|
||||
GLenum srgb_decode);
|
||||
|
||||
int brw_get_texture_swizzle(const struct gl_texture_object *t);
|
||||
int brw_get_texture_swizzle(const struct gl_context *ctx,
|
||||
const struct gl_texture_object *t);
|
||||
|
||||
/* gen7_wm_surface_state.c */
|
||||
uint32_t gen7_surface_tiling_mode(uint32_t tiling);
|
||||
|
|
|
|||
|
|
@ -316,7 +316,7 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
|
|||
* (except for GL_ALPHA); all other platforms need MOVs in the shader.
|
||||
*/
|
||||
if (!intel->is_haswell || alpha_depth)
|
||||
key->swizzles[s] = brw_get_texture_swizzle(t);
|
||||
key->swizzles[s] = brw_get_texture_swizzle(ctx, t);
|
||||
|
||||
if (img->InternalFormat == GL_YCBCR_MESA) {
|
||||
key->yuvtex_mask |= 1 << s;
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
*/
|
||||
|
||||
|
||||
#include "main/context.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/samplerobj.h"
|
||||
#include "program/prog_parameter.h"
|
||||
|
|
@ -685,7 +686,8 @@ brw_get_surface_num_multisamples(unsigned num_samples)
|
|||
* swizzling.
|
||||
*/
|
||||
int
|
||||
brw_get_texture_swizzle(const struct gl_texture_object *t)
|
||||
brw_get_texture_swizzle(const struct gl_context *ctx,
|
||||
const struct gl_texture_object *t)
|
||||
{
|
||||
const struct gl_texture_image *img = t->Image[0][t->BaseLevel];
|
||||
|
||||
|
|
@ -701,7 +703,19 @@ brw_get_texture_swizzle(const struct gl_texture_object *t)
|
|||
|
||||
if (img->_BaseFormat == GL_DEPTH_COMPONENT ||
|
||||
img->_BaseFormat == GL_DEPTH_STENCIL) {
|
||||
switch (t->DepthMode) {
|
||||
GLenum depth_mode = t->DepthMode;
|
||||
|
||||
/* In ES 3.0, DEPTH_TEXTURE_MODE is expected to be GL_RED for textures
|
||||
* with depth component data specified with a sized internal format.
|
||||
* Otherwise, it's left at the old default, GL_LUMINANCE.
|
||||
*/
|
||||
if (_mesa_is_gles3(ctx) &&
|
||||
img->InternalFormat != GL_DEPTH_COMPONENT &&
|
||||
img->InternalFormat != GL_DEPTH_STENCIL) {
|
||||
depth_mode = GL_RED;
|
||||
}
|
||||
|
||||
switch (depth_mode) {
|
||||
case GL_ALPHA:
|
||||
swizzles[0] = SWIZZLE_ZERO;
|
||||
swizzles[1] = SWIZZLE_ZERO;
|
||||
|
|
|
|||
|
|
@ -344,9 +344,8 @@ gen7_update_texture_surface(struct gl_context *ctx,
|
|||
(firstImage->_BaseFormat == GL_DEPTH_COMPONENT ||
|
||||
firstImage->_BaseFormat == GL_DEPTH_STENCIL);
|
||||
|
||||
const int swizzle =
|
||||
unlikely(alpha_depth) ? SWIZZLE_XYZW : brw_get_texture_swizzle(tObj);
|
||||
|
||||
const int swizzle = unlikely(alpha_depth)
|
||||
? SWIZZLE_XYZW : brw_get_texture_swizzle(ctx, tObj);
|
||||
|
||||
surf[7] =
|
||||
SET_FIELD(swizzle_to_scs(GET_SWZ(swizzle, 0)), GEN7_SURFACE_SCS_R) |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue