{ "mem", DEBUG_MEM, NULL },
{ "fs", DEBUG_FS, NULL },
{ "cs", DEBUG_CS, NULL },
- { "nir", DEBUG_NIR, NULL },
+ { "tgsi_ir", DEBUG_TGSI_IR, NULL },
+ { "cl", DEBUG_CL, NULL },
DEBUG_NAMED_VALUE_END
};
#endif
case PIPE_CAP_MAX_TEXEL_OFFSET:
return 31;
case PIPE_CAP_CONDITIONAL_RENDER:
- return 1;
case PIPE_CAP_TEXTURE_BARRIER:
- return 0;
+ return 1;
case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS:
case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS:
return 16*4;
case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES:
case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
return 1024;
- case PIPE_CAP_MAX_VERTEX_STREAMS:
- return 1;
+ case PIPE_CAP_MAX_VERTEX_STREAMS: {
+ struct llvmpipe_screen *lscreen = llvmpipe_screen(screen);
+ return lscreen->use_tgsi ? 1 : 4;
+ }
case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE:
return 2048;
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
- case PIPE_CAP_TGSI_TEXCOORD:
return 0;
+ case PIPE_CAP_TGSI_TEXCOORD:
case PIPE_CAP_DRAW_INDIRECT:
return 1;
case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
return 1;
case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
+ return 1;
case PIPE_CAP_TGSI_TEX_TXF_LZ:
- return 0;
case PIPE_CAP_SAMPLER_VIEW_TARGET:
return 1;
case PIPE_CAP_FAKE_SW_MSAA:
case PIPE_CAP_MAX_VARYINGS:
return 32;
case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
- return 1;
+ return 16;
case PIPE_CAP_QUERY_BUFFER_OBJECT:
return 1;
+ case PIPE_CAP_DRAW_PARAMETERS:
+ return 1;
+ case PIPE_CAP_MULTI_DRAW_INDIRECT:
+ case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
+ return 1;
+ case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
+ return 32;
case PIPE_CAP_MULTISAMPLE_Z_RESOLVE:
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
- case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
case PIPE_CAP_DEPTH_BOUNDS_TEST:
case PIPE_CAP_TGSI_TXQS:
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
case PIPE_CAP_SHAREABLE_SHADERS:
- case PIPE_CAP_DRAW_PARAMETERS:
case PIPE_CAP_TGSI_PACK_HALF_FLOAT:
- case PIPE_CAP_MULTI_DRAW_INDIRECT:
- case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
case PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL:
- case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
case PIPE_CAP_INVALIDATE_BUFFER:
case PIPE_CAP_GENERATE_MIPMAP:
case PIPE_CAP_STRING_MARKER:
case PIPE_CAP_PCI_FUNCTION:
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES:
- case PIPE_CAP_TGSI_VOTE:
case PIPE_CAP_MAX_WINDOW_RECTANGLES:
case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED:
case PIPE_CAP_VIEWPORT_SUBPIXEL_BITS:
return LP_MAX_TGSI_SHADER_BUFFER_SIZE;
case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE:
+ case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
return 1;
+ case PIPE_CAP_TGSI_VOTE:
case PIPE_CAP_LOAD_CONSTBUF:
- case PIPE_CAP_PACKED_UNIFORMS:
- return !!(LP_DEBUG & DEBUG_NIR);
+ case PIPE_CAP_PACKED_UNIFORMS: {
+ struct llvmpipe_screen *lscreen = llvmpipe_screen(screen);
+ return !lscreen->use_tgsi;
+ }
default:
return u_pipe_screen_get_param_defaults(screen, param);
}
enum pipe_shader_type shader,
enum pipe_shader_cap param)
{
+ struct llvmpipe_screen *lscreen = llvmpipe_screen(screen);
switch(shader)
{
- case PIPE_SHADER_FRAGMENT:
case PIPE_SHADER_COMPUTE:
+ if ((LP_DEBUG & DEBUG_CL) && param == PIPE_SHADER_CAP_SUPPORTED_IRS)
+ return (1 << PIPE_SHADER_IR_TGSI) | (1 << PIPE_SHADER_IR_NIR) | (1 << PIPE_SHADER_IR_NIR_SERIALIZED);
+ case PIPE_SHADER_FRAGMENT:
+ if (param == PIPE_SHADER_CAP_PREFERRED_IR) {
+ if (lscreen->use_tgsi)
+ return PIPE_SHADER_IR_TGSI;
+ else
+ return PIPE_SHADER_IR_NIR;
+ }
switch (param) {
default:
- if ((LP_DEBUG & DEBUG_NIR) && param == PIPE_SHADER_CAP_PREFERRED_IR)
- return PIPE_SHADER_IR_NIR;
return gallivm_get_shader_param(param);
}
+ case PIPE_SHADER_TESS_CTRL:
+ case PIPE_SHADER_TESS_EVAL:
+ if (lscreen->use_tgsi)
+ return 0;
case PIPE_SHADER_VERTEX:
case PIPE_SHADER_GEOMETRY:
- if ((LP_DEBUG & DEBUG_NIR) && param == PIPE_SHADER_CAP_PREFERRED_IR)
- return PIPE_SHADER_IR_NIR;
+ if (param == PIPE_SHADER_CAP_PREFERRED_IR) {
+ if (lscreen->use_tgsi)
+ return PIPE_SHADER_IR_TGSI;
+ else
+ return PIPE_SHADER_IR_NIR;
+ }
switch (param) {
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
case PIPE_CAPF_MAX_POINT_WIDTH:
/* fall-through */
case PIPE_CAPF_MAX_POINT_WIDTH_AA:
- return 255.0; /* arbitrary */
+ return LP_MAX_POINT_WIDTH; /* arbitrary */
case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 16.0; /* not actually signficant at this time */
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
}
return sizeof(uint64_t);
case PIPE_COMPUTE_CAP_GRID_DIMENSION:
+ if (ret) {
+ uint32_t *grid_dim = ret;
+ *grid_dim = 3;
+ }
+ return sizeof(uint32_t);
case PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE:
+ if (ret) {
+ uint64_t *max_global_size = ret;
+ *max_global_size = (1ULL << 31);
+ }
+ return sizeof(uint64_t);
+ case PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE:
+ if (ret) {
+ uint64_t *max_mem_alloc_size = ret;
+ *max_mem_alloc_size = (1ULL << 31);
+ }
+ return sizeof(uint64_t);
case PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE:
+ if (ret) {
+ uint64_t *max_private = ret;
+ *max_private = (1UL << 31);
+ }
+ return sizeof(uint64_t);
case PIPE_COMPUTE_CAP_MAX_INPUT_SIZE:
- case PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE:
- case PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY:
- case PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS:
+ if (ret) {
+ uint64_t *max_input = ret;
+ *max_input = 4096;
+ }
+ return sizeof(uint64_t);
case PIPE_COMPUTE_CAP_IMAGES_SUPPORTED:
+ if (ret) {
+ uint32_t *images = ret;
+ *images = 0;
+ }
+ return sizeof(uint32_t);
+ case PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK:
+ return 0;
case PIPE_COMPUTE_CAP_SUBGROUP_SIZE:
+ if (ret) {
+ uint32_t *subgroup_size = ret;
+ *subgroup_size = 32;
+ }
+ return sizeof(uint32_t);
+ case PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS:
+ if (ret) {
+ uint32_t *max_compute_units = ret;
+ *max_compute_units = 8;
+ }
+ return sizeof(uint32_t);
+ case PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY:
+ if (ret) {
+ uint32_t *max_clock_freq = ret;
+ *max_clock_freq = 300;
+ }
+ return sizeof(uint32_t);
case PIPE_COMPUTE_CAP_ADDRESS_BITS:
- case PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK:
- break;
+ if (ret) {
+ uint32_t *address_bits = ret;
+ *address_bits = 64;
+ }
+ return sizeof(uint32_t);
}
return 0;
}
.lower_flrp32 = true,
.lower_flrp64 = true,
.lower_fsat = true,
- .lower_bitfield_insert_to_bitfield_select = true,
- .lower_bitfield_extract = true,
+ .lower_bitfield_insert_to_shifts = true,
+ .lower_bitfield_extract_to_shifts = true,
.lower_sub = true,
.lower_ffma = true,
.lower_fmod = true,
+ .lower_hadd = true,
+ .lower_add_sat = true,
.lower_pack_snorm_2x16 = true,
.lower_pack_snorm_4x8 = true,
.lower_pack_unorm_2x16 = true,
.lower_extract_byte = true,
.lower_extract_word = true,
.lower_rotate = true,
+ .lower_ifind_msb = true,
.optimize_sample_mask_in = true,
.max_unroll_iterations = 32,
.use_interpolated_input_intrinsics = true,
if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
return false;
-
- /* TODO: Support stencil-only formats */
- if (format_desc->swizzle[0] == PIPE_SWIZZLE_NONE) {
- return false;
- }
}
if (format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC ||
if(winsys->destroy)
winsys->destroy(winsys);
+ glsl_type_singleton_decref();
+
mtx_destroy(&screen->rast_mutex);
mtx_destroy(&screen->cs_mutex);
FREE(screen);
util_cpu_detect();
+ glsl_type_singleton_init_or_ref();
+
#ifdef DEBUG
LP_DEBUG = debug_get_flags_option("LP_DEBUG", lp_debug_flags, 0 );
#endif
screen->base.finalize_nir = llvmpipe_finalize_nir;
llvmpipe_init_screen_resource_funcs(&screen->base);
+ screen->use_tgsi = (LP_DEBUG & DEBUG_TGSI_IR);
screen->num_threads = util_cpu_caps.nr_cpus > 1 ? util_cpu_caps.nr_cpus : 0;
#ifdef EMBEDDED_DEVICE
screen->num_threads = 0;