[Mesa-dev] [RFC 05/13] i965: re-compile shader if external texture unit changes

Topi Pohjolainen topi.pohjolainen at intel.com
Tue Feb 26 05:18:56 PST 2013


Both sampling and possible conversion to RGB are dependent on the
format of the DRI image representing the pixel source. In order to
accomodate this one re-compiles the program upon any changes.

Altering the program key effectively kicks off the re-compilation
as part of brw state uploading.

Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
 src/mesa/drivers/dri/i965/brw_program.h |    6 ++++++
 src/mesa/drivers/dri/i965/brw_wm.c      |    7 +++++++
 2 files changed, 13 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_program.h b/src/mesa/drivers/dri/i965/brw_program.h
index 1821775..de1f111 100644
--- a/src/mesa/drivers/dri/i965/brw_program.h
+++ b/src/mesa/drivers/dri/i965/brw_program.h
@@ -40,6 +40,12 @@ struct brw_sampler_prog_key_data {
     */
    uint16_t yuvtex_mask;
    uint16_t yuvtex_swap_mask; /**< UV swaped */
+
+   /**
+    * Format of the sampled texture when it is of the type image
+    * external and needs special sampling/conversion.
+    */
+   const struct intel_image_format *ext_format;
 };
 
 void brw_populate_sampler_prog_key_data(struct gl_context *ctx,
diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
index 8584e3f..cde1c9b 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -363,6 +363,13 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
 	    if (sampler->WrapR == GL_CLAMP)
 	       key->gl_clamp_mask[2] |= 1 << s;
 	 }
+
+         if (unit->_Current->Target == GL_TEXTURE_EXTERNAL_OES) {
+            const struct intel_texture_image *intel_img =
+               (const struct intel_texture_image *)img;
+
+            key->ext_format = intel_img->ext_format;
+         }
       }
    }
 }
-- 
1.7.9.5



More information about the mesa-dev mailing list