[Mesa-dev] [PATCH] radv: Flush before vkCmdWriteTimestamp() if needed

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Dec 5 19:42:53 UTC 2018



On 12/5/18 7:24 PM, Juan A. Suarez Romero wrote:
> On Wed, 2018-12-05 at 09:52 +0000, Alex Smith wrote:
>> As done for vkCmdBeginQuery() already. Prevents timestamps from being
>> overwritten by previous vkCmdResetQueryPool() calls if the shader path
>> was used to do the reset.
>>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108925
>> Fixes: a41e2e9cf5 ("radv: allow to use a compute shader for resetting the query pool")
>> Signed-off-by: Alex Smith <asmith at feralinteractive.com>
>> ---
> 
> 
> As this fixes a41e2e9cf5, which is in 18.2 stable branch, I've picked it to
> include also in 18.2
> 
> Nevertheless, it didn't apply cleanly, so I've resolved the conflicts.
> 
> You can find the fixed version at
> 
> https://gitlab.freedesktop.org/mesa/mesa/commit/b631a1258b1c0ee20aad46bb09ee8e82b3f8c1fd

Looks good to me, thanks Juan.

> 
> 
> Cheers,
> 
> 	J.A.
> 
>>   src/amd/vulkan/radv_query.c | 30 +++++++++++++++++++-----------
>>   1 file changed, 19 insertions(+), 11 deletions(-)
>>
>> diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
>> index 550abe307a..e226bcef6a 100644
>> --- a/src/amd/vulkan/radv_query.c
>> +++ b/src/amd/vulkan/radv_query.c
>> @@ -1436,6 +1436,22 @@ static unsigned event_type_for_stream(unsigned stream)
>>   	}
>>   }
>>   
>> +static void emit_query_flush(struct radv_cmd_buffer *cmd_buffer,
>> +			     struct radv_query_pool *pool)
>> +{
>> +	if (cmd_buffer->pending_reset_query) {
>> +		if (pool->size >= RADV_BUFFER_OPS_CS_THRESHOLD) {
>> +			/* Only need to flush caches if the query pool size is
>> +			 * large enough to be resetted using the compute shader
>> +			 * path. Small pools don't need any cache flushes
>> +			 * because we use a CP dma clear.
>> +			 */
>> +			si_emit_cache_flush(cmd_buffer);
>> +			cmd_buffer->pending_reset_query = false;
>> +		}
>> +	}
>> +}
>> +
>>   static void emit_begin_query(struct radv_cmd_buffer *cmd_buffer,
>>   			     uint64_t va,
>>   			     VkQueryType query_type,
>> @@ -1582,17 +1598,7 @@ void radv_CmdBeginQueryIndexedEXT(
>>   
>>   	radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
>>   
>> -	if (cmd_buffer->pending_reset_query) {
>> -		if (pool->size >= RADV_BUFFER_OPS_CS_THRESHOLD) {
>> -			/* Only need to flush caches if the query pool size is
>> -			 * large enough to be resetted using the compute shader
>> -			 * path. Small pools don't need any cache flushes
>> -			 * because we use a CP dma clear.
>> -			 */
>> -			si_emit_cache_flush(cmd_buffer);
>> -			cmd_buffer->pending_reset_query = false;
>> -		}
>> -	}
>> +	emit_query_flush(cmd_buffer, pool);
>>   
>>   	va += pool->stride * query;
>>   
>> @@ -1669,6 +1675,8 @@ void radv_CmdWriteTimestamp(
>>   
>>   	radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
>>   
>> +	emit_query_flush(cmd_buffer, pool);
>> +
>>   	int num_queries = 1;
>>   	if (cmd_buffer->state.subpass && cmd_buffer->state.subpass->view_mask)
>>   		num_queries = util_bitcount(cmd_buffer->state.subpass->view_mask);
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list