[Mesa-dev] [PATCH] radv: Add bound checking workaround for dynamic buffers.

Samuel Pitoiset samuel.pitoiset at gmail.com
Thu Apr 19 07:19:25 UTC 2018



On 04/19/2018 07:31 AM, Bas Nieuwenhuizen wrote:
> I have seen a few applications and games do the dynamic buffer bounds incorrectly, this
> make it easier to work around, e.g. for debugging.

Example?

Either way:

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

> ---
>   src/amd/vulkan/radv_cmd_buffer.c | 4 +++-
>   src/amd/vulkan/radv_debug.h      | 1 +
>   src/amd/vulkan/radv_device.c     | 1 +
>   3 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
> index f6b23f6e73..1afdeda486 100644
> --- a/src/amd/vulkan/radv_cmd_buffer.c
> +++ b/src/amd/vulkan/radv_cmd_buffer.c
> @@ -2224,6 +2224,8 @@ void radv_CmdBindDescriptorSets(
>   	RADV_FROM_HANDLE(radv_pipeline_layout, layout, _layout);
>   	unsigned dyn_idx = 0;
>   
> +	const bool no_dynamic_bounds = cmd_buffer->device->instance->debug_flags & RADV_DEBUG_NO_DYNAMIC_BOUNDS;
> +
>   	for (unsigned i = 0; i < descriptorSetCount; ++i) {
>   		unsigned idx = i + firstSet;
>   		RADV_FROM_HANDLE(radv_descriptor_set, set, pDescriptorSets[i]);
> @@ -2238,7 +2240,7 @@ void radv_CmdBindDescriptorSets(
>   			uint64_t va = range->va + pDynamicOffsets[dyn_idx];
>   			dst[0] = va;
>   			dst[1] = S_008F04_BASE_ADDRESS_HI(va >> 32);
> -			dst[2] = range->size;
> +			dst[2] = no_dynamic_bounds ? 0xffffffffu : range->size;
>   			dst[3] = S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) |
>   			         S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
>   			         S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) |
> diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
> index f35991fa4e..f9034c62e1 100644
> --- a/src/amd/vulkan/radv_debug.h
> +++ b/src/amd/vulkan/radv_debug.h
> @@ -43,6 +43,7 @@ enum {
>   	RADV_DEBUG_SYNC_SHADERS      = 0x2000,
>   	RADV_DEBUG_NO_SISCHED        = 0x4000,
>   	RADV_DEBUG_PREOPTIR          = 0x8000,
> +	RADV_DEBUG_NO_DYNAMIC_BOUNDS = 0x10000,
>   };
>   
>   enum {
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index fd11cedcbf..a7a2b6b63f 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -383,6 +383,7 @@ static const struct debug_control radv_debug_options[] = {
>   	{"syncshaders", RADV_DEBUG_SYNC_SHADERS},
>   	{"nosisched", RADV_DEBUG_NO_SISCHED},
>   	{"preoptir", RADV_DEBUG_PREOPTIR},
> +	{"nodynamicbounds", RADV_DEBUG_NO_DYNAMIC_BOUNDS},
>   	{NULL, 0}
>   };
>   
> 


More information about the mesa-dev mailing list