struct lp_build_format_cache;
struct lp_fragment_shader_variant;
+struct lp_compute_shader_variant;
struct llvmpipe_screen;
uint32_t first_level;
uint32_t last_level;
uint32_t mip_offsets[LP_MAX_TEXTURE_LEVELS];
+ uint32_t num_samples;
+ uint32_t sample_stride;
};
const void *base;
uint32_t row_stride;
uint32_t img_stride;
+ uint32_t num_samples;
+ uint32_t sample_stride;
};
enum {
LP_JIT_TEXTURE_FIRST_LEVEL,
LP_JIT_TEXTURE_LAST_LEVEL,
LP_JIT_TEXTURE_MIP_OFFSETS,
+ LP_JIT_TEXTURE_NUM_SAMPLES,
+ LP_JIT_TEXTURE_SAMPLE_STRIDE,
LP_JIT_TEXTURE_NUM_FIELDS /* number of fields above */
};
LP_JIT_IMAGE_BASE,
LP_JIT_IMAGE_ROW_STRIDE,
LP_JIT_IMAGE_IMG_STRIDE,
+ LP_JIT_IMAGE_NUM_SAMPLES,
+ LP_JIT_IMAGE_SAMPLE_STRIDE,
LP_JIT_IMAGE_NUM_FIELDS /* number of fields above */
};
/**
const uint32_t *ssbos[LP_MAX_TGSI_SHADER_BUFFERS];
int num_ssbos[LP_MAX_TGSI_SHADER_BUFFERS];
+
+ uint32_t sample_mask;
};
LP_JIT_CTX_VIEWPORTS,
LP_JIT_CTX_SSBOS,
LP_JIT_CTX_NUM_SSBOS,
+ LP_JIT_CTX_SAMPLE_MASK,
LP_JIT_CTX_COUNT
};
#define lp_jit_context_num_ssbos(_gallivm, _ptr) \
lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CTX_NUM_SSBOS, "num_ssbos")
+#define lp_jit_context_sample_mask(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CTX_SAMPLE_MASK, "sample_mask")
+
struct lp_jit_thread_data
{
struct lp_build_format_cache *cache;
* @param dady shader input dady
* @param color color buffer
* @param depth depth buffer
- * @param mask mask of visible pixels in block
+ * @param mask mask of visible pixels in block (16-bits per sample)
* @param thread_data task thread data
* @param stride color buffer row stride in bytes
* @param depth_stride depth buffer row stride in bytes
const void *dady,
uint8_t **color,
uint8_t *depth,
- uint32_t mask,
+ uint64_t mask,
struct lp_jit_thread_data *thread_data,
unsigned *stride,
- unsigned depth_stride);
+ unsigned depth_stride,
+ unsigned *color_sample_stride,
+ unsigned depth_sample_stride);
+
+
+struct lp_jit_cs_thread_data
+{
+ struct lp_build_format_cache *cache;
+ void *shared;
+};
+
+enum {
+ LP_JIT_CS_THREAD_DATA_CACHE = 0,
+ LP_JIT_CS_THREAD_DATA_SHARED = 1,
+ LP_JIT_CS_THREAD_DATA_COUNT
+};
+
+
+#define lp_jit_cs_thread_data_cache(_gallivm, _ptr) \
+ lp_build_struct_get(_gallivm, _ptr, LP_JIT_CS_THREAD_DATA_CACHE, "cache")
+
+#define lp_jit_cs_thread_data_shared(_gallivm, _ptr) \
+ lp_build_struct_get(_gallivm, _ptr, LP_JIT_CS_THREAD_DATA_SHARED, "shared")
+
+struct lp_jit_cs_context
+{
+ const float *constants[LP_MAX_TGSI_CONST_BUFFERS];
+ int num_constants[LP_MAX_TGSI_CONST_BUFFERS];
+
+ struct lp_jit_texture textures[PIPE_MAX_SHADER_SAMPLER_VIEWS];
+ struct lp_jit_sampler samplers[PIPE_MAX_SAMPLERS];
+ struct lp_jit_image images[PIPE_MAX_SHADER_IMAGES];
+
+ const uint32_t *ssbos[LP_MAX_TGSI_SHADER_BUFFERS];
+ int num_ssbos[LP_MAX_TGSI_SHADER_BUFFERS];
+ void *kernel_args;
+
+ uint32_t shared_size;
+};
+
+/**
+ * These enum values must match the position of the fields in the
+ * lp_jit_context struct above.
+ */
+enum {
+ LP_JIT_CS_CTX_CONSTANTS = 0,
+ LP_JIT_CS_CTX_NUM_CONSTANTS,
+ LP_JIT_CS_CTX_TEXTURES, /* must match the LP_JIT_CTX_TEXTURES */
+ LP_JIT_CS_CTX_SAMPLERS,
+ LP_JIT_CS_CTX_IMAGES,
+ LP_JIT_CS_CTX_SSBOS,
+ LP_JIT_CS_CTX_NUM_SSBOS,
+ LP_JIT_CS_CTX_KERNEL_ARGS,
+ LP_JIT_CS_CTX_SHARED_SIZE,
+ LP_JIT_CS_CTX_COUNT
+};
+
+#define lp_jit_cs_context_constants(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CS_CTX_CONSTANTS, "constants")
+
+#define lp_jit_cs_context_num_constants(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CS_CTX_NUM_CONSTANTS, "num_constants")
+
+#define lp_jit_cs_context_textures(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CS_CTX_TEXTURES, "textures")
+
+#define lp_jit_cs_context_samplers(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CS_CTX_SAMPLERS, "samplers")
+
+#define lp_jit_cs_context_images(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CS_CTX_IMAGES, "images")
+
+#define lp_jit_cs_context_ssbos(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CS_CTX_SSBOS, "ssbos")
+
+#define lp_jit_cs_context_num_ssbos(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CS_CTX_NUM_SSBOS, "num_ssbos")
+
+#define lp_jit_cs_context_shared_size(_gallivm, _ptr) \
+ lp_build_struct_get_ptr(_gallivm, _ptr, LP_JIT_CS_CTX_SHARED_SIZE, "shared_size")
+
+#define lp_jit_cs_context_kernel_args(_gallivm, _ptr) \
+ lp_build_struct_get(_gallivm, _ptr, LP_JIT_CS_CTX_KERNEL_ARGS, "kernel_args")
+
+
+typedef void
+(*lp_jit_cs_func)(const struct lp_jit_cs_context *context,
+ uint32_t x,
+ uint32_t y,
+ uint32_t z,
+ uint32_t grid_x,
+ uint32_t grid_y,
+ uint32_t grid_z,
+ uint32_t grid_size_x,
+ uint32_t grid_size_y,
+ uint32_t grid_size_z,
+ uint32_t work_dim,
+ struct lp_jit_cs_thread_data *thread_data);
void
lp_jit_screen_cleanup(struct llvmpipe_screen *screen);
void
lp_jit_init_types(struct lp_fragment_shader_variant *lp);
-
+void
+lp_jit_init_cs_types(struct lp_compute_shader_variant *lp);
#endif /* LP_JIT_H */