From: Henri Verbeet Subject: Re: [PATCH v3 3/6] wined3d: Add fetch4 to shader FFP generate texture stage Message-Id: Date: Tue, 27 Nov 2018 23:02:20 +0330 In-Reply-To: <20181124201337.20330-3-mailszeros@gmail.com> References: <20181122012823.15966-1-mailszeros@gmail.com> <20181124201337.20330-1-mailszeros@gmail.com> <20181124201337.20330-3-mailszeros@gmail.com> On Sat, 24 Nov 2018 at 23:44, Daniel Ansorregui wrote: > - Tested under W10, when Fetch4 is enabled, projection is ignored > - Untested what happens when Fetch4 is used on > unsupported textures. Disabling Fetch4 fttb. > - The swizzle fix has been checked against windows > since it does not match with gather4 > Could you submit those tests? > @@ -9865,6 +9865,7 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv * > case WINED3D_GL_RES_TYPE_TEX_1D: > texture_function = "texture1D"; > coord_mask = "x"; > + fetch4 = FALSE; > break; > case WINED3D_GL_RES_TYPE_TEX_2D: > texture_function = "texture2D"; > @@ -9873,6 +9874,7 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv * > case WINED3D_GL_RES_TYPE_TEX_3D: > texture_function = "texture3D"; > coord_mask = "xyz"; > + fetch4 = FALSE; > break; > case WINED3D_GL_RES_TYPE_TEX_CUBE: > texture_function = "textureCube"; > @@ -9881,17 +9883,28 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv * > case WINED3D_GL_RES_TYPE_TEX_RECT: > texture_function = "texture2DRect"; > coord_mask = "xy"; > + if (fetch4) > + FIXME("Unsupported Fetch4 and texture2DRect sampling"); > + fetch4 = FALSE; > break; > default: > FIXME("Unhandled texture type %#x.\n", settings->op[stage].tex_type); > texture_function = ""; > coord_mask = "xyzw"; > proj = FALSE; > + fetch4 = FALSE; > break; It may be nicer to just not set "fetch4" in gen_ffp_frag_op() for those texture types. > if (!legacy_syntax) > texture_function = "texture"; > > + if (fetch4) > + { > + texture_function = "textureGather"; Does that work with a GL 3.2 context? Or without core contexts? > @@ -5938,6 +5939,9 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d > settings->op[i].aarg1 = aarg1; > settings->op[i].aarg2 = aarg2; > settings->op[i].tmp_dst = state->texture_states[i][WINED3D_TSS_RESULT_ARG] == WINED3DTA_TEMP; > + settings->op[i].fetch4 = state->textures[i] && > + state->textures[i]->resource.format_flags & WINED3DFMT_FLAG_ALLOW_FETCH4 && > + state->sampler_states[i][WINED3D_SAMP_MIPMAP_LOD_BIAS] == MAKEFOURCC('G','E','T','4'); Formatting.