Mesa (master): i965: Fix HW binding tables editing

Chris Wilson ickle at kemper.freedesktop.org
Fri Aug 7 19:57:10 UTC 2015


Module: Mesa
Branch: master
Commit: ffadfbf5d076638fa4022106cfe989bc5a145f20
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ffadfbf5d076638fa4022106cfe989bc5a145f20

Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Aug  5 13:58:46 2015 +0100

i965: Fix HW binding tables editing

Since the introduction of new gl_shader_stages in

commit a2af956963b6bc4d29f37485e44c98008d2ef077
Author: Fabian Bieler <fabianbieler at fastmail.fm>
Date:   Fri Mar 7 10:19:09 2014 +0100

    mesa: add tessellation shader enums

the translation table for the stage into the HW binding table edit
command was broken, and so we used illegal commands. Fix the array
initialisation to be impervious to changes in the gl_shader_stages enum
and add the asserts that would have caught the issue earlier.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Abdiel Janulgue <abdiel.janulgue at linux.intel.com>
Cc: Jordan Justen <jordan.l.justen at intel.com>
Cc: Matt Turner <mattst88 at gmail.com>
Cc: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Matt Turner <mattst88 at gmail.com>

---

 src/mesa/drivers/dri/i965/brw_binding_tables.c |   15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_binding_tables.c b/src/mesa/drivers/dri/i965/brw_binding_tables.c
index 8d3697a..b188fc7 100644
--- a/src/mesa/drivers/dri/i965/brw_binding_tables.c
+++ b/src/mesa/drivers/dri/i965/brw_binding_tables.c
@@ -44,10 +44,10 @@
 #include "brw_state.h"
 #include "intel_batchbuffer.h"
 
-static const GLuint stage_to_bt_edit[MESA_SHADER_FRAGMENT + 1] = {
-   _3DSTATE_BINDING_TABLE_EDIT_VS,
-   _3DSTATE_BINDING_TABLE_EDIT_GS,
-   _3DSTATE_BINDING_TABLE_EDIT_PS,
+static const GLuint stage_to_bt_edit[] = {
+   [MESA_SHADER_VERTEX] = _3DSTATE_BINDING_TABLE_EDIT_VS,
+   [MESA_SHADER_GEOMETRY] = _3DSTATE_BINDING_TABLE_EDIT_GS,
+   [MESA_SHADER_FRAGMENT] = _3DSTATE_BINDING_TABLE_EDIT_PS,
 };
 
 static uint32_t
@@ -233,7 +233,8 @@ gen7_edit_hw_binding_table_entry(struct brw_context *brw,
                                  uint32_t index,
                                  uint32_t surf_offset)
 {
-   assert(stage <= MESA_SHADER_FRAGMENT);
+   assert(stage < ARRAY_SIZE(stage_to_bt_edit));
+   assert(stage_to_bt_edit[stage]);
 
    uint32_t dw2 = SET_FIELD(index, BRW_BINDING_TABLE_INDEX) |
       (brw->gen >= 8 ? GEN8_SURFACE_STATE_EDIT(surf_offset) :
@@ -259,7 +260,9 @@ gen7_update_binding_table_from_array(struct brw_context *brw,
                                      int num_surfaces)
 {
    uint32_t dw2 = 0;
-   assert(stage <= MESA_SHADER_FRAGMENT);
+
+   assert(stage < ARRAY_SIZE(stage_to_bt_edit));
+   assert(stage_to_bt_edit[stage]);
 
    BEGIN_BATCH(num_surfaces + 2);
    OUT_BATCH(stage_to_bt_edit[stage] << 16 | num_surfaces);




More information about the mesa-commit mailing list