mesa: allow internalformat_query with multisample texture targets
Now that we support ARB_texture_multisample, there are multiple targets accepted for this query, and they may have target-dependent limits, so pass the target to the driverfunc. For example, the sampling hardware may not be able to do general texelFetch() for some format/sample count combination, but the driver may still be able to implement a reasonable resolve operation, so it can be supported for renderbuffers. V2: - Don't break Gallium compile. Signed-off-by: Chris Forbes <chrisf@ijw.co.nz> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
3cc2629b3b
commit
86b8380600
|
@ -59,11 +59,13 @@
|
|||
***************************************/
|
||||
|
||||
static size_t
|
||||
brw_query_samples_for_format(struct gl_context *ctx, GLenum internalFormat,
|
||||
int samples[16])
|
||||
brw_query_samples_for_format(struct gl_context *ctx, GLenum target,
|
||||
GLenum internalFormat, int samples[16])
|
||||
{
|
||||
struct intel_context *intel = intel_context(ctx);
|
||||
|
||||
(void) target;
|
||||
|
||||
switch (intel->gen) {
|
||||
case 7:
|
||||
samples[0] = 8;
|
||||
|
|
|
@ -195,9 +195,10 @@ struct dd_function_table {
|
|||
GLenum srcFormat, GLenum srcType );
|
||||
|
||||
/**
|
||||
* Determine sample counts support for a particular format
|
||||
* Determine sample counts support for a particular target and format
|
||||
*
|
||||
* \param ctx GL context
|
||||
* \param target GL target enum
|
||||
* \param internalFormat GL format enum
|
||||
* \param samples Buffer to hold the returned sample counts.
|
||||
* Drivers \b must \b not return more than 16 counts.
|
||||
|
@ -207,6 +208,7 @@ struct dd_function_table {
|
|||
* \c internaFormat is not renderable, zero is returned.
|
||||
*/
|
||||
size_t (*QuerySamplesForFormat)(struct gl_context *ctx,
|
||||
GLenum target,
|
||||
GLenum internalFormat,
|
||||
int samples[16]);
|
||||
|
||||
|
|
|
@ -59,9 +59,10 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
|
|||
|
||||
case GL_TEXTURE_2D_MULTISAMPLE:
|
||||
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
|
||||
/* Mesa does not currently support GL_ARB_texture_multisample, so these
|
||||
* enums are not valid on this implementation either.
|
||||
*/
|
||||
/* These enums are only valid if ARB_texture_multisample is supported */
|
||||
if (_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_multisample)
|
||||
break;
|
||||
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glGetInternalformativ(target=%s)",
|
||||
|
@ -96,7 +97,8 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
|
|||
|
||||
switch (pname) {
|
||||
case GL_SAMPLES:
|
||||
count = ctx->Driver.QuerySamplesForFormat(ctx, internalformat, buffer);
|
||||
count = ctx->Driver.QuerySamplesForFormat(ctx, target,
|
||||
internalformat, buffer);
|
||||
break;
|
||||
case GL_NUM_SAMPLE_COUNTS: {
|
||||
/* The driver can return 0, and we should pass that along to the
|
||||
|
@ -115,7 +117,7 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
|
|||
* returned."
|
||||
*/
|
||||
const size_t num_samples =
|
||||
ctx->Driver.QuerySamplesForFormat(ctx, internalformat, buffer);
|
||||
ctx->Driver.QuerySamplesForFormat(ctx, target, internalformat, buffer);
|
||||
|
||||
/* QuerySamplesForFormat writes some stuff to buffer, so we have to
|
||||
* separately over-write it with the requested value.
|
||||
|
|
|
@ -1769,13 +1769,15 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target,
|
|||
* Called via ctx->Driver.ChooseTextureFormat().
|
||||
*/
|
||||
size_t
|
||||
st_QuerySamplesForFormat(struct gl_context *ctx, GLenum internalFormat,
|
||||
int samples[16])
|
||||
st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target,
|
||||
GLenum internalFormat, int samples[16])
|
||||
{
|
||||
struct st_context *st = st_context(ctx);
|
||||
enum pipe_format format;
|
||||
unsigned i, bind, num_sample_counts = 0;
|
||||
|
||||
(void) target;
|
||||
|
||||
if (_mesa_is_depth_or_stencil_format(internalFormat))
|
||||
bind = PIPE_BIND_DEPTH_STENCIL;
|
||||
else
|
||||
|
|
|
@ -67,8 +67,8 @@ st_ChooseTextureFormat(struct gl_context * ctx, GLenum target,
|
|||
GLenum format, GLenum type);
|
||||
|
||||
size_t
|
||||
st_QuerySamplesForFormat(struct gl_context *ctx, GLenum internalFormat,
|
||||
int samples[16]);
|
||||
st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target,
|
||||
GLenum internalFormat, int samples[16]);
|
||||
|
||||
/* can we use a sampler view to translate these formats
|
||||
only used to make TFP so far */
|
||||
|
|
Loading…
Reference in New Issue