value = get_primitive_id(&radeon_bld->soa.bld_base, 0);
break;
+ case TGSI_SEMANTIC_GRID_SIZE:
+ value = LLVMGetParam(radeon_bld->main_fn, SI_PARAM_GRID_SIZE);
+ break;
+
+ case TGSI_SEMANTIC_BLOCK_SIZE:
+ {
+ LLVMValueRef values[3];
+ unsigned i;
+ unsigned *properties = ctx->shader->selector->info.properties;
+ unsigned sizes[3] = {
+ properties[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH],
+ properties[TGSI_PROPERTY_CS_FIXED_BLOCK_HEIGHT],
+ properties[TGSI_PROPERTY_CS_FIXED_BLOCK_DEPTH]
+ };
+
+ for (i = 0; i < 3; ++i)
+ values[i] = lp_build_const_int32(gallivm, sizes[i]);
+
+ value = lp_build_gather_values(gallivm, values, 3);
+ break;
+ }
+
+ case TGSI_SEMANTIC_BLOCK_ID:
+ value = LLVMGetParam(radeon_bld->main_fn, SI_PARAM_BLOCK_ID);
+ break;
+
+ case TGSI_SEMANTIC_THREAD_ID:
+ value = LLVMGetParam(radeon_bld->main_fn, SI_PARAM_THREAD_ID);
+ break;
+
default:
assert(!"unknown system value");
return;
}
break;
+ case TGSI_PROCESSOR_COMPUTE:
+ params[SI_PARAM_GRID_SIZE] = v3i32;
+ params[SI_PARAM_BLOCK_ID] = v3i32;
+ last_sgpr = SI_PARAM_BLOCK_ID;
+
+ params[SI_PARAM_THREAD_ID] = v3i32;
+ num_params = SI_PARAM_THREAD_ID + 1;
+ break;
default:
assert(0 && "unimplemented shader");
return;
break;
case PIPE_SHADER_GEOMETRY:
+ case PIPE_SHADER_COMPUTE:
break;
case PIPE_SHADER_FRAGMENT:
else
bld_base->emit_epilogue = si_llvm_return_fs_outputs;
break;
+ case TGSI_PROCESSOR_COMPUTE:
+ break;
default:
assert(!"Unsupported shader type");
return -1;
/* PS only */
SI_SGPR_ALPHA_REF = SI_NUM_RESOURCE_SGPRS,
SI_PS_NUM_USER_SGPR,
+
+ /* CS only */
+ SI_SGPR_GRID_SIZE = SI_NUM_RESOURCE_SGPRS,
+ SI_CS_NUM_USER_SGPR = SI_SGPR_GRID_SIZE + 3
};
/* LLVM function parameter indices */
SI_PARAM_SAMPLE_COVERAGE,
SI_PARAM_POS_FIXED_PT,
+ /* CS only parameters */
+ SI_PARAM_GRID_SIZE = SI_NUM_RESOURCE_PARAMS,
+ SI_PARAM_BLOCK_ID,
+ SI_PARAM_THREAD_ID,
+
SI_NUM_PARAMS = SI_PARAM_POS_FIXED_PT + 9, /* +8 for COLOR[0..1] */
};