diff options
author | Francisco Jerez <[email protected]> | 2013-11-22 16:08:12 -0800 |
---|---|---|
committer | Francisco Jerez <[email protected]> | 2015-02-10 19:09:25 +0200 |
commit | 342b7ce7d4383db3f956e207f189376a94b359fe (patch) | |
tree | d96ff0f15de1e422a76f2c286956f9f096363597 | |
parent | 36a17f0f991323410778392bc2d00f9d911d501b (diff) |
i965: Allocate binding table space for shader images.
v2: Bump the number of supported image uniforms to 32 (Ken).
Reviewed-by: Paul Berry <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 5 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_shader.cpp | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index d315793b0b5..825358d5876 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -341,6 +341,7 @@ struct brw_stage_prog_data { uint32_t gather_texture_start; uint32_t ubo_start; uint32_t abo_start; + uint32_t image_start; uint32_t shader_time_start; /** @} */ } binding_table; @@ -621,6 +622,9 @@ struct brw_vs_prog_data { /** Max number of atomic counter buffer objects in a shader */ #define BRW_MAX_ABO 16 +/** Max number of image uniforms in a shader */ +#define BRW_MAX_IMAGES 32 + /** * Max number of binding table entries used for stream output. * @@ -653,6 +657,7 @@ struct brw_vs_prog_data { BRW_MAX_TEX_UNIT * 2 + /* normal, gather */ \ 12 + /* ubo */ \ BRW_MAX_ABO + \ + BRW_MAX_IMAGES + \ 2 /* shader time, pull constants */) #define SURF_INDEX_GEN6_SOL_BINDING(t) (t) diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp index d6daac0c383..3eea088f093 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.cpp +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -1118,6 +1118,13 @@ backend_visitor::assign_common_binding_table_offsets(uint32_t next_binding_table stage_prog_data->binding_table.abo_start = 0xd0d0d0d0; } + if (shader && shader->base.NumImages) { + stage_prog_data->binding_table.image_start = next_binding_table_offset; + next_binding_table_offset += shader->base.NumImages; + } else { + stage_prog_data->binding_table.image_start = 0xd0d0d0d0; + } + /* This may or may not be used depending on how the compile goes. */ stage_prog_data->binding_table.pull_constants_start = next_binding_table_offset; next_binding_table_offset++; |