i965/fs: Don't overwrite fs_visitor::uniforms and ::param_size during the SIMD16 run.
Image variables need to allocate additional uniform slots over nir_shader::num_uniforms. nir_setup_uniforms() overwrites the values imported from the SIMD8 visitor and then exits early before entering the nir_shader::uniforms loop, so image uniforms are never re-created. Instead leave the imported values alone, they *must* be the same for the uniform layout of both runs to be compatible. Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
@@ -182,9 +182,11 @@ fs_visitor::nir_setup_outputs(nir_shader *shader)
|
||||
void
|
||||
fs_visitor::nir_setup_uniforms(nir_shader *shader)
|
||||
{
|
||||
uniforms = shader->num_uniforms;
|
||||
num_direct_uniforms = shader->num_direct_uniforms;
|
||||
|
||||
if (dispatch_width != 8)
|
||||
return;
|
||||
|
||||
/* We split the uniform register file in half. The first half is
|
||||
* entirely direct uniforms. The second half is indirect.
|
||||
*/
|
||||
@@ -192,8 +194,7 @@ fs_visitor::nir_setup_uniforms(nir_shader *shader)
|
||||
if (shader->num_uniforms > num_direct_uniforms)
|
||||
param_size[num_direct_uniforms] = shader->num_uniforms - num_direct_uniforms;
|
||||
|
||||
if (dispatch_width != 8)
|
||||
return;
|
||||
uniforms = shader->num_uniforms;
|
||||
|
||||
if (shader_prog) {
|
||||
foreach_list_typed(nir_variable, var, node, &shader->uniforms) {
|
||||
|
||||
Reference in New Issue
Block a user