On 16/10/17 04:10, Miklós Máté wrote:
Hi,

I'd like to ask you to revert this change.

As Ian Romanick pointed out this makes ATI_fs behave like ARB_fp, however there is a major difference between the two: with ATI_fs there is no way of knowing the texture targets until the draw call. When an ATI_fs is created, st_init_atifs_prog() sets every texture target to TEXTURE_2D_BIT, and st_fixup_atifs() sets the correct one, but unfortunately _mesa_update_texture_state() is called between them. After this patch update_program_texture_state() validates the texture targets to match the bound texture units, and thus rejects sampling from cube maps. This results in broken rendering in Knights of the Old Republic.

Before reverting anything are you able to create a piglit test that reproduces the issue, so that this doesn't get broken again in future?

Ideally we would have one for the crash Marek is seeing also.



MM

On 27/09/17 17:39, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@amd.com>

---
  src/mesa/main/texstate.c | 8 +++++---
  1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 269e291..edd2253 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -833,23 +833,25 @@ update_ff_texture_state(struct gl_context *ctx,
  void
  _mesa_update_texture_state(struct gl_context *ctx)
  {
     struct gl_program *prog[MESA_SHADER_STAGES];
     int i;
     int old_max_unit = ctx->Texture._MaxEnabledTexImageUnit;
     BITSET_DECLARE(enabled_texture_units, MAX_COMBINED_TEXTURE_IMAGE_UNITS);
     memcpy(prog, ctx->_Shader->CurrentProgram, sizeof(prog));
-   if (prog[MESA_SHADER_FRAGMENT] == NULL &&
-       _mesa_arb_fragment_program_enabled(ctx)) {
-      prog[MESA_SHADER_FRAGMENT] = ctx->FragmentProgram.Current;
+   if (prog[MESA_SHADER_FRAGMENT] == NULL) {
+      if (_mesa_arb_fragment_program_enabled(ctx))
+         prog[MESA_SHADER_FRAGMENT] = ctx->FragmentProgram.Current;
+      else if (_mesa_ati_fragment_shader_enabled(ctx))
+         prog[MESA_SHADER_FRAGMENT] = ctx->ATIFragmentShader.Current->Program;
     }
     /* TODO: only set this if there are actual changes */
     ctx->NewState |= _NEW_TEXTURE_OBJECT | _NEW_TEXTURE_STATE;
     ctx->Texture._GenFlags = 0x0;
     ctx->Texture._TexMatEnabled = 0x0;
     ctx->Texture._TexGenEnabled = 0x0;
     ctx->Texture._MaxEnabledTexImageUnit = -1;
     ctx->Texture._EnabledCoordUnits = 0x0;


_______________________________________________
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

Reply via email to