gallium/compute: Drop TGSI dependency.
authorFrancisco Jerez <currojerez@riseup.net>
Sun, 18 Mar 2012 22:59:33 +0000 (23:59 +0100)
committerFrancisco Jerez <currojerez@riseup.net>
Fri, 11 May 2012 10:39:42 +0000 (12:39 +0200)
Add a shader cap for specifying the preferred shader representation.
Right now the only supported value is TGSI, other enum values will be
added as they are needed.

This is mainly to accommodate AMD's LLVM compiler back-end by letting
it bypass the TGSI representation for compute programs.  Other drivers
will keep using the common TGSI instruction set.

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/docs/source/screen.rst
src/gallium/include/pipe/p_defines.h
src/gallium/include/pipe/p_state.h

index 8e4584023dfb1a3ebc6b67925ccbdfbe63e2fce6..d912dc6d81d15a0e2b8fb609b670807f44d30739 100644 (file)
@@ -185,6 +185,8 @@ to be 0.
   If unsupported, only float opcodes are supported.
 * ``PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS``: THe maximum number of texture
   samplers.
+* ``PIPE_SHADER_CAP_PREFERRED_IR``: Preferred representation of the
+  program.  It should be one of the ``pipe_shader_ir`` enum values.
 
 
 .. _pipe_compute_cap:
index 9a0bce1c658ddc5ffaf42523d04491dbd2f551c5..edcca23746b33b87299306370dafb4dc83fe1834 100644 (file)
@@ -524,7 +524,16 @@ enum pipe_shader_cap
    PIPE_SHADER_CAP_INDIRECT_CONST_ADDR = 15,
    PIPE_SHADER_CAP_SUBROUTINES = 16, /* BGNSUB, ENDSUB, CAL, RET */
    PIPE_SHADER_CAP_INTEGERS = 17,
-   PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS = 18
+   PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS = 18,
+   PIPE_SHADER_CAP_PREFERRED_IR = 19
+};
+
+/**
+ * Shader intermediate representation.
+ */
+enum pipe_shader_ir
+{
+   PIPE_SHADER_IR_TGSI
 };
 
 /**
index 7e741cfd98878a30c94e6e9a6dd03522b67317bf..02cd1fdfafb39a990317370fb6f29483605d73ec 100644 (file)
@@ -584,7 +584,7 @@ struct pipe_resolve_info
 
 struct pipe_compute_state
 {
-   const struct tgsi_token *tokens; /**< Compute program to be executed. */
+   const void *prog; /**< Compute program to be executed. */
    unsigned req_local_mem; /**< Required size of the LOCAL resource. */
    unsigned req_private_mem; /**< Required size of the PRIVATE resource. */
    unsigned req_input_mem; /**< Required size of the INPUT resource. */