X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fvc4%2Fvc4_screen.c;h=4a5ce4feee7f51047e3a76ce7b27699ec2b5fe07;hb=2e48b286bf21501ac06832799a4b7957bb8ac893;hp=7e5961392249f2f071f1421473cfca692709793d;hpb=8ee74ce50f980a15ab68ad40df702831ac8d68e0;p=mesa.git diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c index 7e596139224..4a5ce4feee7 100644 --- a/src/gallium/drivers/vc4/vc4_screen.c +++ b/src/gallium/drivers/vc4/vc4_screen.c @@ -22,8 +22,7 @@ * IN THE SOFTWARE. */ -#include - +#include "os/os_misc.h" #include "pipe/p_defines.h" #include "pipe/p_screen.h" #include "pipe/p_state.h" @@ -51,6 +50,9 @@ static const struct debug_named_value debug_options[] = { "Print during performance-related events" }, { "norast", VC4_DEBUG_NORAST, "Skip actual hardware execution of commands" }, + { "always_flush", VC4_DEBUG_ALWAYS_FLUSH, + "Flush after each draw call" }, + { NULL } }; DEBUG_GET_ONCE_FLAGS_OPTION(vc4_debug, "VC4_DEBUG", debug_options, 0) @@ -106,8 +108,10 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: return 1; - /* Unsupported features. */ case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES: + return 1; + + /* Unsupported features. */ case PIPE_CAP_ANISOTROPIC_FILTER: case PIPE_CAP_TEXTURE_BUFFER_OBJECTS: case PIPE_CAP_CUBE_MAP_ARRAY: @@ -158,6 +162,8 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_MAX_VERTEX_STREAMS: case PIPE_CAP_DRAW_INDIRECT: case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE: + case PIPE_CAP_CONDITIONAL_RENDER_INVERTED: + case PIPE_CAP_SAMPLER_VIEW_TARGET: return 0; /* Stream output. */ @@ -195,12 +201,32 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_MIN_TEXEL_OFFSET: return 0; + case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE: + return 2048; + case PIPE_CAP_ENDIANNESS: return PIPE_ENDIAN_LITTLE; case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT: return 64; + case PIPE_CAP_VENDOR_ID: + return 0x14E4; + case PIPE_CAP_DEVICE_ID: + return 0xFFFFFFFF; + case PIPE_CAP_ACCELERATED: + return 1; + case PIPE_CAP_VIDEO_MEMORY: { + uint64_t system_memory; + + if (!os_get_total_physical_memory(&system_memory)) + return 0; + + return (int)(system_memory >> 20); + } + case PIPE_CAP_UMA: + return 1; + default: fprintf(stderr, "unknown param %d\n", param); return 0; @@ -252,9 +278,9 @@ vc4_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader, case PIPE_SHADER_CAP_MAX_INPUTS: return 16; case PIPE_SHADER_CAP_MAX_TEMPS: - return 64; /* Max native temporaries. */ + return 256; /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE: - return 64 * sizeof(float[4]); + return 16 * 1024 * sizeof(float); case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: return 1; case PIPE_SHADER_CAP_MAX_PREDS: @@ -271,11 +297,12 @@ vc4_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader, case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED: return 0; case PIPE_SHADER_CAP_INTEGERS: + return 1; case PIPE_SHADER_CAP_DOUBLES: return 0; case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: - return 16; + return VC4_MAX_TEXTURE_SAMPLERS; case PIPE_SHADER_CAP_PREFERRED_IR: return PIPE_SHADER_IR_TGSI; default: @@ -285,46 +312,6 @@ vc4_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader, return 0; } -uint8_t -vc4_get_texture_format(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_B8G8R8A8_UNORM: - return 0; - case PIPE_FORMAT_B8G8R8X8_UNORM: - return 1; - case PIPE_FORMAT_R8G8B8A8_UNORM: - return 0; - case PIPE_FORMAT_R8G8B8X8_UNORM: - return 1; - case PIPE_FORMAT_A8R8G8B8_UNORM: - return 0; - case PIPE_FORMAT_X8R8G8B8_UNORM: - return 1; - case PIPE_FORMAT_A8B8G8R8_UNORM: - return 0; - case PIPE_FORMAT_X8B8G8R8_UNORM: - return 1; -/* - case PIPE_FORMAT_R4G4B4A4_UNORM: - return 2; - case PIPE_FORMAT_R5G5B5A1_UNORM: - return 3; - case PIPE_FORMAT_R5G6B5_UNORM: - return 4; -*/ - case PIPE_FORMAT_L8_UNORM: - return 5; - case PIPE_FORMAT_A8_UNORM: - return 6; - case PIPE_FORMAT_L8A8_UNORM: - return 7; - /* XXX: ETC1 and more*/ - default: - return ~0; - } -} - static boolean vc4_screen_is_format_supported(struct pipe_screen *pscreen, enum pipe_format format, @@ -340,35 +327,40 @@ vc4_screen_is_format_supported(struct pipe_screen *pscreen, return FALSE; } - if (usage & PIPE_BIND_VERTEX_BUFFER && - (format == PIPE_FORMAT_R32G32B32A32_FLOAT || - format == PIPE_FORMAT_R32G32B32_FLOAT || - format == PIPE_FORMAT_R32G32_FLOAT || - format == PIPE_FORMAT_R32_FLOAT)) { - retval |= PIPE_BIND_VERTEX_BUFFER; + if (usage & PIPE_BIND_VERTEX_BUFFER) { + switch (format) { + case PIPE_FORMAT_R32G32B32A32_FLOAT: + case PIPE_FORMAT_R32G32B32_FLOAT: + case PIPE_FORMAT_R32G32_FLOAT: + case PIPE_FORMAT_R32_FLOAT: + case PIPE_FORMAT_R8G8B8A8_UNORM: + case PIPE_FORMAT_R8G8B8_UNORM: + case PIPE_FORMAT_R8G8_UNORM: + case PIPE_FORMAT_R8_UNORM: + case PIPE_FORMAT_R8G8B8A8_SNORM: + case PIPE_FORMAT_R8G8B8_SNORM: + case PIPE_FORMAT_R8G8_SNORM: + case PIPE_FORMAT_R8_SNORM: + retval |= PIPE_BIND_VERTEX_BUFFER; + break; + default: + break; + } } if ((usage & PIPE_BIND_RENDER_TARGET) && - (format == PIPE_FORMAT_B8G8R8A8_UNORM || - format == PIPE_FORMAT_B8G8R8X8_UNORM || /* XXX: really? */ - format == PIPE_FORMAT_R8G8B8A8_UNORM || - format == PIPE_FORMAT_R8G8B8X8_UNORM || /* XXX: really? */ - format == PIPE_FORMAT_A8B8G8R8_UNORM || - format == PIPE_FORMAT_X8B8G8R8_UNORM || /* XXX: really? */ - format == PIPE_FORMAT_A8R8G8B8_UNORM || - format == PIPE_FORMAT_X8R8G8B8_UNORM || /* XXX: really? */ - format == PIPE_FORMAT_R16G16B16A16_FLOAT)) { + vc4_rt_format_supported(format)) { retval |= PIPE_BIND_RENDER_TARGET; } if ((usage & PIPE_BIND_SAMPLER_VIEW) && - (vc4_get_texture_format(format) != ~0)) { + (vc4_tex_format_supported(format))) { retval |= PIPE_BIND_SAMPLER_VIEW; } if ((usage & PIPE_BIND_DEPTH_STENCIL) && - (format == PIPE_FORMAT_Z24_UNORM_S8_UINT || - format == PIPE_FORMAT_Z24X8_UNORM)) { + (format == PIPE_FORMAT_S8_UINT_Z24_UNORM || + format == PIPE_FORMAT_X8Z24_UNORM)) { retval |= PIPE_BIND_DEPTH_STENCIL; }