gallium/radeon: don't crash when getting out-of-bounds TEMP references
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
@@ -191,6 +191,8 @@ emit_fetch(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TGSI_FILE_TEMPORARY:
|
case TGSI_FILE_TEMPORARY:
|
||||||
|
if (reg->Register.Index >= ctx->temps_count)
|
||||||
|
return LLVMGetUndef(tgsi2llvmtype(bld_base, type));
|
||||||
if (uses_temp_indirect_addressing(bld_base)) {
|
if (uses_temp_indirect_addressing(bld_base)) {
|
||||||
ptr = lp_get_temp_ptr_soa(bld, reg->Register.Index, swizzle);
|
ptr = lp_get_temp_ptr_soa(bld, reg->Register.Index, swizzle);
|
||||||
break;
|
break;
|
||||||
@@ -395,6 +397,8 @@ emit_store(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TGSI_FILE_TEMPORARY:
|
case TGSI_FILE_TEMPORARY:
|
||||||
|
if (range.First + i >= ctx->temps_count)
|
||||||
|
continue;
|
||||||
if (uses_temp_indirect_addressing(bld_base))
|
if (uses_temp_indirect_addressing(bld_base))
|
||||||
temp_ptr = lp_get_temp_ptr_soa(bld, i + range.First, chan_index);
|
temp_ptr = lp_get_temp_ptr_soa(bld, i + range.First, chan_index);
|
||||||
else
|
else
|
||||||
@@ -416,6 +420,8 @@ emit_store(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TGSI_FILE_TEMPORARY:
|
case TGSI_FILE_TEMPORARY:
|
||||||
|
if (reg->Register.Index >= ctx->temps_count)
|
||||||
|
continue;
|
||||||
if (uses_temp_indirect_addressing(bld_base)) {
|
if (uses_temp_indirect_addressing(bld_base)) {
|
||||||
temp_ptr = NULL;
|
temp_ptr = NULL;
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user