On 28.01.2015 04:05, Tom Stellard wrote:
> v2:
>   - Only emit write SPI_TMPRING_SIZE once per packet.
>   - Use context global scratch buffer.
> 
> v3:
>   - Patch shaders using WRITE_DATA packet instead of map/unmap.
>   - Emit ICACHE_FLUSH, CS_PARTIAL_FLUSH, PS_PARTIAL_FLUSH, and
>     VS_PARTIAL_FLUSH when patching shaders.
> 
> v4:
>   - Code cleanups.
>   - Remove unnecessary multiplies.
> 
> v5:
>   - Patch shaders in system memory and re-upload to vram.

[...]

> @@ -158,6 +159,12 @@ static struct pipe_context *si_create_context(struct 
> pipe_screen *screen, void *
>                                    sctx->null_const_buf.buffer->width0, 0, 
> false);
>       }
>  
> +     /* XXX: This is the maximum value allowed.  I'm not sure how compute
> +      * this for non-cs shaders.  Using the wrong value here can result in
> +      * GPU lockups, but the maximum value seems to always work.
> +      */

Missing 'to' in "I'm not sure how to compute".


> @@ -571,6 +571,21 @@ void si_draw_vbo(struct pipe_context *ctx, const struct 
> pipe_draw_info *info)
>       if (sctx->b.flags)
>               sctx->atoms.s.cache_flush->dirty = true;
>  
> +
> +     if (sctx->emit_scratch_reloc) {

Extraneous blank line before the if statement.


> +     /* Update the shader state to use the new shader bo. */
> +        si_shader_init_pm4_state(shader);

Indentation of the function call looks off.


> +static unsigned si_get_max_scratch_bytes_per_wave(struct si_context *sctx)
> +{
> +
> +     return MAX3(si_get_scratch_buffer_bytes_per_wave(sctx, sctx->ps_shader),
> +                     si_get_scratch_buffer_bytes_per_wave(sctx, 
> sctx->gs_shader),
> +                     si_get_scratch_buffer_bytes_per_wave(sctx, 
> sctx->vs_shader));
> +}

[...]

> +     if (scratch_needed_size > 0) {
> +
> +             if (scratch_needed_size > current_scratch_buffer_size) {
> +
> +                     /* Create a bigger scratch buffer */

Extraneous blank lines at the beginning of the blocks.


> +             /* Update the shaders, so they are using the latest scratch.  
> The
> +              * scratch buffer may have been changed since these shaders were
> +              * last used, so we still need to try to update them, even if
> +              * they require scratch buffers smaller than the current size.
> +              */
> +             if (si_update_scratch_buffer(sctx, sctx->ps_shader)) {
> +                     si_pm4_bind_state(sctx, ps, 
> sctx->ps_shader->current->pm4);
> +                     sctx->emitted.named.ps = NULL;
> +             }
> +             if (si_update_scratch_buffer(sctx, sctx->gs_shader)) {
> +                     si_pm4_bind_state(sctx, gs, 
> sctx->gs_shader->current->pm4);
> +                     sctx->emitted.named.gs = NULL;
> +             }
> +             if (si_update_scratch_buffer(sctx, sctx->vs_shader)) {
> +                     si_pm4_bind_state(sctx, vs, 
> sctx->vs_shader->current->pm4);
> +                     sctx->emitted.named.vs = NULL;
> +             }

Setting the emitted states to NULL isn't necessary. I think Marek made
that suggestion based on the assumption that the PM4 states would be
modified instead of replaced by new ones, but I don't think that's
practical.


In patch 4, I spotted a typo: 'beofre'


Other than that, the series is

Reviewed-by: Michel Dänzer <michel.daen...@amd.com>


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to